Pengantar Keamanan Null
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 23 dari 110.
Salah satu sumber bug yang paling umum dalam pemrograman adalah mencoba menggunakan nilai yang tidak ada. Di Dart, “ketiadaan nilai” khusus ini direpresentasikan oleh null. Fitur null safety di Dart membantumu menemukan error ini sebelum kodemu dijalankan.
Tanpa null safety, variabel apa pun berpotensi bernilai null, sehingga dapat menyebabkan program crash saat runtime ketika kamu mencoba menggunakannya:
// Di Dart versi lama (tanpa keamanan null)
String name; // Bisa bernilai null!
print(name.length); // Programmu akan berhenti jika name bernilai nullDengan null safety yang diaktifkan (Dart 2.12+), compiler membedakan variabel yang dapat menampung null dan variabel yang tidak dapat menampungnya. Secara default, variabel bersifat non-nullable, variabel tersebut harus selalu berisi nilai yang valid:
String name = 'Alice'; // Harus memiliki nilai
print(name.length); // Aman, name tidak pernah nullCompiler akan menolak untuk mengompilasi kode yang variabel non-nullable-nya mungkin bernilai null. Ini memindahkan deteksi error dari waktu runtime ke waktu kompilasi, sehingga programmu lebih andal. Dalam pelajaran berikutnya, kamu akan belajar cara mendeklarasikan tipe nullable saat memang membutuhkannya, serta operator yang disediakan Dart untuk bekerja dengan aman menggunakan nilai yang berpotensi null.
Tantangan
MudahMari kita buat sistem kartu kontak sederhana yang menunjukkan pentingnya variabel non-nullable. Kamu akan membuat sistem yang mewajibkan setiap kontak memiliki informasi valid yang terjamin.
Kamu akan mengatur kodemu ke dalam dua file:
contact.dart: Definisikan classContactyang merepresentasikan informasi kontak seseorang. Karena kita menggunakan null safety, setiap field harus memiliki nilai yang valid, tidak boleh ada data yang hilang! Class-mu harus memiliki:String firstNameuntuk nama depan kontakString lastNameuntuk nama belakang kontakString emailuntuk alamat email kontakint phoneDigitsuntuk jumlah digit dalam nomor teleponnya- Sebuah constructor yang menerima keempat nilai
- Sebuah getter
fullNameyang mengembalikan gabungan nama depan dan nama belakang dengan spasi di antaranya - Method
displayCard()yang mencetak informasi kontak
main.dart: Impor class kontakmu dan buat dua kontak untuk menunjukkan bahwa semua field dijamin memiliki nilai:- Buat kontak dengan nama depan
'Emma', nama belakang'Wilson', email'emma@mail.com', dan jumlah digit telepon10 - Buat kontak dengan nama depan
'James', nama belakang'Brown', email'james@work.com', dan jumlah digit telepon11 - Panggil
displayCard()pada setiap kontak sesuai urutan di atas
- Buat kontak dengan nama depan
Method displayCard() harus mencetak dengan format persis seperti ini:
--- Contact Card ---
Name: [fullName]
Email: [email]
Phone digits: [phoneDigits]Perhatikan bahwa setiap variabel harus diinisialisasi dengan nilai yang nyata. Inilah null safety! Compiler menjamin bahwa saat kamu mengakses fullName, email, atau field lainnya, nilainya akan selalu valid.
Output yang diharapkan:
--- Contact Card ---
Name: Emma Wilson
Email: emma@mail.com
Phone digits: 10
--- Contact Card ---
Name: James Brown
Email: james@work.com
Phone digits: 11Coba sendiri
import 'contact.dart';
void main() {
// TODO: Buat kontak pertama dengan:
// - nama depan: 'Emma'
// - nama belakang: 'Wilson'
// - email: 'emma@mail.com'
// - jumlah digit nomor telepon: 10
// TODO: Buat kontak kedua dengan:
// - nama depan: 'James'
// - nama belakang: 'Brown'
// - email: 'james@work.com'
// - jumlah digit nomor telepon: 11
// TODO: Panggil displayCard() pada setiap kontak 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