Konstanta #
Dalam pemrograman, konstanta adalah nilai yang tidak dapat diubah setelah ditetapkan. Konstanta berguna ketika Anda ingin memastikan bahwa nilai tertentu tidak dapat diubah selama eksekusi program. Dalam Dart, konstanta dideklarasikan menggunakan kata kunci const
atau final
, dan kedua kata kunci ini memiliki kegunaan yang sedikit berbeda.
Kata Kunci const
#
Kata kunci const
digunakan untuk mendeklarasikan nilai yang benar-benar konstan, yang artinya nilai tersebut sudah ditentukan pada waktu kompilasi (compile-time) dan tidak bisa diubah lagi. Nilai yang ditetapkan menggunakan const
tidak hanya tidak dapat diubah, tetapi juga dianggap sebagai nilai immutable (tidak bisa diubah), yang memungkinkan Dart untuk melakukan optimasi tertentu.
Sintaks:
const namaVariabel = nilai;
Contoh:
const int maxLoginAttempts = 3;
const double pi = 3.14;
Pada contoh di atas, maxLoginAttempts
dan pi
adalah konstanta yang nilainya ditentukan pada waktu kompilasi dan tidak dapat diubah selama eksekusi program.
Konstanta pada Objek: #
Selain nilai primitif seperti int
atau double
, const
juga bisa digunakan untuk mendeklarasikan objek yang konstan. Objek yang dideklarasikan sebagai const
harus diinisialisasi dengan nilai yang juga konstan, dan objek tersebut menjadi immutable.
Contoh:
class Point {
final int x;
final int y;
const Point(this.x, this.y);
}
void main() {
const point1 = Point(0, 0);
const point2 = Point(1, 2);
print(point1.x); // Output: 0
print(point2.y); // Output: 2
}
Dalam contoh di atas, Point
adalah sebuah kelas dengan dua properti x
dan y
. Objek point1
dan point2
yang dibuat dengan const
tidak bisa diubah setelah diciptakan.
Konstanta yang Bersifat Compile-Time: #
Jika suatu nilai tidak dapat dihitung pada waktu kompilasi, maka nilai tersebut tidak dapat digunakan dengan const
. Sebagai contoh, operasi yang melibatkan input dari pengguna atau nilai yang bergantung pada hasil runtime tidak dapat menjadi const
.
Contoh yang Salah:
void main() {
const currentTime = DateTime.now(); // Error, karena DateTime.now() adalah runtime
}
Pada contoh di atas, DateTime.now()
adalah nilai runtime yang tidak dapat ditentukan pada waktu kompilasi, sehingga tidak dapat digunakan dengan const
.
Kata Kunci final
#
Kata kunci final
digunakan untuk mendeklarasikan sebuah variabel yang nilainya ditetapkan hanya sekali dan tidak bisa diubah setelah itu. Namun, berbeda dengan const
, nilai final
tidak harus diketahui pada waktu kompilasi, dan dapat ditentukan pada waktu eksekusi (runtime).
Sintaks:
final namaVariabel = nilai;
Contoh:
final int maxLoginAttempts = 3;
final DateTime currentTime = DateTime.now();
Pada contoh di atas, maxLoginAttempts
adalah final karena nilainya tidak akan berubah setelah ditetapkan, sementara currentTime
adalah variabel yang mendapatkan nilai pada waktu runtime, tetapi setelah diinisialisasi, nilainya tidak bisa diubah.
Perbedaan Antara const
dan final
:
#
-
const
: Nilai harus diketahui pada waktu kompilasi, dan nilai tersebut adalah immutable. Digunakan ketika Anda ingin mendefinisikan nilai yang benar-benar konstan, misalnya untuk mendefinisikan konstanta seperti nilai π (3.14), atau mendefinisikan objek yang tidak akan berubah selama eksekusi program. -
final
: Nilai tidak harus diketahui pada waktu kompilasi dan bisa ditetapkan pada waktu runtime. Digunakan ketika Anda ingin mendefinisikan variabel yang nilainya tidak akan diubah setelah diinisialisasi, tetapi nilainya mungkin baru diketahui pada waktu eksekusi, misalnya waktu saat program dijalankan (DateTime.now()
).
Konstanta dalam Kelas dan Fungsi #
Dalam Dart, Anda juga bisa menggunakan const
dan final
dalam kelas dan fungsi:
Contoh final
dalam Kelas:
class Circle {
final double radius;
final double area;
Circle(this.radius) : area = 3.14 * radius * radius;
}
void main() {
final circle = Circle(5);
print(circle.area); // Output: 78.5
}
Pada contoh di atas, radius
dan area
adalah properti final yang nilainya tidak bisa diubah setelah objek Circle
dibuat.
Contoh const
dalam Fungsi:
class Circle {
final double radius;
const Circle(this.radius);
double get area => 3.14 * radius * radius;
}
void main() {
const circle = Circle(5);
print(circle.area); // Output: 78.5
}
Pada contoh ini, circle
adalah objek konstan yang dibuat dengan const
, sehingga semua propertinya juga harus bersifat konstan atau final.
Penggunaan Konstanta Global: #
Kadang-kadang, konstanta digunakan pada level global (di luar fungsi atau kelas) untuk mendefinisikan nilai yang akan digunakan di berbagai bagian program.
Contoh:
const double gravity = 9.8;
const int maxUsers = 100;
void main() {
print("Gravity: $gravity");
print("Max Users: $maxUsers");
}
Pada contoh di atas, gravity
dan maxUsers
adalah konstanta global yang dapat digunakan di berbagai bagian program tanpa risiko nilai tersebut berubah.
Kesimpulan #
Konstanta dalam Dart adalah alat yang penting untuk memastikan bahwa nilai-nilai tertentu tidak berubah selama eksekusi program. Dengan menggunakan const
, Anda bisa mendefinisikan nilai yang tetap pada waktu kompilasi dan bersifat immutable, sementara dengan final
, Anda bisa menetapkan nilai yang tidak akan diubah setelah diinisialisasi, bahkan jika nilai tersebut baru diketahui pada waktu runtime. Memahami perbedaan antara const
dan final
serta penggunaannya dalam berbagai konteks akan membantu Anda menulis kode yang lebih aman dan efisien.