Menu
CoddyTech

Bisa Null vs Tidak Bisa Null

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

Sekarang setelah kamu memahami mengapa keamanan null itu penting, mari kita lihat cara mendeklarasikan variabel yang bisa menampung null. Di Dart, kamu membuat tipe menjadi nullable dengan menambahkan ? setelah nama tipe.

String name = 'Alice';   // Tidak boleh null, harus selalu memiliki nilai
String? nickname;        // Boleh null, bisa bernilai null atau String

print(name);      // Alice
print(nickname);  // null

Perbedaan utamanya adalah tipe non-nullable menjamin adanya nilai, sedangkan tipe nullable secara eksplisit mengizinkan nilai tidak ada. Perbedaan ini berlaku untuk semua tipe:

int count = 10;       // Harus memiliki nilai
int? optionalCount;   // Bisa bernilai null

List<String> items = [];      // Harus berupa list (boleh kosong)
List<String>? maybeItems;     // Bisa bernilai null (tidak ada list sama sekali)

Perhatikan bahwa list kosong [] berbeda dari null. List kosong tetap ada, tetapi tidak berisi apa pun; null berarti tidak ada list sama sekali.

Compiler menerapkan aturan ini dengan ketat. Kamu tidak dapat menetapkan null ke variabel yang tidak dapat bernilai null, dan kamu tidak dapat menggunakan variabel nullable saat yang diharapkan adalah variabel yang tidak dapat bernilai null tanpa memeriksa null terlebih dahulu:

String? maybeName = 'Bob';
// String definite = maybeName;  // Error! Tidak bisa menetapkan nilai nullable ke variabel non-nullable

Di pelajaran berikutnya, kamu akan mempelajari operator yang disediakan Dart untuk bekerja dengan aman menggunakan nilai yang bisa bernilai null.

challenge icon

Tantangan

Mudah

Mari buat sistem daftar tontonan film yang menunjukkan perbedaan antara informasi wajib dan informasi opsional menggunakan tipe nullable dan non-nullable.

Kamu akan membuat dua file untuk mengatur kodemu:

  • movie.dart: Definisikan class Movie yang merepresentasikan film dalam daftar tontonanmu. Setiap film harus memiliki judul dan tahun rilis (keduanya selalu wajib), tetapi beberapa detail tambahan mungkin tidak tersedia untuk setiap film. Class-mu harus memiliki:
    • String title non-nullable, setiap film harus memiliki judul
    • int year non-nullable, setiap film harus memiliki tahun rilis
    • String? director nullable, sutradaranya mungkin tidak diketahui
    • double? rating nullable, belum semua film memiliki rating
    • Constructor yang menerima title dan year sebagai parameter wajib
    • Method displayInfo() yang mencetak informasi film, menampilkan Unknown jika sutradara tidak diketahui dan Not rated jika rating belum tersedia
  • main.dart: Impor class film dan buat daftar tontonan kecil yang menunjukkan data film lengkap dan tidak lengkap:
    • Buat film dengan judul 'Inception' dan tahun 2010, lalu atur sutradaranya menjadi 'Christopher Nolan' dan rating-nya menjadi 8.8
    • Buat film dengan judul 'The Matrix' dan tahun 1999, lalu atur rating-nya saja menjadi 8.7 (biarkan sutradaranya bernilai null)
    • Buat film dengan judul 'Upcoming Film' dan tahun 2025 (biarkan sutradara dan rating sama-sama bernilai null)
    • Panggil displayInfo() pada setiap film sesuai urutan di atas

Method displayInfo() harus mencetak dengan format persis seperti ini:

[title] ([year])
Director: [director or "Unknown"]
Rating: [rating or "Not rated"]

Perhatikan bahwa field non-nullable (title dan year) selalu dijamin memiliki nilai, sedangkan field nullable (director? dan rating?) boleh tetap tidak diatur. Ini mencerminkan situasi di dunia nyata, ketika sebagian data bersifat penting dan sebagian lainnya opsional.

Output yang diharapkan:

Inception (2010)
Director: Christopher Nolan
Rating: 8.8
The Matrix (1999)
Director: Unknown
Rating: 8.7
Upcoming Film (2025)
Director: Unknown
Rating: Not rated

Coba sendiri

import 'movie.dart';

void main() {
  // TODO: Buat film dengan judul 'Inception' dan tahun 2010
  // Lalu atur director menjadi 'Christopher Nolan' dan rating menjadi 8.8
  
  // TODO: Buat film dengan judul 'The Matrix' dan tahun 1999
  // Lalu atur hanya rating menjadi 8.7 (biarkan director tetap null)
  
  // TODO: Buat film dengan judul 'Upcoming Film' dan tahun 2025
  // Biarkan director dan rating tetap null
  
  // TODO: Panggil displayInfo() pada setiap film secara berurutan
}
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