Perbedaan Final dan Const pada Bahasa Dart

M. Sulthan Al Ihsan
3 min readOct 19, 2019

--

Seperti pada bahasa pemrograman umumnya dart juga mendukung variabel yang bersifat immutable atau nilainya tidak bisa dirubah, pada bahasa dart sendiri terdapat 2 kata kunci berbeda yang dapat digunakan untuk membuat variabel immutable yaitu final dan const, Namun apakah perbedaan antara final dan const ? . Berikut penjelasan singkatnya.

sebelum masuk ke bahasan kita harus tahu beberapa aturan mengenai variabel immutable

Aturan pertama (variabel immutable tidak bisa dirubah nilainya)

Variabel yang bersifat immutable tidak bisa dirubah nilainya setelah diinisiasi, contoh program dibawah ini akan menghasilkan pesan error karena kita mencoba merubah 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;
//error: Constant variabels can't be assigned a value
}

Aturan kedua (variabel immutable harus diinisiasi pada saat deklarasi)

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;
}

PERBEDAAN FINAL dan CONST

Final dapat digunakan untuk deklarasi variabel immutable yang nilainya sudah ataupun belum diketahui pada saat waktu kompilasi berjalan, lihat 2 contoh berbeda dibawah ini

Contoh 1

yaitu saat kompilasi nilai variabel sudah diketahui, variabelnya sudah diberi nilai secara langsung.

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

contoh 1 menghasilkan nilai 21, pada saat di compile nilai variabel sudah diketahui nilainya karena diinisiasi secara langsung dengan nilai 21 pada baris kodefinal umur = 21

pada baris kode final umur = 21 disini kita artikan nilai dari variabel umur diinisiasi secara langsung dengan angka 21, sehingga saat dikompilasi nilainya sudah ada.

Contoh 2:

yaitu saat kompilasi nilai variabel belum diketahui secara langsung, variabelnya sudah di inisiasi namun nilainya akan didapatkan saat kompilasi dijalankan.

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

// hasil: 2019-10-18 15:50:02.484
}

contoh 2 diatas menampilkan waktu saat program dijalankan kompiler. Saat pertama kali dijalankan program menampilkan pesan 2019-10-18 15:50:02.484 , Namun saat kedua kalinya program menampilkan pesan 2019-10-18 15:51:18.212 . 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 dapat digunakan untuk deklarasi variabel immutable yang nilainya bersifat konstan dan harus sudah diketahui pada saat waktu kompilasi berjalan, artinya adalah nilai dari variabel tersebut harus sudah di berikan secara langsung. lihat 2 contoh berbeda dibawah ini

Contoh 1

saat kompilasi nilai variabel sudah diketahui, variabelnya sudah diberi nilai secara langsung.

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

Contoh 2:

saat kompilasi nilai variabelnya belum diketahui secara langsung, variabelnya sudah di inisiasi namun nilainya baru didapat saat kompilasi dijalankan.

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

// error: Const variables must be initialized with a constant
value.
}

Contoh diatas akan menghasilkan pesan error karena nilai dari variabel waktu tidak diinisiasi dengan nilai yang bersifat konstan namun diinisiasi 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 dengan final yang mana nilai dari variabelnya tidak mengapa kalau didapatkan pada saat kompilasi

Kesimpulannya

  1. final dan const merupakan keyword/kata kunci yang dapat digunakan untuk membuat variabel yang bersifat immutable
  2. Perbedaan utamanya ada pada inisiasi nilai (pemberian nilai) dari variabelnya, const mengharuskan variabel harus diinisiasi 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/ekplisit pada saat kompilasi.

Sekian artikel kali ini, semoga bermanfaat

--

--