Dart có khái niệm là final
. Hầu hết các ngôn ngữ động đều không có khái niệm này.Công cụ sửa đổi cuối cùng làm gì trong Dart?
Điều gì là cuối cùng và tôi sử dụng nó để làm gì?
Dart có khái niệm là final
. Hầu hết các ngôn ngữ động đều không có khái niệm này.Công cụ sửa đổi cuối cùng làm gì trong Dart?
Điều gì là cuối cùng và tôi sử dụng nó để làm gì?
final
biến có thể chứa bất kỳ giá trị nào, nhưng khi được chỉ định, biến cuối cùng không thể được gán lại cho bất kỳ giá trị nào khác.
Ví dụ:
main() {
final msg = 'hello';
msg = 'not allowed'; // **ERROR**, program won't compile
}
final
cũng có thể được sử dụng cho các biến Ví dụ trong một đối tượng. Một trường cuối cùng của một lớp phải được thiết lập trước khi thân hàm khởi tạo được chạy. Trường cuối cùng sẽ là không phải có trình thiết lập ngầm được tạo cho nó, vì bạn không thể đặt giá trị mới trên biến cuối cùng.
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
}
Điều quan trọng là phải nhận ra rằng final
ảnh hưởng đến biến, nhưng không phải đối tượng được chỉ định bởi biến. Tức là, final
không biến đối tượng của biến là không thay đổi.
Ví dụ:
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
}
Trong ví dụ trên, biến address
được đánh dấu là cuối cùng, vì vậy nó sẽ luôn trỏ đến đối tượng cụ thể của các nhà xây dựng new Address("anytown", "hi")
. Tuy nhiên, đối tượng chính nó có trạng thái có thể thay đổi, do đó, nó hoàn toàn hợp lệ để thay đổi thành phố. Điều duy nhất được ngăn chặn bởi final
được gán lại biến số address
.
"Trường cuối cùng của lớp phải được đặt trước khi phần thân của hàm tạo đang chạy." - Đây là phần đã ném tôi nhiều nhất. Mặc dù tôi đã thiết lập biến cuối cùng trong hàm tạo, nó thậm chí không xảy ra với tôi đó là lý do tôi nhận được lỗi. –
@KevinSheehan Tôi đã bị loại bỏ bằng cách thiết lập trường cuối cùng trước nhà xây dựng. Đối với những người muốn làm điều này ở cấp độ nhà xây dựng, nếu nhà nước là một biến cuối cùng, nó có thể được thiết lập như vậy: Địa chỉ (this.city): state = "Hawaii"; – djm