Strichfassung
Eine einzelne Funktionsdefinition wie beispielsweise
int quadrat(int zahl) { return zahl*zahl; }
darf der Dart-Anwender mit »=>«
abkürzen:
int quadrat(int zahl) => zahl*zahl;
»=> e«
steht dabei für »{ return e; }«
. In Dart darf man zudem eine Funktion an eine andere übergeben, was besonders in »for«
-Schleifen nützlich ist.
Die Funktion »sagHallo()«
in Listing 3 setzt den ihr übergebenen String hinter »Hallo«
und gibt das Ergebnis auf dem Bildschirm aus. Anschließend erstellt die zweite Zeile eine Liste mit drei Namen, die »forEach«
nacheinander in die ihr übergebene Funktion schiebt – in diesem Fall also »sagHallo()«
. Der Dreizeiler gibt folglich »Hallo Tim«
, »Hallo Klaus«
und »Hallo Hans«
aus. Da »sagHallo()«
nur in »namen.forEach()«
auftaucht, kann man die Funktion auch direkt dort deklarieren und dabei gleich noch auf ihren Namen verzichten, wie Listing 4 zeigt.
Listing 4
Funktion übergeben (II)
01 List namen = ["Tim", "Klaus", "Hans"];
02 namen.forEach( (String name) => print("Hallo ${name}") );
Listing 3
Funktion übergeben (I)
01 sagHallo(String name) => print("Hallo ${name}");
02 List namen = ["Tim", "Klaus", "Hans"];
03 namen.forEach(sagHallo);
Das ist zwar sehr kompakt, bei komplexeren Funktionen geht allerdings schnell die Übersicht flöten. Zur Steuerung des Kontrollflusses stehen ansonsten die üblichen Verdächtigen »for«
, »if«
, »switch«
und »while«
bereit, die genau wie ihre Pendants in Java beziehungsweise Javascript funktionieren. Zudem lassen sich wie in Java über Exceptions elegant Fehler abfangen.
Klassisches
Von Java hat Dart auch die Interfaces geerbt. Implementiert eine Klasse ein Interface, sichert sie zu, die im Interface vorgegeben Funktionen anzubieten. Ein Beispiel samt Vererbung zeigt Listing 5. Eine Klasse kann mehrere Interfaces implementieren, aber immer nur von genau einer Klasse erben (sie also via »extends«
erweitern).
Listing 5
interfaces und extend
01 interface Flaeche {
02 int flaechenInhalt();
03 }
04
05 class Quadrat implements Flaeche {
06 int breite;
07 Quadrat(int this.breite);
08 int flaechenInhalt() => breite*breite;
09 }
10
11 class Rechteck extends Quadrat {
12 int _hoehe;
13 Rechteck(int this._hoehe, int br) : super(br);
14 int flaechenInhalt() => breite * _hoehe;
15 }
16
17 main() {
18 Quadrat q = new Quadrat(3);
19 Rechteck r = new Rechteck(2,3);
20 print(q.flaechenInhalt());
21 print(r.flaechenInhalt());
22 }
In Listing 5 sind alle Variablen und Funktionen öffentlich zugänglich – mit einer Ausnahme: »_hoehe«
. Beginnt der Name einer Variablen oder einer Funktion mit einem Unterstrich, gilt sie als privat. Nur aus der Klasse selbst kann der Programmierer dann noch darauf zugreifen. Im Beispiel führt das dazu, dass sich die Höhe eines Rechtecks nachträglich nicht mehr verändern lässt.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 5 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





