7
有人可以向我解釋如何/何時/爲什麼使用const
關鍵字,或者它只是「一種聲明常量變量的方法」?如果是這樣,這是什麼之間的區別:在Dart中使用的「const」關鍵字是什麼?
int x = 5;
和
const int x = 5;
難道你們,請給我一個例子嗎?
有人可以向我解釋如何/何時/爲什麼使用const
關鍵字,或者它只是「一種聲明常量變量的方法」?如果是這樣,這是什麼之間的區別:在Dart中使用的「const」關鍵字是什麼?
int x = 5;
和
const int x = 5;
難道你們,請給我一個例子嗎?
const
表示編譯時間常數。表達式值必須在編譯時已知。 const
修改「值」。
「常量」具有以下含義:在箭稍微複雜和微妙。 const修改值。創建集合時可以使用它,像const [1,2,3]這樣的 ,以及像const point(2,3)一樣構造對象(而不是新建) 。這裏,const意味着對象的整個深度狀態可以在編譯時完全確定,並且對象將被凍結並且完全不可變。
如果使用
const x = 5
然後變量x可以在cosnt收集用於像
const aConstCollection = const [x];
,如果你不使用const
,只是用x = 5
然後
const aConstCollection = const [x];
是非法的。從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
}
更多的例子,爲什麼我不能用常量不帶靜電?我的const不需要靜態類作用域,所以爲什麼我不得不聲明它是靜態的? – robbie
@robbie你的常量也不需要爲每個實例重複。既然它是恆定的,它永遠不會改變,所以爲什麼浪費空間複製它呢?通過強制靜態聲明常量,它們只被放入內存一次,而不是每次創建一個實例。我相信這個解釋適用於C#和Dart。 –
Dart中的Const值是「規範化的」,所以它們只有一個實例,因此「static const」是多餘的:「const」就足夠了。 [Seth Ladd關於此的文章]的最後一段(http://news.dartlang.org/2012/06/const-static-final-oh-my.html)事實上表明「const」是首選的風格,而「靜態const」不鼓勵。 – dharcourt