On 27.08.2017 04:41, MG wrote:
[...]
Flow typing is cool, and I would gather much harder to implement than a
"var" keyword (btw, I actually just used the name used by C#, even
though picking a different name might be a better choice, to avoid
confusion with e.g. Javascript).
flow typing is much harder to implement, yes, but existing (with bugs of
course)
I would however argue that in the majority of cases one will not want to
assign an integer value to a "String variable", but will want to keep
the type assigned at declaration time, so a var keyword to me is an
orthogonal feature to flow typing.
that is of course an argument I acknowledge
I should mention that if you do
Integer i = 1
i = "2"
you will still get a compilation error if type checking is enable, even
with flow typing. The declaration type is like a minimum requirement for
the type i can have during compilation. The only difference is, that the
compiler can select a more specific type for i to allow method calls on
the more specific type. Now if var and flow typing or orthogonal, then
this means in
Map foo(){}
var i = foo()
i = new MySpecialMap()
i.methodExistingOnlyOnMySpecialMap()
we use Map as minimum type for i, but after the assignment with
MySpecialMap, I would have a new specific type. And that means:
Map foo(){}
var i = new MySpecialMap()
i.methodExistingOnlyOnMySpecialMap()
i = foo()
would not compile.
Does this make sense for you?
bye Jochen