Menu
Coddy logo textTech

Null-aware Operatoren

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 27 von 110.

Über ?. und ! hinaus bietet Dart zusätzliche Operatoren, die das Arbeiten mit Nullable-Werten prägnanter machen. Diese Null-aware-Operatoren helfen Ihnen dabei, saubereren Code zu schreiben, wenn Sie mit potenziellen Null-Werten arbeiten.

Der Null-Coalescing-Operator ?? gibt den linken Wert zurück, wenn dieser nicht null ist, andernfalls gibt er den rechten Wert zurück:

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

Der Null-aware Zuweisungsoperator ??= weist nur dann einen Wert zu, wenn die Variable aktuell null ist:

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // Immer noch Anonymous (war nicht null)

Sie können den Null-aware-Zugriffsoperator ?. für verschachtelte Eigenschaften verketten:

String? city = user?.address?.city;  // Sicher, selbst wenn user oder address null ist

Diese Operatoren lassen sich gut kombinieren. Zum Beispiel könnten Sie auf eine Nullable-Eigenschaft zugreifen und einen Standardwert angeben:

String greeting = user?.name ?? 'Stranger';
// Wenn user null ist ODER user.name null ist, verwende 'Stranger'

Die Verwendung dieser Operatoren hält Ihren Code lesbar und gewährleistet gleichzeitig die Null-Sicherheit in Ihrem gesamten Programm.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Gästeregistrierungssystem erstellen, das zeigt, wie Null-Aware-Operatoren Ihren Code sauberer machen können, wenn Sie mit optionalen Informationen arbeiten.

Sie werden Ihren Code in zwei Dateien organisieren:

  • guest.dart: Definieren Sie eine Klasse Guest, die jemanden darstellt, der an einer Veranstaltung teilnimmt. Einige Gäste geben vollständige Details an, während andere nur die Grundlagen nennen. Ihre Klasse sollte Folgendes enthalten:
    • Ein nicht-nullbares String name - jeder Gast muss einen Namen haben
    • Ein nullbares String? email - nicht jeder gibt eine E-Mail-Adresse an
    • Ein nullbares String? dietaryPreference - einige Gäste geben keine Ernährungswünsche an
    • Einen Konstruktor, der name als erforderlichen Parameter entgegennimmt
    • Eine Methode getDisplayEmail(), die die E-Mail zurückgibt, falls verfügbar, oder 'No email provided' unter Verwendung des ??-Operators
    • Eine Methode assignDefaultDiet(), die dietaryPreference nur dann auf 'Standard' setzt, wenn sie aktuell null ist, unter Verwendung des ??=-Operators
    • Eine Methode getEmailDomain(), die die Länge der E-Mail unter Verwendung von ?. zurückgibt, oder null, falls keine E-Mail existiert
    • Eine Methode printBadge(), die die Badge-Informationen des Gastes ausgibt
  • main.dart: Importieren Sie Ihre Guest-Klasse und registrieren Sie drei Gäste mit unterschiedlichem Informationsumfang:
    • Erstellen Sie einen Gast namens 'Alice', setzen Sie ihre E-Mail auf 'alice@company.com' und die Ernährungspräferenz auf 'Vegetarian'
    • Erstellen Sie einen Gast namens 'Bob', setzen Sie nur seine E-Mail auf 'bob@email.org' (lassen Sie die Ernährungspräferenz auf null)
    • Erstellen Sie einen Gast namens 'Charlie' (lassen Sie sowohl E-Mail als auch Ernährungspräferenz auf null)
    • Rufen Sie assignDefaultDiet() für alle drei Gäste auf
    • Rufen Sie für jeden Gast nacheinander printBadge() auf und geben Sie dann Email length: [result] unter Verwendung von getEmailDomain() aus

Die Methode printBadge() sollte in diesem Format drucken:

=== Guest Badge ===
Name: [name]
Email: [getDisplayEmail()]
Diet: [dietaryPreference or "Not specified"]

Beachten Sie, wie Alices Ernährungspräferenz auf 'Vegetarian' bleibt, weil ??= nur zuweist, wenn der Wert null ist, während Bob und Charlie die Standard-Diät 'Standard' zugewiesen bekommen.

Erwartete Ausgabe:

=== Guest Badge ===
Name: Alice
Email: alice@company.com
Diet: Vegetarian
Email length: 17
=== Guest Badge ===
Name: Bob
Email: bob@email.org
Diet: Standard
Email length: 13
=== Guest Badge ===
Name: Charlie
Email: No email provided
Diet: Standard
Email length: null

Spickzettel

Dart bietet Null-aware-Operatoren, um prägnanter mit Nullable-Werten zu arbeiten.

Der Null-Coalescing-Operator ?? gibt den linken Wert zurück, wenn dieser nicht null ist, andernfalls den rechten Wert:

String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName);  // Guest

nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName);  // Alex

Der Null-aware Zuweisungsoperator ??= weist einen Wert nur dann zu, wenn die Variable aktuell null ist:

String? username;
username ??= 'Anonymous';
print(username);  // Anonymous

username ??= 'NewName';
print(username);  // Still Anonymous (wasn't null)

Sie können den Null-aware Zugriffsoperator ?. für verschachtelte Eigenschaften verketten:

String? city = user?.address?.city;  // Sicher, selbst wenn user oder address null ist

Diese Operatoren können miteinander kombiniert werden:

String greeting = user?.name ?? 'Stranger';
// Wenn user null ist ODER user.name null ist, verwende 'Stranger'

Probier es selbst

import 'guest.dart';

void main() {
  // TODO: Erstelle einen Gast namens 'Alice'
  // Setze ihre E-Mail auf 'alice@company.com'
  // Setze ihre Ernährungsvorliebe auf 'Vegetarian'

  // TODO: Erstelle einen Gast namens 'Bob'
  // Setze nur seine E-Mail auf 'bob@email.org'
  // Lasse die Ernährungsvorliebe auf null

  // TODO: Erstelle einen Gast namens 'Charlie'
  // Lasse sowohl E-Mail als auch Ernährungsvorliebe auf null

  // TODO: Rufe assignDefaultDiet() für alle drei Gäste auf

  // TODO: Für jeden Gast in der Reihenfolge (Alice, Bob, Charlie):
  // - Rufe printBadge() auf
  // - Drucke 'Email length: [result]' unter Verwendung von getEmailDomain()
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung