Menu
CoddyTech

Operator Penanganan Null

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 27 dari 110.

Selain ?. dan !, Dart menyediakan operator tambahan yang membuat penggunaan nilai nullable lebih ringkas. Operator null-aware ini membantumu menulis kode yang lebih rapi saat menangani nilai yang berpotensi null.

Operator null-coalescing ?? mengembalikan nilai di sebelah kiri jika nilainya bukan null. Jika tidak, operator ini mengembalikan nilai di sebelah kanan:

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

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

Operator penugasan yang memperhatikan null ??= menetapkan nilai hanya jika variabel saat ini bernilai null:

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

username ??= 'NewName';
print(username);  // Masih Anonymous (nilainya bukan null)

Kamu dapat merangkai operator akses yang memperhatikan null ?. untuk property bertingkat:

String? city = user?.address?.city;  // Tetap aman meskipun user atau address bernilai null

Operator-operator ini dapat digunakan bersama dengan baik. Misalnya, kamu dapat mengakses property nullable dan memberikan nilai default:

String greeting = user?.name ?? 'Stranger';
// Jika user bernilai null ATAU user.name bernilai null, gunakan 'Stranger'

Menggunakan operator ini membuat kodemu tetap mudah dibaca sekaligus menjaga keamanan terhadap nilai null di seluruh programmu.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pendaftaran tamu yang menunjukkan cara operator null-aware dapat membuat kodemu lebih rapi saat menangani informasi opsional.

Kamu akan membagi kodemu ke dalam dua file:

  • guest.dart: Definisikan class Guest yang mewakili seseorang yang menghadiri acara. Sebagian tamu memberikan detail lengkap, sedangkan yang lain hanya memberikan informasi dasar. Class-mu harus memiliki:
    • String name yang tidak boleh null, setiap tamu harus memiliki nama
    • String? email yang boleh null, tidak semua orang memberikan email
    • String? dietaryPreference yang boleh null, sebagian tamu tidak menyebutkan kebutuhan makanannya
    • Constructor yang menggunakan name sebagai parameter wajib
    • Method getDisplayEmail() yang mengembalikan email jika tersedia, atau 'No email provided' menggunakan operator ??
    • Method assignDefaultDiet() yang menetapkan dietaryPreference ke 'Standard' hanya jika nilainya saat ini null, menggunakan operator ??=
    • Method getEmailDomain() yang mengembalikan panjang email menggunakan ?., atau null jika email tidak ada
    • Method printBadge() yang mencetak informasi lencana tamu
  • main.dart: Impor class tamumu dan daftarkan tiga tamu dengan tingkat informasi yang berbeda:
    • Buat tamu bernama 'Alice', tetapkan emailnya ke 'alice@company.com' dan preferensi makanannya ke 'Vegetarian'
    • Buat tamu bernama 'Bob', tetapkan hanya emailnya ke 'bob@email.org' (biarkan preferensi makanannya bernilai null)
    • Buat tamu bernama 'Charlie' (biarkan email dan preferensi makanannya bernilai null)
    • Panggil assignDefaultDiet() pada ketiga tamu
    • Untuk setiap tamu secara berurutan, panggil printBadge(), lalu cetak Email length: [result] menggunakan getEmailDomain()

Method printBadge() harus mencetak dalam format ini:

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

Perhatikan bahwa preferensi makanan Alice tetap 'Vegetarian' karena ??= hanya menetapkan nilai jika nilainya null, sedangkan Bob dan Charlie mendapatkan diet default 'Standard'.

Output yang diharapkan:

=== 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

Coba sendiri

import 'guest.dart';

void main() {
  // TODO: Buat tamu bernama 'Alice'
  // Atur emailnya menjadi 'alice@company.com'
  // Atur preferensi makanannya menjadi 'Vegetarian'

  // TODO: Buat tamu bernama 'Bob'
  // Atur hanya emailnya menjadi 'bob@email.org'
  // Biarkan preferensi makanannya bernilai null

  // TODO: Buat tamu bernama 'Charlie'
  // Biarkan email dan preferensi makanannya bernilai null

  // TODO: Panggil assignDefaultDiet() untuk ketiga tamu

  // TODO: Untuk setiap tamu secara berurutan (Alice, Bob, Charlie):
  // - Panggil printBadge()
  // - Cetak 'Email length: [result]' menggunakan getEmailDomain()
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online