Funktionen und Prozeduren sind Programmteile, die unter einem Namen ansprechbar sind. Der Vorteil von einer Programmierung mit Funktionen und Prozeduren ist, dass Programmcode, der oft benötigt wird, nicht jedesmal neu geschrieben werden muss. Außerdem behält der Programmierer mit Funktionen und Prozeduren die Übersicht über ein umfangreiches Projekt. Metacard bringt bereits eine ganze Reihe vordefinierter Funktionen mit. Die wichtigsten Funktionen sind in Tabelle 4 aufgelistet. An dieser Stelle will ich zunächst einmal zeigen, wie Sie eigene Funktionen und Prozeduren in Metatalk programmieren und natürlich auch aufrufen. Wenn Sie den Artikel bis zu dieser Stelle durchgelesen haben, sind Sie bereits auf eine Prozedur gestoßen, ohne es zu merken. Bei der Nachrichtenbearbeitung haben Sie Ihren Programmtext zwischen folgende Zeilen geschrieben:
On mouseUp … End mouseUp
Somit haben Sie bereits eine Prozedur erstellt. Im wesentlichen kennzeichnen Sie eine Prozedur mit den beiden Wörtern 'On' und 'End', gefolgt von dem Prozedurnamen, den Sie so wählen sollten, dass Sie mit keinen bestehenden Funktionen, Prozeduren und Nachrichten in Konflikt kommen. Bei der Definition einer Prozedur kann hinter dem Namen eine Parameterliste angegeben werden. In einem Beispiel betrachtet sähe eine Prozedur dann etwa so aus:
On addieren zahl1, zahl2
put zahl1 + zahl2 into ergebnis
End addierenDer Prozedur 'addieren' werden zwei Variablen als Parameter übergeben, die anschließend addiert werden und in der Variablen 'ergebnis' gespeichert werden. Der entsprechende Prozeduraufruf lautet:
addiere 2, 3
Jetzt, wo Sie die Arbeitsweise von Prozeduren kennen, werden Sie sich sicherlich Fragen, in welcher Weise sich Funktionen von Prozeduren unterscheiden. Im Wesentlichen gibt es nur einen Unterschied: Funktionen müssen immer einen Wert zurückgeben. Der Befehl, der Werte zurückliefert, heißt 'return'. Nachdem ein 'return' ausgeführt wurde, wird die Bearbeitung der Funktion sofort beendet und zum normalen Programmablauf zurückgekehrt. Bei der Definition einer Funktion gibt es in der Schreibweise ebenfalls einige Unterschiede. Zum Vergleich schreiben wir die Prozedur 'addieren' nun als Funktion:
function addieren zahl1, zahl2
put zahl1 + zahl2 into ergebnis
return ergebnis
end addierenBei dem Funktionsaufruf können Sie auf zwei verschiedene Weisen vorgehen. Entweder Sie schreiben direkt:
put addieren(2,3) into zahl
Oder Sie schreiben:
get addieren (2,3) put it into zahl
In jedem Fall wird der Rückgabewert der Variablen 'zahl' zugewiesen. Diese Vorgehensweise ist bei Prozeduren nicht möglich.
Jetzt müssen Sie lediglich noch wissen, in welchem Script-Programm Sie Ihre Funktionen bzw. Prozeduren unterbringen. Script-Programme von Objekten wie z.B. Buttons oder Textfelder sind hierfür meist schlecht geeignet, da alle Funktionen und Prozeduren, die innerhalb dieser Skripte definiert sind, auch nur innerhalb dieser Skripte aufgerufen können. Besser ist oftmals der Platz im Kartenskript oder im Stackskript, da so alle Funktionen innerhalb der ganzen Karte bzw. innerhalb des ganzen Stacks von allen Objekten aufgerufen werden können.
Tabelle 4 : vordefinierte Funktionen in Metatalk (Auszug)
| abs([zahl1]) | Liefert den absoluten Betrag einer Zahl. |
| atan([zahl1]) | Von einer im Bogenmaß angegebenen Zahl wird der Arcus Tangens berechnet. |
| average([zahl1],[zahl2], … , [zahl n]) | Liefert den Durchschnitt einer Reihe von Zahlen. |
| cos([zahl1]) | Der Kosinus eines Winkels im Bogenmaß |
| exp([zahl1]) | Berechnet e hoch zahl1. |
| ln([zahl1]) | Berechnet den natürlichen Logarithmus zur Basis e. |
| max([zahl1],[zahl2], … , [zahl n]) | Findet die größte Zahl einer Reihe. |
| min([zahl1],[zahl2], … , [zahl n]) | Findet die kleinste Zahl einer Reihe. |
| sin([zahl1]) | Liefert den Sinus eines Winkels, der im Bogenmaß angegeben ist. |
| sqrt([zahl1]) | Berechnet die Quadratwurzel einer Zahl. |
| sum([zahl1],[zahl2], … , [zahl n]) | Addiert eine Reihe von Zahlen. |
| tan([zahl1]) | Berechnet den Tangens einer Zahl im Bogenmaß. |
| trunc([zahl1]) | Schneidet von einer Zahl die Nachkommastellen ab. |
Mit dem erworbenen Wissen können Sie jetzt ein vollständiges Programm unter Metacard realisieren. Das Erstellen eines kompletten Programms wollen wir hier am Beispiel einer Adressverwaltung demonstrieren. Sie werden merken, dass weder das Erstellen der grafischen Benutzeroberfläche, noch das eigentliche Programmieren Probleme macht.
Starten Sie Metacard und legen Sie einen neuen Stapel Ihrer Wahl an. Wenn Sie nun das leere Fenster sehen, können Sie mit dem Entwurf der grafischen Oberfläche beginnen. Abbildung 1 zeigt die Benutzeroberfläche der Adressverwaltung.
Wie Sie sehen, besteht die Karte aus 9 Textfeldern, 8 Beschriftungen und 4 Schaltflächen. Die Textfelder tragen dieselben Namen wie die nebenstehenden Beschriftungen. Die 8 Beschriftungen sind mit dem Rechteck-Zeichen-Werkzeug erstellt worden. Damit nur der Text angezeigt wird, müssen auf dem Eigenschaften-Dialog noch zwei kleine Anpassungen vorgenommen werden. Unter dem Register "Appearance" muss die Option "Show Name" angewählt werden, damit der unter "Label" angegebene Name als Beschriftung verwendet wird. Außerdem sollte "lineSize" auf 0 gestellt werden, da der Text sonst eingerahmt erscheint.
Um sicher zu gehen, dass alle Textfelder die gleiche Größe besitzen, kann mit der Strg-Taste eine Kopie von einem beliebigen Objekt erzeugt werden. Halten Sie hierzu die Strg-Taste gedrückt und ziehen Sie das gewünschte Objekt an die entsprechende Stelle im Kartenfenster. Anstatt einer einfachen Verschiebung wird das Objekt jetzt kopiert.
Erstellen Sie nun noch die vier Schaltflächen. Um bei einer Schaltfläche ein Icon zu verwenden, können Sie im Eigenschaftsdialog auf der Registerkarte "Extras" unter der Option "Icon" eine Auswahl treffen.
Haben Sie nun die grafischen Elemente erstellt und richtig angeordnet, wird es Zeit, sich über die Arbeitsweise des Programms Gedanken zu machen. Hierzu folgende Informationen:
Listing 3
on clear_form put empty into cd fld "Vorname" put empty into cd fld "Nachname" put empty into cd fld "Straße" put empty into cd fld "PLZ" put empty into cd fld "Ort" put empty into cd fld "Telefon" put empty into cd fld "Fax" put empty into cd fld "E-Mail" put empty into cd fld "Bemerkung" end clear_form
'empty' ist eine Metacard-Konstante. Die Konstante ist gleichbedeutend mit einen String, der keine Zeichen enthält (""). Ist die Funktion definiert, kann sie aus den entsprechenden Tastenprogrammen aufgerufen werden. Hierzu zunächst der Button "Clear".
Listing 4
on mouseUp clear_form end mouseUp
Die ganze Funktion des Buttons "Clear" besteht aus einem einfachen Aufruf der Prozedur "clear_form". Der Button "Neuer Eintrag" legt mit Hilfe des Befehls 'clone' vorher noch eine Kopie der Karte an (Listing 5).
Listing 5
on mouseUp clone this card clear_form end mouseUp
Jetzt bleiben noch die Tasten "Suchen" und die Pfeil-Taste, die zur nächsten Karte führt.
Die Pfeil-Taste besteht im Wesentlichen nur aus einem simplen Befehlsaufruf:
go to next card
Das Tastenprogramm "Suchen" ist hingegen etwas komplizierter und in Listing 6 abgedruckt:
Listing 6
on mouseUp
ask "Nachname"
put it into nachname
ask "Vorname"
put it into vorname
repeat with i=1 to the number of cards of this stack
go to card i
if cd fld "Nachname" = nachname and cd fld "Vorname" = vorname then
put i into x
exit repeat
end if
end repeat
go to card x
end mouseUp
Mit dem 'ask'-Befehl wird zunächst der Nachname und der Vorname erfragt, nach denen gesucht werden soll. Der zurückgelieferte Wert wird den Variablen 'vorname' bzw. 'nachname' zugewiesen. Die anschließende 'repeat'-Schleife besitzt eine Zählervariable (i) und geht alle Karten im Stapel durch. Mit einer 'if'- Anweisung wird überprüft, ob die Kartenfelder "Nachname" und "Vorname" mit den erfragten Werten übereinstimmen. Ist dies der Fall, wird die Ausführung der Schleife abgebrochen und zur Karte mit dem gefundenen Datensatz gewechselt.
Ich hoffe, dass ich Ihnen mit dieser kleinen Einführung zeigen konnte, wie einfach der Einstieg in die grafische Programmierung ist. Meiner Meinung nach eignet sich Metatalk noch besser als Einsteigersprache als Basic. Der einfache Befehlssyntax und die starke Orientierung an den grafischen Objekten machen es besonders einfach, schnelle Erfolge zu erzielen.
Infos
[1] Die Metacard-Hompage: http://www.metacard.com