Belajar Variable Scope di Dart
Variable Scope
Setelah Anda memisahkan kode Anda ke dalam blok atau fungsi yang terpisah, perlu Anda ketahui bahwa hal tersebut akan mempengaruhi bagaimana suatu variabel digunakan.
Setiap variabel memiliki scope atau lingkupnya masing-masing. Sebuah variabel dianggap satu lingkup selama masih berada di satu blok kurung kurawal yang sama. Lingkup ini menentukan bagian kode mana yang dapat membaca dan menggunakan variabel tersebut.
Perhatikan kode berikut ini:
- void main() {
- var price = 300000;
- var discount = 0;
- print('You need to pay: ${price - discount}');
- }
Pada kode di atas variabel discount masih bisa diakses dari dalam kode if karena masih berada di dalam satu scope fungsi main(). Bagaimana jika Anda ingin memisahkan kode di atas menjadi dua fungsi untuk menghitung diskonnya?
- void main() {
- var price = 300000;
- var discount = checkDiscount(price);
- print('You need to pay: ${price - discount}');
- }
- num checkDiscount(num price) {
- num discount = 0;
- if (price >= 100000) {
- discount = 10 / 100 * price;
- }
- return discount;
- }
Variabel discount dideklarasikan pada fungsi checkDiscount() sehingga memiliki scope pada fungsi tersebut dan menyebabkan eror pada fungsi main().
Maka untuk mengatasinya kita tetap perlu membuat variabel di kedua fungsi.
Selain berada dalam lingkup fungsi, suatu variabel juga bisa menjadi variabel global, yaitu variabel yang dideklarasikan di luar blok kode apa pun. Variabel ini bisa diakses di mana pun selama masih berada di berkas yang sama.
- var price = 300000;
- void main() {
- var discount = checkDiscount(price);
- print('You need to pay: ${price - discount}');
- }
- num checkDiscount(num price) {
- num discount = 0;
- if (price >= 100000) {
- discount = 10 / 100 * price;
- }
- return discount;
- }
Variabel juga dapat memiliki scope yang sespesifik mungkin hingga ke level control flow.
- num checkDiscount(num price) {
- num discount = 0;
- if (!discountApplied) { // Error
- if (price >= 100000) {
- discount = 10 / 100 * price;
- var discountApplied = true;
- }
- }
- return discount;
- }