26.02.2014 Aufrufe

Linux-Magazin Clean Linux (Vorschau)

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!