4 ms·
have you worked with java or C#? both are where types sometimes become a burden. No, you cannot just do something like this: ``` return { data, message: "OK"
by fendy3002 2y ago
have you worked with java or C#? both are where types sometimes become a burden.
No, you cannot just do something like this:
```
return { data, message: "OK" };
```
you need to declare a class or struct that match the definition. There's mapper and builder everywhere. Adding / deleting 1 column from a datatype can force you to make changes in 5 places due to mapper / builder.
- qball 2y agoYes you can. C# has had anonymous types since language version 3.0, released nearly 20 years ago; everyone who has used .Select() at the end of a LINQ query has used this.
- seer 2y agoAs a matter of fact - no I haven’t. My experience with types is TypeScript, Elixir and a bit of Scala. I always try to have “clojure style” types where I don’t try to be too prescriptive - don’t lock things down if you don’t need to, just the minimum possible types to make sure the code I’m writing is correct, and nothing more - Rich Hicky’s talks on Clojure’s Spec was an eye opener. I have been told by some java devs though that it is a matter of style - while unconditional it is possible to write java code with much less boilerplate if one uses newer language features and actually tries to hold the cruft at bay. Is that true?
- fendy3002 2y agoidk, haven't use newer java or C# after 2014-ish, though I think I've read C# has support some dynamic typing, never explore that. Never touch Elixir and Scala too so cannot comment on that. TS though, the type declaration is amazing with it's union, optional and intersection type!
- behnamoh 2y ago> My experience with types is TypeScript, Elixir and a bit of Scala. Dude, Elixir only recently introduced some sort of a type system...
- ianleeclark 2y agoElixir has had dialyzer + type hints for years
- seer 2y agoWhile not part of the compiler, the dialyzer’s types are quite nice, even if sometimes it is a bit clunky - I’ve noticed that most of the time when I thought it was “wrong” it actually wasn’t and had picked up on some bug / misunderstanding in my code, though error messages could have been better
- AdieuToLogic 2y ago> have you worked with java or C#? both are where types sometimes become a burden. > No, you cannot just do something like this: > ``` return { data, message: "OK" }; ``` Yes, in Java you can: return new Object() { String message = "OK"; Object data = itsValue; }; There are many reasons to dislike Java and it is nowhere near my programming language of choice. The specific semantic deficiency you chose happens to be an invalid one.
- dasyatidprime 2y agoAnd how does the caller extract those fields?
- AdieuToLogic 2y ago> And how does the caller extract those fields? The same way one would when returning an anonymous map in JavaScript - via reflection and the assumption of what was returned. While JavaScript makes the use of reflection less burdensome, it has the same collaboration fragility as a Java version. Just with less ceremony.
- kmoser 2y agoThe flip side of this "burden" is that it prevents you from returning an arbitrary data structure that is not expected by the caller and may cause errors further down the call stack if you return the wrong type. The whole point of static typing in the first place is to eliminate this kind of footgun.
- fendy3002 2y agohave you tried typescript? the code above will make the function declaration become like this: function foo (): {data: MyCustomObject, message: string} so foo().data and foo().message is a valid object, while foo().bar will throw build error
- phito 2y agoYou can do that in C# with dynamic types. But realistically it's almost never used because it's kinda dirty. To each their own I guess, I've never felt burdened by types but I feel like I'm programming in the dark when using a non typed language.