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.

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:

OperatorNamaDescription
?NullableDigunakan untuk mendeklarasikan bahwa sebuah variable boleh bernilai null
!Bang OperatorDigunakan untuk mendeklarasikan sebuah variable tidak boleh null
lateFirst ReadMendeklarasikan 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.

Unhandled exception
Unhandled exception
Berikut contoh jika kamu tetap menggunakan bang operator (!), tapi nilainya tetap null.

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:

  1. Dart Analyzer tidak akan meminta kita untuk menginisialisasi nilai awal dari variabel yang non-nullable.
  2. 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

Late
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.