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); // nullPerbedaan 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-nullableDi pelajaran berikutnya, kamu akan mempelajari operator yang disediakan Dart untuk bekerja dengan aman menggunakan nilai yang bisa bernilai null.
Tantangan
MudahMari 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 classMovieyang 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 titlenon-nullable, setiap film harus memiliki judulint yearnon-nullable, setiap film harus memiliki tahun rilisString? directornullable, sutradaranya mungkin tidak diketahuidouble? ratingnullable, belum semua film memiliki rating- Constructor yang menerima
titledanyearsebagai parameter wajib - Method
displayInfo()yang mencetak informasi film, menampilkanUnknownjika sutradara tidak diketahui danNot ratedjika 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 tahun2010, lalu atur sutradaranya menjadi'Christopher Nolan'dan rating-nya menjadi8.8 - Buat film dengan judul
'The Matrix'dan tahun1999, lalu atur rating-nya saja menjadi8.7(biarkan sutradaranya bernilai null) - Buat film dengan judul
'Upcoming Film'dan tahun2025(biarkan sutradara dan rating sama-sama bernilai null) - Panggil
displayInfo()pada setiap film sesuai urutan di atas
- Buat film dengan judul
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 ratedCoba 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
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online