Dart, final
konseptine sahiptir. Çoğu dinamik dil bu kavramı yoktur.Son değiştirici Dart'ta ne yapar?
Son ve ne için kullanırım?
Dart, final
konseptine sahiptir. Çoğu dinamik dil bu kavramı yoktur.Son değiştirici Dart'ta ne yapar?
Son ve ne için kullanırım?
final
değişkenler herhangi bir değer içerebilir, ancak bir kez atadıktan sonra, bir son değişken başka bir değere yeniden atanamaz. Örneğin
:
main() {
final msg = 'hello';
msg = 'not allowed'; // **ERROR**, program won't compile
}
final
de bir nesnedeki örnek değişkenleri için kullanılabilir. Kurucunun gövdesi çalıştırılmadan önce bir sınıfın son alanı ayarlanmalıdır. Son bir alan için oluşturulmuş bir örtük ayarlayıcıya sahip olacaktır, çünkü son değişkende yeni bir değer ayarlayamazsınız.
class Point {
final num x, y;
Point(this.x, this.y);
}
main() {
var p = new Point(1, 1);
print(p.x); // 1
p.x = 2; // WARNING, no such method
}
O final
değişkeni nasıl etkilediğini bilmek önemlidir, ancak nesne değişkeni tarafından işaret. Yani, final
değişkenin nesnesini değişmez yapmaz. Örneğin
: Yukarıdaki örnekte
class Address {
String city;
String state;
Address(this.city, this.state);
}
main() {
final address = new Address("anytown", "hi");
address.city = 'waikiki';
print(address.city); // waikiki
}
, address
değişken son olarak işaretlenmiş, bu yüzden her zaman new Address("anytown", "hi")
yapıcısı tarafından örneği nesneye işaret eder. Bununla birlikte, nesnenin kendisi değişebilir olan bir duruma sahiptir, bu yüzden şehri değiştirmek için mükemmeldir. final
tarafından önlenen tek şey, address
değişkenini yeniden atamadır.
"Kursör gövdesi çalıştırılmadan önce bir sınıfın son alanı ayarlanmalıdır." - Bu beni en çok üzen kısımdı. Son değişkeni yapıcıya koymuş olmama rağmen, hataya ulaşmamın sebebi bende bile gerçekleşmedi. –
@KevinSheehan Kurucudan önce son alanı ayarlayarak atıldım. Yapıcı düzeyinde bunu yapmak isteyenler için, eğer devlet son bir değişken olsaydı, şöyle ifade edilebilirdi: Adres (this.city): state = "Hawaii"; – djm