3 ms·
> Less readable code Maybe it is because we are used to our own paradigms, but the following is no less readable to me because of inference. And these are the
by pwaivers 9y ago
> Less readable code
Maybe it is because we are used to our own paradigms, but the following is no less readable to me because of inference. And these are the 95% of cases.
var index = 0;
var name = "pwaivers";
var names = new List<string>();
var nameMap = new List<string, Dictionary<int, Address>>();
> more bugs
I have never seen a bug arise because of type inference. Do you have an example?
> unnecessary burden on the compiler
The compiler does a lot of work and this would probably be insignificant to add to it. However, I am totally open to learning more about this.
- meandmycode 9y agoYea, I remember the same was said when C# was introducing var, it's a valid concern but in reality it really isn't
- douche 9y agoThe only people I've seen complain much about this were converted VB devs, who mistakenly thought it was shorthand for the godawful VB Variant type, with all of its unintuitive type coercion rules that make JavaScript seem sane.
- kentosi 9y agoThe examples you've given have direct values. Try: var index = getIndexFromSomewhere(); var name = getHandleFromUser("peter", "waivers") The type isn't as clear anymore. *Edit: I'm absolutely a fan of the var syntax, having dabbled with scala. I'm just expressing what I think the original author's complaint is.
- coldtea 9y ago>The type isn't as clear anymore. It doesn't have to be, as the compiler (and linter) will inform of any misuse of the type later on. And any editor worth its salt could even annotate the type right there.
- mikepurvis 9y agoIsn't Java generally considered to be unusable without a decent IDE anyway? I feel like if you need to know what the return type is, the editor should be able to tell you that in these cases.
- pwaivers 9y agoa) You can optionally include the type if you want. I do this in some rare circumstances where it does create more readable code. string name = getHandleFromUser("peter", "waivers") b) It is usually not necessary to know what the type is while reading code, and if you need to know you can just hover over the variable.
- thelazydogsback 9y agoI think the code is much more readable and less annoying with inference. And as for your examples, you don't need to know the types - the compiler will complain if you try and use them inappropriately whether the type was explicit or not. But the issue you have glossed over is that sometimes there is no nominal type - there is only an anonymous type, as for example returned by a LINQ query using new{}, or via monad-style combinators where you really don't want to see the type for fear of your eyes bleeding.
- btschaegg 9y ago> I think the code is much more readable and less annoying with inference. I concur. I've been dabbling with Java a bit again (mainly because of a hobby project in order to learn Clojure) after a pause of multiple years. It boggles my mind that compiler inference didn't make it into the language yet. Everytime I have to declare a totally obvious type, I cringe.