Seperti kita tahu bahwa bahasa Dart menjadi pondasi bagi Flutter, terdapat banyak fitur di dalam bahasa ini yang akan kita bahas tuntas di materi kali ini yaitu Null Safety
.
Sejak versi 2.12
, Dart menghadirkan fitur Null Safety
. Apa sih yang dimaksud dengan Null Safety? Kenapa kita harus menggunakan Null Safety? Oke mari kita bahas lebih dalam, Here we go…
Apa itu Null Safety ?
Oke langsung saja Anbi contohkan
String nama = "Jokowi";
int age = 30;
Bisa dilihat kedua variabel tersebut memiliki nilai, tapi di kasus tertentu variabel akan diisi `nanti` alias kita beri nilai `null` dulu.
double? ukuranSepatu = null;
ukuranSepatu = 38.5;
Terminologi
Bayangkan jika kamu ingin membelikan kado kepada salah satu teman, tapi karena kamu tidak tau ukuran sepatu teman kamu, akhirnya kamu isi dengan nilai null
. Selanjutnya setelah kamu tanya ukuran sepatu ke teman kamu, maka kamu dapat menuliskan ukuran sepatu dan membelikannya sepatu sehingga teman kamu dapat sepatu dengan ukuran yang pas. Begitulah ilustrasinya.
Nah secara teknis nilai null
bisa menyebabkan Null Pointer Exception (NPE) atau The Billion Dollar Mistake
.
Di sini Anbi berikan video mengenai null safety di Dart dari ahlinya ahli.
![](https://i1.ytimg.com/vi/iYhOU9AuaFs/hqdefault.jpg)
Penggunaan Null Safety
Pertama jika kamu ingin menggunakan fitur null safety
pastikan di berkas pubspec.yaml, pastikan versi minumum sdk
yang digunakan adalah versi 2.12
environment:
sdk: '>=2.12.0 <3.0.0'
Setidaknya ada 3 operator
yang bisa kamu gunakan untuk menggunakan fitur null safety, bisa dilihat di tabel bawah ini:
Operator | Nama | Description |
---|---|---|
? | Nullable | Digunakan untuk mendeklarasikan bahwa sebuah variable boleh bernilai null |
! | Bang Operator | Digunakan untuk mendeklarasikan sebuah variable tidak boleh null |
late | First Read | Mendeklarasikan bahwa sebuah variable baru pertama kali di inisialisasi dan biasanya digabung dengan final |
Oke mari kita bahas satu persatu
Nullable
Langsung saja ke contoh kode
String? warnaFavorite = null;
int? ukuranBaju;
Pemberian tanda tanya (?)
digunakan untuk mendeklarasikan bahwa sebuah variable boleh bernilai null
.
Bang Operator
Coba tuliskan kode berikut di text editor kamu
main(List<String> args) {
String? name = null;
checkName(name); //ERROR PADA COMPILER
}
checkName(String name) {
if (name == null) {
print("Name is null");
} else {
print("Name is not null");
}
}
Bisa dilihat bahwa terdapat error
pada compiler karena kita mencoba mengakses sebuah variable yang bernilai null, sedangkan parameter pada function checkName
bertipe String
sedangkan variabel yang kita masukkan bertipe String? alias String null
.
checkName(name!);
Untuk mengatasi error ini, kita bisa menggunakan bang operator (!)
, tanda seru tersebut kita memaksa variabel null menjadi non nullabel
, Dengan demikian kita memberi tahu kepada compiler bahwa variabel tersebut ada jaminan tidak akan null .
❗ Note : Gunakan bang operator (!) jika kamu yakin 100 % bahwa variabel tidak akan null alias akan ada nilainya.
Late
Jika kamu ingin memberikan nilai kepada suatu variabel itu nanti, maka kamu bisa menggunakan keyword late
. Berbeda dengan penggunaan nullable, keyword late yang dipasang ke variabel akan memberi tahu kepada compiler bahwa variabel tersebut tidak bernilai null tetapi akan dinisialisasi nanti.
Kok keknya sama aja ya ? Oke kita langsung code
late String nama;
print(nama) //The late local variable 'data' is definitely unassigned at this point
Bisa dilihat bahwa kode di atas akan menampilkan pesan error karena variabel yang seharusnya diinisasi nanti tapi belum diinisiasi dan langsung di cetak sehingga menghasilkan output error, berbeda dengan nullabel
yang masih bisa menampilkan null.
Mengutip dari seredata.com bahwa
Keyword late
mempunyai 2 efek, yaitu:
- Dart Analyzer tidak akan meminta kita untuk menginisialisasi nilai awal dari variabel yang non-nullable.
- Dart runtime akan malas (lazy) menginisialisasi variabel late, sebagai contoh: jika ada instance variabel non-nullable harus dikalkulasi, maka dengan menambahkan keyword late akan mendelay kalkulasi tersebut sampai penggunaan pertama sekali variable tersebut.
Oke mari kita contohkan
main() {
late final value = getValue();
print('Loading....'); //output : Loading....
print(value);
//output : Get Value dipanggil
//output: Value is Here
}
String getValue() {
print("Get value dipanggil");
return "Value is here";
}
Berikut output yang tidak menggunakan keyword late
Baik sekian materi tentang Null Safety, Bagaimana menyenangkan bukan ?
Sampai berjumpa di lain waktu, tetap pantau Anbidev supaya kamu lebih jago lagi dalam mengoding.