In Dart Object() constructor is declared as const so:
identical(const Object(), const Object()); //true
I know that in Dart 2 the keyword const is optional and I thought that the previous statement was equivalent to:
identical(Object(), Object()); //false
But actually it seems to be equivalent to:
identical(new Object(), new Object()); //false
Now my doubts are:
1) When is const keyword optional?
2) Is there any way to ensure instances of my classes to be always constant without const keyword? So that I can obtain:
indentical(MyClass(), MyClass()); //true (is it possible?)
Dart 2 allows you to omit
new
everywhere. Anywhere you used to writenew
, you can now omit it.Dart 2 also allows you to omit
const
in positions where it's implied by the context. Those positions are:const
object creations, map or list literal (const [1, [2, 3]]
).@Foo(Bar())
)const x = [1];
).case Foo(2):...
).There are two other locations where the language requires constant expressions, but which are not automatically made constant (for various reasons):
const
constructors1 is not made const because we want to keep the option of making those expressions not need to be const in the future. 2 is because it's a non-local constraint - there is nothing around the expression that signifies that it must be const, so it's too easy to, e.g., remove the
const
from the constructor without noticing that it changes the behavior of the field initializer.