const
キーワードを使用する方法/時期/理由を説明する人がいますか、それとも単に「定数変数を宣言する方法」ですか?Dartで使用される「const」キーワードとは何ですか?
int x = 5;
と
const int x = 5;
は君たちが私に例を与えてくださいでした:もしそうなら、この違いは何ですか?
const
キーワードを使用する方法/時期/理由を説明する人がいますか、それとも単に「定数変数を宣言する方法」ですか?Dartで使用される「const」キーワードとは何ですか?
int x = 5;
と
const int x = 5;
は君たちが私に例を与えてくださいでした:もしそうなら、この違いは何ですか?
const
は、コンパイル時定数を意味します。式の値は、コンパイル時にわかっている必要があります。 const
は "値"を変更します。 news.dartlang.orgから
、
「constが」もう少しダートでの複雑かつ微妙だな意味を持っています。 const の値をに変更します。 const [1,2,3]のようなコレクションの作成時に を、また新しいオブジェクトの代わりに (const Point(2,3))のようなオブジェクトを作成するときに使用できます。ここで、constは、オブジェクトの全体が 深い状態をコンパイル時に完全に決定でき、 オブジェクトが固定され、完全に不変であることを意味します。あなたは
const x = 5
を使用する場合はconst
を使用して、ちょうどx = 5
その後、
const aConstCollection = const [x];
を使用しない場合は、変数xがconst aConstCollection = const [x];
ようcosntコレクションで使用することができます
違法です。
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
}
www.dartlang.orgから
より多くの例は、なぜ私は静的なしのconstを使用することはできませんか?私のconstは静的なクラスのスコープを必要としません。なぜ私は静的なものとして宣言する必要がありますか? – robbie
@robbieあなたの定数もインスタンスごとに繰り返す必要はありません。それは一定であるので、それは決して変わらないでしょう、なぜそれを複製する無駄なスペース?定数の静的宣言を強制することにより、インスタンスが作成されるたびにではなく、クラスのために一度だけメモリに格納されます。この説明はC#とDartの両方に当てはまると思います。 –
DartのConst値は「標準化」されているため、インスタンスは1つしか存在せず、したがって「静的const」は冗長です。「const」で十分です。実際のところ、[Seth Laddのこの記事の](http://news.dartlang.org/2012/06/const-static-final-oh-my.html)の最後の段落は、「const」が好ましいスタイルであり、静的なconstは落胆した。 – dharcourt