Eigene Funktionen schreiben

Previous  Next

 

 

 

26.02.2010

Eigene Funktionen schreiben

 

Programmteile die Sie mehrmals in Ihrem Projekt verwenden möchten, sollten Sie nicht einfach nur kopieren und an anderen Stelle wieder einfügen, sondern dafür eine eigene Funktion schreiben. Überall dort wo Sie die entsprechende Funktionalität brauchen, genügt dann nur eine einzige Anweisung, um die entsprechende Funktion aufzurufen. Dadurch reduzieren Sie Ihren Code deutlich, wodurch Ihr Programm wesentlich übersichtlicher wird. Darüber hinaus müssen Sie spätere Änderungen dann nur noch an einer Stelle durchführen, sodass sich Ihr Anwendung viel leichter warten und erweitern lässt.

 

Aber auch dann wenn einzelne Codeabschnitte zu groß und unübersichtlich werden, sollten Sie zusammenfassbare Teile in einzelne Funktionen ausgliedern. Dadurch schrumpfen übergroße Codebereiche erheblich und werden dadurch wieder deutlich übersichtlicher.

 

 

» Neue Funktion anlegen «

Eine neue Funktion wird i.d.R. bei einer Komponente hinterlegt, z.B. bei einem Formular. Der Komponenten-Name, also der Ort wo sich die Funktion im Code befindet, wird später auch beim Aufruf der Funktion mit angegeben. Deshalb sollten Sie die Funktion möglichst bei der Komponente hinterlegen, die am meisten mit der Funktion etwas zu tun hat, z.B. weil die Funktion auf die entsprechende Komponente zugreift oder diese in irgend einer Form verändert. Wenn Sie dann auch noch einen aussagekräftigen Funktionsnamen wählen, wird der Funktionsaufruf selbsterklärend, z.B. Formular.berechneBrutto( ). Hierbei gelten dieselben Namensregeln wie bei Variablen.

 

 

1.Klicken Sie im Code-Editor die Komponente an, bei der Sie eine Funktion hinterlegen möchten und um zum Code dieser Komponente zu gelangen.
2.Klicken Sie in der Kopfzeile des Code-Editors auf cpnup, um zur Komponenten-Übersicht zu gelangen.
3.Klicken Sie bei Funktionen - Objekt auf clip0553, um eine neue Funktion anzulegen. Legen Sie im folgenden Assistenten den Funktions-Namen, ggf. einen Rückgabewert sowie ggf. Parameter fest und klicken Sie auf OK.

clip0546

 

 

Erklärung zu den Symbolen:

 

Syntax

Erklärung

clip0553

Anlegen einer neuen Funktion.

 

open

Springt zum Code der selektierten Funktion

 

edit

Definition der selektierten Funktion bearbeiten.

 

copy

Kopiert die selektierte Funktion. Diese kann dann bei einer anderen GUI-Komponente oder Klasse eingefügt werden.

 

paste

Fügt eine kopierte Funktion ein.

 

delete

Löscht die selektierte Funktion.

 

clip0554

Zeigt alle Codestellen, an der die selektierte Funktion aufgerufen wird.

 

sort

Sortiert die aufgelisteten Funktionen wahlweise alphabetisch oder nach Typ.

 

 

 

» Übergabe-Parameter festlegen «

Beim Anlegen der Funktion können Sie im Assistenten bei Parameter beliebige Übergabewerte, sprich Parameter festlegen, die der Funktion beim Aufruf als Eingangswerte übergeben werden müssen. Zum Beispiel müsste man einer Funktion die einen Bruttopreis errechnen soll, den Nettopreis sowie den Steuersatz als Eingangswerte übergeben. Sehr wichtig dabei ist die Wahl des richtigen Datentyps. Die hier festgelegten Variablen werden dann automatisch vom Code-Editor definiert und müssen somit in der Funktion selbst nicht mehr definiert werden. Beim späteren Aufruf der Funktion müssen die Parameter dann in derselben Reihenfolge angegeben werden wie in der Funktions-Definition, hier z.B. berechneBrutto(nettoWert, steuerSatz).

 

clip0547

 

Hinweis: Es muss nicht zwingend ein Parameter übergeben werden. Viele Funktionen kommen ohne Parameter aus

 

 

» Rückgabewert festlegen «

Wenn die Funktion ein Ergebnis liefern soll, müssen Sie im Assistenten die Option Rückgabewert anwählen sowie den Datentyp des Rückgabewertes festlegen, z.B. Decimal. Der Rückgabewert selbst wird am Ende des Funktionscodes mit der Anweisung hmtoggle_plus1 return XDEV NLS: Verlasse Funktion zurückgegeben, z.B. hmtoggle_plus1 return bruttoWert XDEV NLS: Verlasse Funktion bruttoWert.

 

clip0548

 

Hinweis: Es muss nicht zwingend ein Rückgabewert geliefert werden.

 

 

» Code der Funktion «

Die Variablen, die beim Aufruf der Funktion als Parameter übergeben werden, werden automatisch im Funktionskopf definiert. Die Variable für den Rückgabewert müssen Sie jedoch selber definieren, z.B. hmtoggle_plus1 Decimal bruttoWert XDEV NLS: Fließkommazahl bruttoWert. Nach dem Funktionskopf folgt der Programmcode der Funktion, z.B. hier die Berechnung eines Bruttowertes. Abschließend müssen Sie am Ende der Funktion den Rückgabewert mit Hilfe der Anweisung hmtoggle_plus1 return XDEV NLS: Verlasse Funktion zurückgeben, z.B. hmtoggle_plus1 return bruttoWert XDEV NLS: Verlasse Funktion bruttoWert.

 

hmtoggle_plus1XDEV Object Language

1

 

2

3

4

5

 

Decimal berechneBrutto (Decimal nettoWert, Decimal steuerSatz)

{

   Decimal bruttoWert;

   bruttoWert = nettoWert+nettoWert*steuerSatz/100;

 

   return bruttoWert;

}

hmtoggle_plus1XDEV Basic

1

2

3

4

5

Decimal berechneBrutto Decimal nettoWert, Decimal steuerSatz

   Decimal bruttoWert

   bruttoWert = nettoWert+nettoWert*steuerSatz/100

 

   return bruttoWert

hmtoggle_plus1XDEV NLS

1

2

3

4

5

Fließkommazahl berechneBrutto ( Fließkommazahl nettoWert, Fließkommazahl steuerSatz )

   Fließkommazahl bruttoWert

   bruttoWert = nettoWert+nettoWert*steuerSatz/100

 

   Verlasse Funktion bruttoWert

 

 

Tipp: Neu angelegte Funktionen erscheinen auch in der Funktionsbibliothek bei der jeweiligen Komponente bei der sie angelegt wurden.

 

 

» Funktion aufrufen «

Beim Aufruf der Funktion, z.B. berechneBrutto(nettoWert, steuerSatz), müssen lediglich vorab die Variablen definiert werden, die als Parameter übergeben werden müssen sowie die Variable, die den Rückgabewert aufnehmen muss. Beim Funktionsaufruf muss die Komponente angegeben werden, bei der die Funktion hinterlegt ist, z.B. bei der Komponente Formular.

 

hmtoggle_plus1XDEV Object Language

1

2

3

4

5

Decimal nettoWert = 100;

Decimal steuerSatz = 19;

Decimal bruttoWert;

 

bruttoWert = Formular.berechneBrutto(nettoWert, steuerSatz);

hmtoggle_plus1XDEV Basic

1

2

3

4

5

Decimal nettoWert = 100

Decimal steuerSatz = 19

Decimal bruttoWert

 

bruttoWert = Formular.berechneBrutto(nettoWert, steuerSatz)

hmtoggle_plus1XDEV NLS

1

2

3

4

5

Fließkommazahl nettoWert = 100

Fließkommazahl steuerSatz = 19

Fließkommazahl bruttoWert

 

bruttoWert = Formular\berechneBrutto(nettoWert, steuerSatz)

 

 

» Funktion beim Fenster hinterlegen «

Wenn die Funktion zu keiner GUI-Komponente richtig passt, dann können Sie die Funktion auch direkt beim aktuellen Fenster hinterlegen. Klicken Sie dazu in der Kopfzeile des Code-Editors auf cpnup, bis Sie zur Fenster-Übersicht gelangen. Der Aufruf der Funktion erfolgt dann über den Fensternamen, z.B. Fenster.berechneBrutto(nettoWert, steuerSatz).

 

 

» Globale Funktionen «

Funktionen, die Sie direkt beim Projekt hinterlegen, lassen sich mit Hilfe des Schlüsselwortes hmtoggle_plus1 project XDEV NLS: Projekt im gesamten Projekt aufrufen und werden deshalb als globale Funktionen bezeichnet, z.B. hmtoggle_plus1 project.berechneBrutto(nettoWert, steuerSatz) XDEV NLS: Projekt\erechneBrutto ( nettoWert, steuerSatz ). Um eine globale Funktion anzulegen, klicken Sie in der Kopfzeile des Code-Editors auf  cpnup, bis Sie zur Projekt-Übersicht gelangen. Der Nachteil von globalen Funktionen ist, dass Sie bei bei vielen Funktionen relativ leicht die Übersicht verlieren können. Mit Hilfe einer benutzerdefinierten Klasse können Sie Ihre Funktionen dagegen strukturiert und thematisch übersichtlich verwalten.

 

 

» Klasse als Funktions-Container «

clip0556

Um eigene Funktionen möglichst strukturiert und übersichtlich zu verwalten, bietet sich das Anlegen eigener Klassen an. Die Funktion wird dann anstatt bei einer GUI-Komponente, bei der entsprechend thematisch passenden Klasse angelegt. Eine solche Klasse dient dann lediglich als Funktions-Container, wie eine Art eigene Funktionsbibliothek. Der Vorteil ist, dass Sie damit in der Lage sind, beliebig viele Funktionen thematisch zu gruppieren und mit bestmöglicher Übersicht zu verwalten. Der Nachteil ist dabei jedoch, dass Sie eine Klasse in jedem Ereignis immer erst instanzieren müssen, bevor Sie auf die entsprechenden Funktionen zugreifen können. Nachdem Sie die Klasse jedoch instanziert haben, erfolgt der Funktionsaufruf genauso wie über eine GUI-Komponente.

 

hmtoggle_plus1XDEV Object Language

1

 

2

3

4

5

 

Kalkulationen kalkulation = new Kalkulationen();

 

Decimal nettoWert = 100;

Decimal steuerSatz = 19;

Decimal bruttoWert;

 

bruttoWert = kalkulation.berechneBrutto(nettoWert, steuerSatz);

hmtoggle_plus1XDEV Basic

1

2

3

4

5

Kalkulationen kalkulation = new Kalkulationen()

 

Decimal nettoWert = 100

Decimal steuerSatz = 19

Decimal bruttoWert

 

bruttoWert = kalkulation.berechneBrutto(nettoWert, steuerSatz)

hmtoggle_plus1XDEV NLS

1

2

3

4

5

Kalkulationen kalkulation = Erzeuge Kalkulationen( )

 

Fließkommazahl nettoWert = 100

Fließkommazahl steuerSatz = 19

Fließkommazahl bruttoWert

 

bruttoWert = kalkulation\berechneBrutto(nettoWert, steuerSatz)

 

Tipp: Besonders häufig benötigte Klassen können Sie deshalb schon bei Projektstart instanzieren, sodas Ihnen die entsprechenden Klassen global zur Verfügung stehen.

 

 

» Funktionen überladen «

In XDEV 2  können Sie Funktionen auch überladen, d.h. es dürfen mehrere Funktionen mit demselben Funktionsnamen existieren, wenn diese unterschiedliche Parameter besitzen.

 

clip0555

 

 

Tipp: Eine kopierte Funktion lässt sich auch in ein parallel geöffnetes Projekt einfügen und somit projektübergreifend verwenden. Auch eine GUI-Komponente können Sie kopieren und in ein anderes Projekt einfügen. Dabei werden auch entsprechend hinterlegte Funktionen mit kopiert. Auch beim Export / Import von Templates und einzelnen Fenstern werden ggf. hinterlegte Funktionen mit kopiert.

 

 

Basiswissen: Variablen, Funktionen und Methoden.