3 ms·
>Certainly no less expressive than, say, Python or JavaScript. Java can't even have a free standing function without 6 lines of boilerplate minimum and 2 level
by reader_mode 5y ago
>Certainly no less expressive than, say, Python or JavaScript.
Java can't even have a free standing function without 6 lines of boilerplate minimum and 2 levels of indentation to start.
Nominal static typing with weak generics and no almost no compile time programming support - you end up mucking with reflection or code generation if you want to do anything metaprogramming related or non trivial higher order functions - JavaScript and Python just deal with it at runtime, and if you need to type it out - you can still generate types that convey to the user what the result will be (the underlying code doesn't have to be typed)
- lenkite 5y agoJava 8 has been there for 7 years now. You can have a free-standing function in a single one-liner expression. Function<String, String> fn = parameter -> parameter + " from lambda"; Using annotations and cglib, you can do all the meta-programming you want.
- reader_mode 5y agoAnd how do you expose that function globally ? Annotations and CGLib -> reflection nonsense and boilerplate - if you tried that and compare it to something like a dynamic language with open types (eg. JS/TS) you are just being dishonest if you're saying the two are anywhere close to comparable. I remember doing a node ORM extension where I just injected standard revision management primitives into the entity as a part of repository. That would take an insane ammount of work in Java in comparison to get the same API functionality (namely it was mostly transaparent to the consumer)
- lenkite 5y ago> And how do you expose that function globally ? Just like anything else. Put it in a package and just static import it from where-ever you need it. Umm, cglib https://github.com/cglib/cglib https://github.com/cglib/cglib is not reflection - its bytecode enhancement. You can inject, create types dynamically, modify types dynamically - all of it is possible. What you just stated is quite straightforward in Java actually and can be fully transparent to the consumer. It's by no means an "insane amount of work". Now, if you bring up hot language features - sum types, etc - I agree that Java falls behind. But the stuff you offered as criticisms, Java actually excels.