Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Online Artikel  »  Vala im Detail  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Konstruieren und erzeugen

Das Instanziieren von Klassen und Schreiben von Konstruktoren weicht etwas von dem ab, was Sie vielleicht von anderen Sprachen kennen. Ein Konstruktor in Vala-Schreibweise erfordert etwas Umdenken:

construct {
    field1 = "string";
    field2 = 1;
}

Natürlich ist es erforderlich, vorher "field1" und "field2" entsprechend mit "private string field1" und "private int field2" zu deklarieren. Die Syntax der Konstruktoren, die Sie zum Beispiel aus Java kennen, entsprecht in Vala den "Creation"-Methoden. Diese sind von der Syntax gleich (Listing 4), bis auf eine kleine Ausnahme.

Listing 4: Konstruktor und "Creation"-Methoden

using GLib;

class Klasse : Object {

    public int prop1 { get; set; }
    public string prop2 { get; set; }

    private int field;
    private Object obj;

    public Klasse(construct int prop1) {}
    public Klasse.with_string(int prop1, construct string prop2) {}

    construct {
        field = 42;
        obj = new Object();
    }

    public void println() {
        stdout.printf("prop1: %d\tprop2: %s\t", prop1, prop2);
        stdout.printf("field: " + field + "\n");
    }

    public static void main(string[] args) {
        Klasse kl1 = new Klasse(1);
        kl1.println(); // prop1: 1    prop2:(null)   field: 42
        Klasse kl2 = new Klasse.with_string(1, "Vala");
        kl2.println(); // prop1: 0    prop2: Vala    field: 42
    }
}

Wie weiter oben erwähnt, dient "construct" als der eigentliche Konstruktor. In "Klasse(construct int prop1)" und "Klasse.with_string(construct int prop2, construct string prop2)" initialisiert der Compiler die Properties der Klasse. Es darf auch kein anderer Code als solcher, der sich auf eine Property bezieht dort vorkommen. Wertezuweisungen an Felder sind genauso wenig erlaubt wie "print"-Anweisungen oder der Aufruf von Methoden. Der Compiler quittiert das mit einer sofortigen Fehlermeldung beim Übersetzen. Ein Wort sei noch zu dem Schlüsselwort "construct", das bei den Parametern vorkommt, gesagt: Es bedeutet, dass der Compiler die Property mit dem angegeben Wert bei der Instantiierung setzt. Bei "Klasse.with_string(...)" initialisiert der Compiler den ersten Parameter nicht.

Ein kurzes Wort sei auch noch zur Initialisierungsreihenfolge gesagt:

  • Initialisierung der Properties (Aufruf der "Creation"-Methoden)
  • Initialisierung der Felder (Aufruf von "construct")

Es gibt noch weitere Typen von Properties, die "GObject" kennt:

  • "construct-only": Vala initialisiert die Property einmalig bei der Instantiierung. Eine weitere Zuweisung führt zu einer Fehlermeldung. Derzeit erzeugt der Compiler leider noch fehlerhaften Code, so dass dies noch nicht richtig funktioniert.
  • "read-only": Auch hier setzt der Compiler die Property nur einmal. Im Unterschied zur "construct-only"-Property passiert das erst im Konstruktor und nicht in der "Creation"-Methode.


			Wie bei jedem jungen Projekt ist auch das Vala-Team auf Rückmeldungen über den Bugtracker angewiesen.

Wie bei jedem jungen Projekt ist auch das Vala-Team auf Rückmeldungen über den Bugtracker angewiesen.

Da der Initialisierungsprozess selbst laut Vala-Autor recht komplex ist, finden Sie unter http://live.gnome.org/Vala/PropertiesSample einen Quelltext, der die einzelnen Schritte der Initialisierung ausgibt und so mehr Licht ins Dunkel bringt. Experimentieren schadet nichts, und falls Sie Bugs im Compiler finden, freut sich Vala-Autor Billeter über Fehlermeldungen. Lassen Sie sich nicht von den Ausrufezeichen, die sich an die Typen anschließen abschrecken: Noch ist der notwendige Teil im Compiler nicht vorhanden. Später warnt Sie Vala davor, falls ein Rückgabewert oder Parameter "null" ist. Das Stichwort lautet "non-null"-Typen. Momentan forschen viele Entwickler noch daran, im Internet gibt es jedoch Forschungsberichte dazu.

Signale

Bei GUI-Programmen sind Signale und Signal-Handler nicht mehr wegzudenken. Der Grund ist einfach: Anwendungen müssen auf die Benutzereingaben, zum Beispiel Tastatur- oder Mauseingaben reagieren. Bereits "GObject" enthält das Signal "notify". Die Wiki-Seite demonstriert die Methode anhand eines Beispiels: Beim Setzen einer Property erfolgt die Signalisierung. Die dort verwendete Syntax mag etwas eigentümlich erscheinen. Es handelt sich in der "run"-Methode jedoch um einen Lambda-Ausdruck, in welchem das Parameterpaar "(s, p)" auf die Ausgabe abgebildet wird. Die ausführliche Syntax ohne Lambda-Ausdruck sehen Sie im folgenden Listing 5:

Listing 5: Signale und Signal-Handler

...
public static void notify_handler(Object obj, ParamSpec spec) {
    stdout.printf("property %s has changed\n", spec.name);
 }

    ...

    construct {
        notify += notify_handler;
    }
    ...

Manchmal ist es bequemer und oft auch kürzer anonyme (Lambda-) Funktionen zu verwenden. Was sich in beiden Beispielen jedoch nicht geändert hat, ist der aus C# bekannte Operator "+=". Sie binden damit einen Signal-Handler, hier "notify_handler" an das Signal "notify".

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (2)
von
Matthias,
03.05.2010 20:08
Vala lernen
Hallo zusammen,

Ich würde mir weitere Beiträge zu Vala wünschen. Es gibt einfach zu wenige Howtos und Beiträge zu Vala. Vala findet noch nicht die Beachtung die es verdient.

mfg Matthias
von
carina,
18.02.2010 11:06
hallo
ich will diese sprache endlich lernen bloß ich check es einfach kein bischen und ich wünsche mir wenn ihr mir hilft.

In Liebe Grüße Carina