2012-11-27 30 views
7

Ai đó có thể giải thích cho tôi cách/khi nào/tại sao phải sử dụng từ khóa const hoặc đó chỉ là "cách để khai báo biến không đổi"?Từ khóa "const" được sử dụng trong Dart là gì?

int x = 5; 

const int x = 5; 

thể các bạn hãy cho tôi một ví dụ: Nếu vậy, sự khác biệt giữa điều này là những gì?

Trả lời

6

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 
} 
+0

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

+0

@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. –

+1

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

Các vấn đề liên quan