Belajar Pemrograman Dart: Null Safety

{tocify} $title={Daftar Isi}

Pendahuluan:

Kecepatan pengembangan sebuah program/aplikasi berbasis desktop ataupun mobile tidak hanya ditunjang oleh rancangan dan kerja sama tim yang baik akan tetapi kemampuan dan fitur yang tersedia dari bahasa pemrograman itu sendiri juga dapat menunjang pengembangan program/aplikasi, misalnya saja pada program/aplikasi anda didapati error yang disebabkan oleh 'null pointer / null references' yang sangat umum terjadi dalam pemrograman komputer sehingga menyebabkan program/aplikasi dapat mengirimkan pesan null atau bahkan crash karena menjalankan suatu proses yang tidak ada nilainya sama sekali alias 'null'.

Tony Hoare, seorang ilmuwan komputer ternama yang telah menemukan algoritma Quicksort bahkan pernah menyebut bahwa kesalahan akibat 'null' sebagai "kesalahan miliaran dolar", karena kesalahan, kerentanan, dan sistem crash yang tak terhitung banyaknya yang mungkin telah menyebabkan satu miliar dolar rasa sakit dan kerusakan program/aplikasi dalam empat puluh tahun terakhir. Pada tahun 2009 Tony meminta maaf  karena telah menemukan Null References pada tahun 1965 dalam upaya merancang sistem tipe komprehensif pertama untuk bahasa pemrograman ALGOL yang bertujuan untuk memastikan bahwa semua penggunaan referensi harus benar-benar aman, dengan pemeriksaan dilakukan secara otomatis oleh kompiler.

Pada saat ini banyak bahasa pemrograman telah dilengkapi sejumlah fitur untuk meminimalisir kesalahan yang diakibatkan oleh null pointer tersebut, di Dart fitur ini juga baru ditambahkan pada sekitar Maret, 2021 untuk Dart versi 2.12 yang dinamakan 'null safety' sehingga diharapkan dapat membantu pemrogram untuk sesegera mungkin dapat memperbaiki kemungkinan kesalahan 'null' pada program/aplikasi yang dikerjakannya.

Pengenalan Null Safety:

Null Safety atau Sound Null Safety merupakan fitur baru hasil pembaruan Dart pada versi 2.12 di mana null safety ini merupakan fitur yang mujarab untuk mencegah sebuah variable tidak memiliki nilai apapun alias null dengan menampilkan pesan error di tingkat kompiler (IDE) dikarenakan secara default variable di Dart bersifat non-nullable yang berarti variable tidak boleh null (tidak memiliki nilai/ekspresi), setidaknya sampai anda secara eksplisit (tidak disarankan) mengisi variable dengan keyword 'null' dan/atau menggunakan operator null-aware sehingga mengizinkan variable tersebut menjadi 'nullable', jika tidak ada nilai/ekspresi yang dimiliki oleh variable maka null safety akan menampilkan pesan error pada variable yang tidak memiliki nilai/ekspresi apapun sebagaimana contoh berikut:


Lalu mengapa kita masih perlu menggunakan operator null-aware jika masih dapat menghasilkan null? Pada dasarnya fitur null safety tidak dapat memberitahu jika variable akan menghasilkan null melainkan akan memberitahu jika variable tidak memiliki nilai/ekspresi apapun, setidaknya sampai anda memberikan sebuah nilai/ekspresi dan/atau menggunakan operator null-aware untuk menginzinkan sebuah variable menjadi nullable.

Sebagai perbandingan, jika anda menggunakan Dart di bawah versi 2.12 maka anda dapat mendeklarasikan sebuah variable tanpa memiliki nilai apapun alias 'null' dan tentu saat program di Run maka hasilnya null, sedangkan pada Dart versi null safety anda tidak lagi dapat melakukannya dan jika program di Run maka akan menghasilkan error non-nullable variable, untuk mengatasinya anda bisa menggunakan dua cara yakni:
  1. Memastikan variable memiliki nilai/ekspresi,
  2. Menggunakan operator null-aware untuk mengizinkan variable menjadi nullable, atau
  3. (Optional) Menggunakan tipe data dynamic atau var
Agar lebih jelas, berikut contoh perbedaan antara dart versi null-safety dengan dart sebelum versi null-safety


Itulah sebabnya fitur null safety dibutuhkan pada sebuah bahasa pemrograman untuk mencegah variable tidak memiliki nilai/ekspresi, walau kendati masih bisa menghasilkan null namun hal tersebut hanya terjadi ketika variable memang diizinkan menjadi nullable atau adanya kesalahan pada kode program sehingga menghasilkan suatu pemrosesan menjadi null.

Null-Aware Operator:


Operator Keterangan Contoh
?? Digunakan untuk mengembalikan nilai alternative jika suatu variable null dengan mengeksekusi operand kanan, jika variable tidak null maka operand kiri yang akan di eksekusi String? a;
String? b = a ?? "Data Tidak Ditemukan"
? Digunakan untuk memeriksa variable apakah null atau tidak serta mengizinkan sebuah variable menjadi nullable int? a;
! Untuk memastikan sebuah variable tidak boleh null return a!
late Mengizinkan variable untuk null saat diinisialisasi dan nilainya akan diisi 'nanti' late String a;
Spread/Triple Dot Operator (...) Digunakan untuk menggabungkan koleksi data dan hanya untuk tipe data koleksi, harus ditempatkan sebelum ekspresi di dalam sebuah koleksi data List c = [...a, ...b];



Penggunaan:

Pada dasarnya sifat variable di Dart adalah non-nullable yaitu tidak boleh untuk tidak memiliki nilai/ekspresi apapun alias null saat anda menginisialisasi sebuah variable pada sebuah class ataupun fungsi/method sehingga anda perlu memberikan nilai/ekspresi pada variable saat variable diinisialisasi, namun jika anda ingin variable tersebut tidak memiliki nilai/ekspresi saat diinisialisasi maka anda dapat menggunakan operator null-aware untuk mengizinkan variable menjadi nullable, contohnya sebagai berikut:


Dengan demikian variable b dapat untuk tidak memiliki nilai/ekspresi saat diinisialisasi, namun sebenarnya kode di atas masih memiliki kekurangan walau secara syntax tidak ada yang salah yakni jika variable b tidak memiliki nilai pada fungsi 'main' maka saat dijalankan akan menghasilkan error, terlebih jika program menggunakan fungsi input untuk mendapatkan nilai bukan nilai konstan seperti contoh di atas, untuk itu anda perlu membuat kode yang dapat menangani kemungkinan tersebut, contohnya sebagai berikut:


Dengan demikian maka sampai kapanpun program tidak akan menampilkan null karena jika variable b tidak memiliki nilai atau null maka hanya nilai pada variable c yang akan ditampilkan. Operator (?) digunakan untuk mengizinkan variable menjadi nullable namun jika anda hanya ingin menunda pemberian nilai pada suatu variable saat variable tersebut diinisialisasi maka anda bisa menggunakan operator late sebagaimana contoh berikut:


Dengan menggunakan operator late maka variable anda sebenarnya masih bersifat non-nullable namun anda dapat menunda pemberian nilai pada variable di awal inisialisasi, tidak seperti operator (?) yang mengizinkan variable menjadi nullable.

Lalu apa bedanya antara operator (?) dengan late jika keduanya sama-sama mengizinkan variable tidak memiliki nilai apapun saat diinisialisasi? Bedanya, jika anda menggunakan operator (?) mengizinkan variable menjadi nullable namun saat digunakan untuk operasi tertentu maka anda perlu menandai variable yang bersangkutan dengan operator (!) sebagai tanda bahwa variable tersebut tidak boleh null, namun pada late anda tidak memerlukan operator (!) namun pastikan bahwa variable pasti memiliki nilai nantinya alias tidak null.

Konklusi:

Masalah yang disebabkan oleh 'null' sebenarnya bukan masalah baru karena telah ditemukan pertama kali oleh Tony Hoare dalam upaya pengembangan bahasa ALGOL pada tahun 1965. Pada dasarnya null safety merupakan fitur yang membantu mendeteksi sebuah variable yang tidak memiliki nilai / ekspresi apapun alias 'null', setidaknya sampai anda mengizinkan variable tersebut dapat untuk tidak memiliki nilai / ekspresi apapun dengan secara eksplisit menuliskan keyword 'null' dan/atau menggunakan operator null aware sehingga program anda masih bisa menghasilkan null, sebuah program/aplikasi tidak boleh mengembalikan nilai null ketika digunakan apalagi sampai mengalami crash akibat null untuk itu penting juga bagi anda untuk memperhatikan kode program agar tidak menghasilkan null ketika memproses suatu nilai.

Referensi:
Wikipedia - Tony Hoare - diakses pada 26 April, 2022
Wikipedia - Void Safety - diakses pada 30 April, 2022
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama