Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
mit einer garantierten Größe. So repräsentiert<br />
»int32« immer eine 32-Bit-Zahl.<br />
Soll Vala den Typ einer Variablen selbst<br />
ermitteln (Typinferenz), deklariert man<br />
sie als »var«:<br />
ein Array vor, kann<br />
der Entwickler die besonders<br />
lesefreundliche<br />
»foreach«-Schleife<br />
nutzen. So gibt<br />
Vala 09/2013<br />
Programmieren<br />
var zahl = 1;<br />
Strings nutzen immer die UTF-8-Zeichenkodierung<br />
und sind unveränderbar. Der<br />
nützliche »in«-Operator ergibt einen wahren<br />
Ausdruck, wenn eine Zeichenkette in<br />
einer anderen enthalten ist:<br />
if ("rote" in "Das rote Auto") { [...]<br />
Um berechnete Werte in einen String einzusetzen,<br />
muss der Programmierer wie<br />
in Abbildung 3 nur die Variable hineinschreiben,<br />
ihr ein »$« voranstellen und<br />
vor dem String ein »@« notieren. Das<br />
»$« zeigt Vala an, dass es einen Ausdruck<br />
auswerten soll. In der Abbildung ersetzt<br />
es folglich nicht nur »$a« und »$b« durch<br />
die Variableninhalte, sondern rechnet<br />
auch »a+b« aus.<br />
Eckig geklammert<br />
Mittels eckiger Klammern und Positionsangaben<br />
greift der Programmierer auf<br />
Substrings zu, in Abbildung 3 enthält<br />
»ergebnis« damit die Zeichen »42«. Auf<br />
diese Weise lassen sich auch Arrays teilen,<br />
die man in Vala explizit mit »new«<br />
anlegen muss. In Listing 2 entsteht ein<br />
Array mit drei Elementen, Zeile 2 erstellt<br />
ein zweidimensionales Array mit drei mal<br />
vier Elementen, Zeile 5 weist dem Array<br />
»e« seine Werte direkt zu. Liegt in Vala<br />
foreach(string z in U<br />
zahlen) {print(z);}<br />
alle Elemente des Array<br />
»zahlen« aus:<br />
Mit Methode<br />
Funktionen heißen in Vala Methoden,<br />
es sind C-Funktionen. Sie können daher<br />
immer nur einen einzigen Wert zurückliefern.<br />
Ihre Argumente darf der Programmierer<br />
mit Standardwerten vorbelegen,<br />
zum Beispiel:<br />
int addiere(int x, int y = 1) { [...] }<br />
Abbildung 1: Alltagstauglich: Die Bilderverwaltungsoftware Shotwell ist in Vala programmiert.<br />
Abbildung 2: Der Vala-Compiler »valac« ruft automatisch den C-Compiler<br />
auf, der nicht nur das fertige Programm erstellt, sondern auch für die<br />
Warnmeldung verantwortlich ist.<br />
Hinter der Bezeichnung Delegates verbergen<br />
sich spezielle Methoden, die sich in<br />
Variablen speichern oder an andere Methoden<br />
übergeben lassen. Listing 3 zeigt<br />
dazu ein Beispiel: In Zeile 3 legt zunächst<br />
das Schlüsselwort »delegate« einen neuen<br />
Datentyp namens »RechneTyp« an. Dieser<br />
repräsentiert ab sofort eine Methode,<br />
die einen Integerwert entgegennimmt<br />
und auch einen solchen zurückliefert.<br />
Anschließend kann der Programmierer<br />
eine Variable dieses Typs anlegen (»RechneTyp<br />
a;«). In ihr lässt sich eine Funktion<br />
speichern, die exakt der Signatur von<br />
»RechneTyp« entspricht.<br />
In Listing 3 trifft das auf die Methode<br />
»addiere()« zu. Die in der Variablen gespeicherte<br />
Funktion (»a = addiere;«)<br />
lässt sich dann aufrufen: »a(5)«. Ebenfalls<br />
in diesem Listing zeigt die Funktion<br />
»machwas()« schließlich noch, wie man<br />
einer Methode eine Kollegin übergibt.<br />
Wer »addiere()« nur an einer einzigen<br />
Stelle benötigt, kann sogar auf ihren Namen<br />
verzichten und ihren Rumpf direkt<br />
einer Variablen zuweisen:<br />
RechneTyp a = (x) => {return x+x;};<br />
int b = a(3);<br />
Hier speichert die Variable »a« eine namenlose<br />
Methode, die ein Argument »x«<br />
besitzt und mit diesem »x+x« berechnet.<br />
Vala bezeichnet solche Funktionen als<br />
anonyme Methoden, andere Sprachen<br />
Listing 2: Arrays<br />
01 int[] c = new int[3];<br />
02 int[,] d = new int[3,4];<br />
03 c[1] = 99;<br />
04 d[1,3] = 88;<br />
05 int[] e = {1,2,3};<br />
Listing 3: Delegates<br />
01 int addiere(int x) { return x+x; }<br />
02 <br />
03 delegate int RechneTyp(int x);<br />
04 <br />
05 int machwas(RechneTyp r, int zahl) {<br />
06 return r(zahl); // Aufruf des Delegate<br />
07 }<br />
08 <br />
09 int main() {<br />
10 <br />
11 // Aufruf über Variable:<br />
12 RechneTyp a;<br />
13 a = addiere;<br />
14 int ergebnis = a(5);<br />
15 <br />
16 // Direkter Aufruf der Methode:<br />
17 int ergebnis2 = machwas(addiere, 2);<br />
18 <br />
19 return 0;<br />
20 }<br />
www.linux-magazin.de<br />
93