|
|
|
|
|
by rbehrends
3226 days ago
|
|
> Dart 1.0 has optional typing, but Dart 2.0 will be statically typed (with type inference though). Not quite; it's more that compile time typing is getting cleaned up. You can still omit types, which will then either be inferred or set to `dynamic`. The following is valid strong mode Dart: f(n) {
if (n <= 1)
return 1;
else
return n * f(n - 1);
}
The following will no longer work: int x = "foo";
In short, you can still omit types. It's just that if you declare them, they are enforced [1]. Dart will also infer them if possible, i.e. the following is illegal: var x = 1;
x = "foo";
Here, x is inferred to be `int`, which makes the assignment of a string illegal. However, the following works: var x = true ? 0 : [];
x = "foo";
Here, the type of `x` cannot be inferred, so it becomes `dynamic`, and therefore the assignment of "foo" becomes valid.You can turn this off with --no-implicit-dynamic; with this option, all types must either be declared or have to be inferable. [1] Sometimes not at compile time, though: Dart allows implicit downcasts and covariant generics at compile time and will insert runtime checks to catch those situations. |
|