Eingebaute Basistypen von Dart – Übersichtstabelle
| Kategorie | Typbezeichnung | Schreibweise / Literalbeispiel | Kurzbeschreibung |
|---|---|---|---|
| Numbers (Zahlen) | int, double | int a = 10; double b = 3,14; | Zahlen unterteilen sich in Ganzzahlen und Gleitkommazahlen; gemeinsame Oberklasse ist num |
| Strings (Zeichenketten) | String | var str = "foxdevelop.com"; | Speichert UTF-16-Zeichenfolgen, unterstützt String-Interpolation, mehrzeilige Texte und Rohstrings |
| Booleans (Wahrheitswerte) | bool | bool flag = true; | Nur zwei mögliche Werte: true / false |
| Records (Tupel-Datensätze) | Record-Literal (v1, v2) | var record = (10, "test"); | Festlanger zusammengesetzter Typ mit mehreren Werten, unterstützt Destrukturierung |
| Functions (Funktionen) | Function | void fn() {} Function func = ()=>1; | Funktionen sind Objekte erster Klasse: zuweisbar, als Parameter übergebbar, als Rückgabewert nutzbar |
| Lists (Listen / Arrays) | List | var list = [1,2,3]; | Geordnete Sammlung mit doppelten Elementen, entspricht Arrays |
| Sets (Mengen) | Set | var set = {1,2,3}; | Ungeordnete Sammlung ohne doppelte Elemente |
| Maps (Schlüssel-Wert-Abbildungen) | Map | var map = {"name":"Tom"}; | Speicherstruktur für Schlüssel-Wert-Paare, Schlüssel müssen eindeutig sein |
| Runes (Unicode-Codepunkte) | Runes | Runes("\u{1f600}") | Zugriff auf Unicode-Codepunkte auf unterster Ebene; offiziell wird stattdessen das characters-Paket empfohlen |
| Null (Leerwert) | Null | Null n = null; | Einziger Wert ist null; grundlegender Obertyp des Null-Safety-Systems |
Jede Variable in Dart ist im Grunde ein Objekt (eine Instanz einer Klasse). Sie können entweder schnell per Literal erstellt oder über den passenden Konstruktor initialisiert werden.
'hello' ist ein String-Literal, true ein Boolean-Literal; mit dem Konstruktor Map() erstellen Sie eine Map-Instanz.
Spezielle Hilfstypen der Sprache
Sie zählen nicht zu den eingebauten Basistypen, sind aber alle Schlüsselwörter von Dart.
Diese Typen übernehmen spezielle Aufgaben im Typsystem, bei asynchroner Programmierung und statischer Typüberprüfung:
| Typ | Beschreibung der Funktion |
|---|---|
Object | Oberklasse aller Dart-Klassen außer Null |
Enum | Oberklasse aller Enumerationen |
Future / Stream | Speziell für asynchrone Programmierung |
Iterable | Verwendet für for-in-Schleifen und synchrone Generatoren |
Never | Ausdruck, der niemals regulär abschließt (meist für Funktionen, die immer eine Ausnahme werfen) |
dynamic | Deaktiviert statische Typüberprüfung; bevorzugt stattdessen Object / Object? |
void | Kein Rückgabewert, häufig als Rückgabetyp von Funktionen verwendet |
1 Numbers Zahlen
Oberklasse: num
Zahlen unterteilen sich in zwei Unterklassen: int (Ganzzahl) und double (Gleitkommazahl), beide erben von num
1.1 int Ganzzahl
Unterschiedlicher Wertebereich (Dart läuft auch im Frontend, daher gibt es eine Web-Variante):
- Native Plattformen:
-2^63 ~ 2^63 - 1 - Web (basiert auf JS):
-2^53 ~ 2^53 - 1
Kein Dezimalpunkt; unterstützt Dezimal- und Hexadezimalschreibweise mit Präfix 0x
Beispielcode
void main() {
// Dezimal-Ganzzahl
var pageCount = 123;
// Hexadezimalzahl
var hex = 0xDEADBEEF;
// Unterstriche zur Trennung von Ziffern (ab Dart 3.6, bessere Lesbarkeit)
var million = 1_000_000;
var mac = 0x00_14_22_01_23_45;
print(pageCount);
print(hex);
print(million);
print(mac);
}Code-Sprache: Dart (dart)
Ausgabe
123
3735928559
1000000
86469845829
1.2 double Gleitkommazahl mit doppelter Genauigkeit
Enthält Dezimalpunkt oder wissenschaftliche Notation
void main() {
var pi = 3.14; // Dezimalpunkt
var raid = 1.61e5; // 1,61 * 10^5 wissenschaftliche Notation
var tiny = 0.000_000_000_02; // Unterstriche bei Dezimalzahlen
print(pi);
print(raid);
print(tiny);
}Code-Sprache: PHP (php)
3.14
161000.0
2e-11Code-Sprache: CSS (css)
1.3 Oberklasse num
Variablen vom Typ num können sowohl int als auch double speichern:
void main() {
num money = 5;
money += 2.5; // Automatische Umwandlung zu double, money = 7,5
// Zuweisung int an double wandelt automatisch zu 1,0 um
double zoom = 1;
print(money);
print(zoom);
}Code-Sprache: PHP (php)
Ausgabe
7.5
1.0Code-Sprache: CSS (css)
1.4 Typumwandlung zwischen Zahlen
void main() {
// String → int
var one = int.parse('123');
// String → double
var pi = double.parse('3.14');
// int / double → String
String intStr = 99.toString();
String pi2 = 3.14159.toStringAsFixed(2); // Auf 2 Nachkommastellen gerundet → "3.14"
print(one);
print(pi);
print(pi2);
}Code-Sprache: JavaScript (javascript)
Ausgabe
123
3.14
3.14Code-Sprache: CSS (css)
1.5 Spezielle Bitoperatoren für int
Nur int unterstützt Bitverschiebung, bitweises UND/ODER/XOR sowie Bitnegation. Mehr Infos: Dart Bitwise and shift operators – FoxDevelop
void main() {
print(3 << 1); // Linksverschiebung 0011 <<1 → 0110
print(3 | 4); // Bitweises ODER
print(3 & 4); // Bitweises UND
print(~3); // Bitnegation
}Code-Sprache: PHP (php)
6
7
0
-4
1.6 Zahlenkonstanten (Compile-Time Constant)
Pure Zahlenliterale und Rechenoperationen mit Konstanten können mit const markiert werden
Werte, die bereits in der Kompilierungsphase (noch vor Programmstart) fest berechnet werden und zur Laufzeit unveränderlich sind, heißen Kompilierzeitkonstanten und werden mit const deklariert.
const msPerSec = 1000;
const waitSec = 5;
const waitMs = waitSec * msPerSec; // KompilierzeitkonstanteCode-Sprache: JavaScript (javascript)
const: Kompilierzeitkonstante – der Compiler berechnet den Ausdruck bereits vor Programmausführung und schreibt den festen Wert direkt in die kompilierte Binärdatei; zur Laufzeit wird nur gelesen, keine Berechnung mehr nötig.
final: Laufzeitkonstante – der Wert wird erst beim Ausführen zugewiesen, danach kann er nicht mehr verändert werden.
1.7 Eingebaute mathematische Methoden
Direkt über num verfügbar; komplexere Berechnungen nutzen das Paket dart:math
abs(), ceil(), floor(), round() usw.
num n = -3.6;
print(n.abs()); // 3.6
print(n.ceil()); // -3
print(n.floor()); // -4Code-Sprache: PHP (php)
2. String Zeichenkette
UTF-16-codierte Zeichenfolge zur Darstellung von Text; zwei Schreibweisen: einfache oder doppelte Anführungszeichen.
2.1 Definition: Einfache / doppelte Anführungszeichen
var s1 = 'Zeichenkette mit einfachen Anführungszeichen';
var s2 = "Zeichenkette mit doppelten Anführungszeichen";
// Escape-Zeichen
var s3 = 'It\'s ok';
var s4 = "It's ok"; // Wechselnde Anführungszeichen brauchen kein Escape
Code-Sprache: JavaScript (javascript)
Einige Zeichen in Strings haben eine spezielle Bedeutung (z. B. doppeltes Anführungszeichen ", Zeilenumbruch, Backslash \). Wird sie direkt geschrieben, zerstört sie die String-Struktur und führt zu Compilerfehlern.
Das Escape-Zeichen \ hebt die Sonderfunktion von Zeichen auf oder gibt nicht sichtbare Steuerzeichen aus.
Beispiel: Tasten wie Enter oder Tab sind nicht sichtbar und benötigen Escape-Sequenzen wie \t. Testen Sie folgenden Code zur Verdeutlichung:
print("name\tage\tcountry");
print("Jack\t18\tUSA");
print("Lucy\t20\tEgypt");Code-Sprache: PHP (php)
2.2 String-Interpolation ${Ausdruck}
- Bei einfachen Variablen können die geschweiften Klammern weggelassen werden:
$Variable - Objekte rufen automatisch die Methode
.toString()auf
void main() {
var word = "interpolation";
var str1 = "Dart hat $word";
var str2 = "Großbuchstaben: ${word.toUpperCase()}";
print(str2); // Großbuchstaben: INTERPOLATION
}Code-Sprache: JavaScript (javascript)
2.3 String-Verkettung
- Benachbarte Literale werden automatisch verkettet (auch über Zeilenumbruch)
- Verkettung mit dem Operator
+
var s1 = "Erste Zeile"
"Zweite Zeile";
var s2 = "a" + "b";
assert(s1 == "Erste ZeileZweite Zeile");
assert(s2 == "ab");Code-Sprache: JavaScript (javascript)
2.4 Mehrzeilige Strings: Dreifache Anführungszeichen “‘ / „““
void main() {
var multi1 = '''
Mehrzeiliger
Text
''';
var multi2 = """
Mehrzeiliger Text mit doppelten Dreifachzeichen
hello foxdevelop.com
""";
print(multi1);
print(multi2);
}Code-Sprache: PHP (php)
Mehrzeiliger
Text
Mehrzeiliger Text mit doppelten Dreifachzeichen
hello foxdevelop.comCode-Sprache: CSS (css)
Einfache Anführungszeichen innerhalb von dreifachen einfachen Anführungszeichen und umgekehrt brauchen kein Escape-Zeichen:
2.5 Rohstrings r““ – keine Auswertung von Escape-Sequenzen
var raw = r"Der Zeilenumbruch \n wird nicht interpretiert";
print(raw); // Gibt \n unverändert aus
Code-Sprache: PHP (php)
2.6 Einschränkungen bei const-String-Konstanten
Interpolierte Inhalte müssen Kompilierzeitkonstanten sein (Zahlen, bool, konstante Strings); normale Variablen oder Collections sind unzulässig.
const num cNum = 10;
const bool cBool = true;
const String cStr = "const";
// Gültiger konstanter String
const valid = "$cNum $cBool $cStr";
var normalNum = 10;
// Ungültig: Interpolation enthält keine Konstante
// const invalid = "$normalNum";
Code-Sprache: JavaScript (javascript)
3. bool Wahrheitstyp
Nur zwei Instanzen: true / false, beide sind Kompilierzeitkonstanten
Dart folgt strenger statischer Typisierung: Wahrheitswerte lassen sich nicht implizit aus anderen Typen ableiten, explizite Vergleiche sind erforderlich.
void main() {
var emptyStr = "";
print(emptyStr.isEmpty); // Leerstring prüfen
var zero = 0;
print(zero == 0); // Null prüfen
var nil = null;
print(nil == null); // Nullwert prüfen
var nan = 0 / 0;
print(nan.isNaN); // Nicht-Zahl prüfen
}Code-Sprache: PHP (php)
4. Runes & characters – Verarbeitung von Unicode-Zeichen
- Runes: Zugriff auf die unterliegenden Unicode-Codepunkte, veraltete Lösung
- Empfohlen:
package:characterszur Verarbeitung visuell vollständiger Zeichen (Grapheme-Cluster, z. B. Flaggen-Emojis)
Unicode-Escape-Syntax
- 4-stellige Hexadezimal:
\uXXXX - Große Codepunkte mit mehr als 4 Ziffern:
\u{Hexwert}
var heart = "\u2665"; // ♥
var laugh = "\u{1f606}"; // 😆
Code-Sprache: JavaScript (javascript)
Beispiel mit dem characters-Paket
import 'package:characters/characters.dart';
void main() {
var text = "Hi 🇩🇰";
print(text.characters.last); // Gibt das vollständige Dänemark-Flaggen-Emoji aus
}
Code-Sprache: JavaScript (javascript)
5. Symbol Symboltyp
Eingesetzt für Reflexion und Code-Verschleierung, Literal-Syntax #Bezeichner, Kompilierzeitkonstante
Verschleierung verändert Symbole nicht; geeignet für dynamische Referenzierung von Bezeichnern über ihren Namen.
#userName
#getData
Code-Sprache: CSS (css)
6. Null Leerwerttyp
Einziger gültiger Wert ist null. Im Null-Safety-System ist Null ein eigenständiger oberster Typ, alle nullable Typen sind kompatibel mit null.
String? name = null;
Null n = null;
Code-Sprache: JavaScript (javascript)