Dart: Perbedaan Final dan Const

Terkadang kita membuat variabel dan memberi nilainya yang sangat spesifik dengan tujuan agar tidak pernah mengubah nilainya. Agar program dapat berjalan dengan sesuai yang di harapkan, yang terpenting adalah nilai variabel tetap sama selama masa pemakaiannya. Untuk membuat variabel yang dimaksud menggunakan const dan final yang seharusnya digunakan. Sebelum kita membahas tentang const dan final, kita perlu mengetahui perbedaan compile-time dan runtime.

Compile-Time dan Run-Time

Compile Time dan Run Time adalah istilah dari pemrograman yang mengarahkan pada tahapan di dalam ruang lingkup pemrograman. Berfungsi untuk membuat sebuah program yang pertama kali kita buat. sehingga source code yang kita buat akan menentukan bagaimana program akan berfungsi yang sesuai diharapkan.

Compilation dan Compile Time (Kompilasi dan Waktu Kompilasi)

Komputer tidak dapat memahami kode yang kita tulis dalam bahasa pemrograman yang berbeda, komputer hanya mengetahui satu bahasa yaitu bahasa mesin 1 dan 0. source code yang kita tulis harus dikompilasi menjadi kode mesin agar dapat dieksekusi. Proses ini yang disebut compilation (Kompilasi).

Sekarang kita telah memahami apa itu kompilasi (compilation) yang bisa kita jadikan sebagai dasar pemahaman tentang kompilasi (compilation) dan sekarang kita akan mempelajari tentang compile time (waktu kompilasi) melalui studi kasus.

Sebagai contoh kita akan mendefinisikan beberapa variabel int dan double sebagai nilai awal. Variabel ini akan selalu memiliki nilai awal yang sama setiap kali kita menjalankan program. nilai-nilai ini yang ditetapkan pada saat kompilasi. fase siklus hidup pemrograman inilah yang disebut waktu kompilasi (compile time).

Run dan Run Time

Setelah proses kompilasi, kita dapat menjalankan program kita, ketika kita memberikan variabel di suatu program yang kita buat menunjukkan bahwa nilai (value) yang ditampilkan oleh pernyataan print, dapat berubah setiap kali kita menjalankan program, tergantung pada jenis user. Hal-hal yang tidak dapat ditentukan hingga program benar-benar saat dijalankan telah fixed pada waktu proses (run time)

Immutable pada Dart

Sama halnya seperti bahasa pemrograman lain, Dart juga memiliki dua sifat variable yaitu mutable dan immutable. Secara sederhana Immutable artinya tidak bisa berubah sedangkan Mutable artinya bisa berubah.

  • variabel yang bersifat immutable variabel yang tidak bisa dirubah setelah diinialisasi, contoh program di bawah ini akan menghasilkan pesan error, karena kita akan mencoba mengubah nilai awal kedua kalinya.
void main() {
  final umur = 21;
  umur = 22;
  // error: 'umur', a final variable, can only be set once
  const age = 21;
  // age = 22;
  print(umur);
  //error: Constant variabels can't be assigned a value
}
  • Ketika kita mendeklarasikan variabel immutable kita harus langsung melakukan inisiasi memberi nilai) pada variabel tersebut, program akan error ketika kita tidak menginisasi nilainya, seperti contoh dibawah ini
void main() {
  final umur;
  //error: The final variable 'umur' must be initialized

  const age;
  //error: Constant variabels 'age' must be initialized
}

yang benar seperti ini :

void main() {
  final umur = 21;
  

  const age = 22;
  
}

Untuk membuat immutable variabel pada Dart , kita dapat menggunakan keyword final dan const.

Final

Final (variabel yang menggunakan keyword final) diinialisasi pada saat pertama kali digunakan dan hanya disetel sekali. Dengan kata lain nilai final akan diketahui pada saat run-time.

final dapat digunakan untuk deklarasi variabel immutable yang nilainya sudah ataupun belum diketahui pada saat waktu kompilasi berjalan.

void main() {
  final umur = 21;
  print(umur);
}
//output 
21

contoh di atas kita telah menetepkan nilai dari variabel umur = 21, jadi pada saat di compile, nilai variabel sudah diketahui nilainya karena diinialisasi secara langsung dengan sebuah value. Sehingga ketika di kompilasi nilainya sudah ada.

ada contoh lain penggunaan final, pada saat kompilasi nilai variabel belum diketahui secara langsung, variabelnya sudah di inialisiasi namun nilainya akan didapatkan saat kompilasi dijalankan.

void main() {
  final waktu = new DateTime.now();
  print(waktu);

  
}

//Output
2020-10-02 13:22:19.909275

contoh diatas menampilkan waktu pada saat kompilasi dijalankan, saat dijalankan program akan menampilkan 2020-10-02 13:22:19.909275, namun jika kita menjalankan program diatas untuk kedua kalinya akan menampilkan output 2020-10-02 13:25:59.153939. Mengapa hasilnya berbeda pada setiap kali dijalankan? padahal variabel waktu bersifat immutable atau tidak bisa dirubah nilai? ini dikarenakan nilai dari new DateTime.now() akan didapatkan setelah program dijalankan/kompilasi dengan nilai kembalinya berupa waktu sekarang. Oleh karena itu tiap dijalankan hasilnya berbeda. Sehingga dapat kita ketahui nilai dari variabel waktu pada kode final waktu = new DateTime.now() sesungguhnya baru akan didapatkan saat kompilasi dijalankan dan artinya sebelum kompilasi nilainya belum diketahui secara eksplisit.

Pointnya adalah kata kunci final dapat digunakan untuk inisiasi variabel immutable yang mana nilai variabelnya sudah atau belum diketahui pada saat kompilasi berjalan

Const

Const dapat digunakan untuk deklarasi variabel immutable yang nilainya bersifat konstan dan harus sudah diketahui pada saat waktu kompilasi (Compile time) berjalan, artinya adalah nilai dari variabel tersebut harus sudah di berikan value secara langsung.

void main() {
  const umur = 21;
  print(umur);
}

//Output
21

contoh diatas saat compile nilai variabel sudah diketahui, variabelnya sudah diberi nilai secara langsung.

contoh lainnya saat kompilasi nilai variabelnya belum diketahui secara langsung, variabelnya sudah di inialisasi namun nilainya baru didapat saat kompilasi di jalankan.

void main() {
  const waktu = new DateTime.now();
  print(waktu);
}

//Ouput :
bin/main.dart:2:17: Error: New expression is not a constant expression.
  const waktu = new DateTime.now(); ^^^

contoh diatas akan menghasilkan pesan error karena nilai dari variabel waktu tidak diinialisasi dengan nilai yang bersifat konstan namun diinialisasi dengan new DateTime.now() yang mana nilainya akan didapatkan setelah program dijalankan. Padahal const sendiri memerlukan nilai secara langsung dan nilainya harus sudah diketahui sebelum program dikompilasi.

Berbeda final yang mana nilai dari variabelnya tidak mengapa (tidak error) kalau didapatkan pada saat kompilasi.

Kesimpulan

  • final dan const merupakan keyword yang dapat digunakan untuk membuat variabel yang bersifat immutable.
  • Perbedaan utama ada pada inialisasi nilai (pemberian nilai) dari variabelnya, const mengharuskan variabel harus dinialisasi pada saat kompilasi, nilai bersifat konstan dan secara langsung / eksplisit sehingga pada saat kompilasi variabel const sudah memiliki nilai, sedangkan final tidak mengharuskan variabel memiliki nilai secara langsung / eskplisit pada saat kompilasi.
Sumber

https://id.bccrwp.org/compare/difference-between-compile-time-and-runtime/
http://faculty.salina.k-state.edu/tmertz/Java/013hardwaresoftwareandcomputerlanguages/13compiletimeandruntime.pdf
https://www.it-jurnal.com/pengertian-kompilasi-dan-kompilator/
https://www.javatpoint.com/dart-constants
https://medium.com/@sulthanalihsan5/perbedaan-final-dan-const-pada-bahasa-dart-552d2149f

Default image
Herry Prasetyo
Today a reader Tomorrow a Leader

Leave a Reply