const
có nghĩa là hằng số thời gian biên dịch. Giá trị biểu thức phải được biết tại thời gian biên dịch. const
sửa đổi "giá trị".
Từ news.dartlang.org,
"const" có một ý nghĩa đó là một chút phức tạp hơn và tinh tế trong Dart. const sửa đổi giá trị. Bạn có thể sử dụng nó khi tạo bộ sưu tập, như const [1, 2, 3] và khi xây dựng đối tượng (thay vì mới) như const Point (2, 3). Ở đây, const nghĩa là toàn bộ trạng thái sâu của đối tượng có thể được xác định hoàn toàn tại thời gian biên dịch và đối tượng sẽ bị đóng băng và hoàn toàn không thay đổi.
nếu bạn sử dụng
const x = 5
sau đó biến x có thể được sử dụng trong một bộ sưu tập cosnt như
const aConstCollection = const [x];
nếu bạn không sử dụng const
, và chỉ sử dụng x = 5
sau đó
const aConstCollection = const [x];
Là bất hợp pháp.
Thêm ví dụ từ www.dartlang.org
class SomeClass {
static final someConstant = 123;
static final aConstList = const [someConstant]; //NOT allowed
}
class SomeClass {
static const someConstant = 123; // OK
static final startTime = new DateTime.now(); // OK too
static const aConstList = const [someConstant]; // also OK
}
Nguồn
2012-11-27 05:17:06
tại sao tôi không thể sử dụng const mà không tĩnh? Const của tôi không cần phạm vi lớp tĩnh vì vậy tại sao tôi buộc phải sử dụng khai báo nó là tĩnh? – robbie
@robbie hằng số của bạn cũng không cần phải lặp lại cho từng trường hợp. Vì nó là hằng số, nó sẽ không bao giờ thay đổi, vậy tại sao lại lãng phí không gian sao chép nó? Bằng cách buộc khai báo tĩnh của các hằng số, chúng chỉ được đưa vào bộ nhớ một lần cho lớp, thay vì mỗi khi một cá thể được tạo ra. Tôi tin rằng lời giải thích này áp dụng cho cả C# và Dart. –
Giá trị Const trong Dart là "chuẩn hóa", vì vậy chỉ có một ví dụ của chúng, và "const tĩnh" do đó dự phòng: "const" sẽ là đủ. Đoạn cuối cùng của bài viết của [Seth Ladd về điều này] (http://news.dartlang.org/2012/06/const-static-final-oh-my.html) trong thực tế cho thấy rằng "const" là phong cách ưa thích và "const tĩnh" không khuyến khích. – dharcourt