In der Welt der Programmierung begegnen wir oft dem Begriff “primitive Datentypen”, der Bilder von simplen, unteilbaren Dateneinheiten in unseren Köpfen malt. Dart, die Sprache hinter dem beliebten Flutter-Framework, fordert jedoch unser traditionelles Verständnis mit einem interessanten Ansatz heraus. In Dart gibt es keine “primitiven” Datentypen im herkömmlichen Sinne – stattdessen arbeiten wir mit Objekten und Interfaces. Lass mich das erklären und dir zeigen, wie Dart diese Konzepte handhabt.
Datentypen in Dart
Null: Beginnen wir mit einem Typ, der oft übersehen wird – Null
. Anders als in vielen anderen Sprachen ist Null
in Dart ein eigenständiger Typ, der das Fehlen eines Wertes repräsentiert. Es ist wichtig zu verstehen, dass null
nicht gleich “nichts” ist, sondern ein gültiger Zustand, der bewusst gehandhabt werden muss.
Int: Der int
Typ ist wohl einer der ersten Datentypen, denen du begegnest. Er repräsentiert ganze Zahlen. Einfach ausgedrückt: Wenn du zählen kannst, kannst du int
verwenden. Zum Beispiel: int age = 25;
sagt klar aus, dass das Alter 25 Jahre beträgt.
Double: Jetzt wird es ein bisschen genauer. Double
steht für Fließkommazahlen und kommt ins Spiel, wenn du mit Bruchzahlen arbeitest. Preisangaben sind ein klassisches Beispiel: double price = 3.99;
.
Num: Num
ist ein Überbegriff für numerische Typen in Dart und kann sowohl int
als auch double
Werte aufnehmen. Das macht num
extrem flexibel für Berechnungen, bei denen du den spezifischen Typ nicht im Voraus kennst.
Bool: Bool
ist der Typ für Wahrheitswerte in Dart. Er nimmt zwei Werte an: true
oder false
. Perfekt, um Ja-Nein-Entscheidungen in deinem Code zu treffen.
String: Text in Dart wird mit dem String
Typ dargestellt. Alles, was du aussprechen oder schreiben kannst, kann ein String
sein, wie zum Beispiel: String welcomeMessage = "Hallo Dart!";
.
Function: Vielleicht überraschend, aber in Dart ist auch eine Funktion ein Objekt vom Typ Function
. Das ermöglicht es, Funktionen als Variablen zu übergeben oder sie als Rückgabewerte zu nutzen.
Verständnistabelle
Datentyp | Beschreibung | Beispiel |
---|---|---|
Null | Repräsentiert das Fehlen eines Wertes | int? lineCount = null; |
Int | Ganze Zahlen | int age = 25; |
Double | Fließkommazahlen | double price = 3.99; |
Num | Überbegriff für numerische Typen | num x = 42; |
Bool | Wahrheitswerte | bool isTrue = false; |
String | Text | String name = "Dart"; |
Function | Funktionen als Objekte | Function myFunc = () => print("Hallo Dart!"); |
Erweiterte Datentypen in Dart
Records: Neu in Dart (und möglicherweise in zukünftigen Updates stärker vertreten), ermöglichen Records, ähnlich wie Tuples in anderen Sprachen, die Gruppierung verschiedener Werte in einer einzigen Einheit. Sie sind perfekt, um eine kompakte, aber aussagekräftige Datenstruktur zu schaffen, ohne eine Klasse definieren zu müssen.
Lists: List
in Dart entspricht dem Array-Konzept aus anderen Sprachen. Listen sind geordnete Sammlungen von Objekten. Du kannst List<int> ages = [25, 30, 35];
verwenden, um eine Liste von Ganzzahlen zu definieren. Listen sind dynamisch, was bedeutet, dass ihre Größe zur Laufzeit geändert werden kann.
Sets: Ein Set
in Dart ist eine Sammlung einzigartiger Objekte. Im Gegensatz zu Listen, wo Duplikate erlaubt sind, enthält ein Set jeden Wert nur einmal. Das macht Sets ideal, um sicherzustellen, dass eine Sammlung keine doppelten Werte enthält, z.B. Set<String> names = {'Max', 'Anna'};
.
Maps: Map
ist Darts Antwort auf Schlüssel-Wert-Paare. Jeder Schlüssel in einer Map ist einzigartig und verweist auf genau einen Wert. Maps sind unverzichtbar, wenn es darum geht, Datenstrukturen zu organisieren, die eine einfache Zuordnung erfordern, wie z.B. Map<String, int> phoneBook = {'Max': 123456, 'Anna': 654321};
.
Runes: Runes repräsentieren Unicode-Zeichen in Dart. Da Dart Strings als Sequenz von UTF-16 Code-Einheiten behandelt, werden Runes verwendet, um Unicode-Zeichen außerhalb des BMP (Basic Multilingual Plane) darzustellen. Für alltägliche Anwendungen kannst du jedoch oft direkt mit dem characters
API arbeiten.
Symbols: Symbol
wird in Dart verwendet, um einen Operator oder Bezeichner zu repräsentieren, der während der Laufzeit nicht verändert wird. Obwohl sie in der alltäglichen Dart-Programmierung selten verwendet werden, sind Symbole nützlich für APIs, die auf Reflexion basieren.
Mehr Informationen findest du in der Dart-Dokumentation.
FAQ
F: Wie wähle ich zwischen List und Set?
A: Entscheide dich für eine List, wenn die Reihenfolge der Elemente wichtig ist und Duplikate erlaubt sind. Wähle ein Set, wenn jedes Element einzigartig sein muss.
F: Kann ich die Typen von Elementen in einer Map mischen?
A: Ja, Dart erlaubt es dir, unterschiedliche Typen von Schlüsseln und Werten in einer Map zu haben, aber für die beste Praxis und Typsicherheit solltest du konsistente Typen verwenden.
F: Was sind die Vorteile von Runes in Dart?
A: Runes ermöglichen es dir, Unicode-Zeichen präzise zu handhaben, insbesondere solche, die nicht im Standard-Unicode-Bereich liegen. Dies ist besonders wichtig für die Darstellung von Emojis oder speziellen Symbolen.
F: Muss ich immer den genauen Datentyp in Dart definieren?
A: Dart ist intelligent genug, um Typen automatisch zu inferieren, aber eine explizite Definition hilft, deinen Code klar und verständlich zu machen.
F: Kann ich Typen in Dart konvertieren?
A: Ja, Dart bietet Konvertierungsmethoden, wie z.B. .toString()
, um einen int
in einen String
zu verwandeln, oder int.parse()
, um einen String
in einen int
zu konvertieren.
F: Wie gehe ich mit null
in Dart um?
A: Dart unterstützt Null-Sicherheit, was bedeutet, dass du Variablen als null
kennzeichnen musst, wenn sie keinen Wert enthalten dürfen. Das wird mit einem Fragezeichen (?) nach dem Typ angegeben, z.B. int? age;
.
Bildquelle:
Wendy van Zyl | /www.pexels.com/@wendy-van-zyl-312082
- Daniel