this post was submitted on 15 Jul 2023
1242 points (100.0% liked)

Programmer Humor

19171 readers
1345 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] moosh@lemmy.world 12 points 1 year ago (23 children)

Is this a good thing I’m looking at or a bad thing? I don’t get it but then again, I’m not a programmer.

[–] 1stTime4MeInMCU@mander.xyz 14 points 1 year ago (18 children)

The joke is Java is verbose. It takes many characters to accomplish simple routines. Depending on your view that could either be good or bad for reading the code later.

[–] Anomandaris@kbin.social 17 points 1 year ago* (last edited 1 year ago) (16 children)

Sure, but most of the lines in the screenshot break down to:

object1.setA(object2.getX().getY().getZ().getI().getJ().getK().getE().getF(i).getG().toString())

Aside from creating a method inside the class (which you should probably do here in Java too) how would another language do this in a cleaner way?

[–] Blackthorn@programming.dev 4 points 1 year ago (1 children)

Well I guess the point is that you shouldn't need all these method calls to achieve simple goals. Most of those "getF" are calls to some SystemFactory to get a GenericObjectFactory and so on and so forth.

[–] Anomandaris@kbin.social 4 points 1 year ago (1 children)

This just tells me you don't use Java. Factory classes are just used to create objects in a standardized way, but this code isn't creating anything, it's just getting nested fields from already instantiated objects.

[–] squaresinger@feddit.de 5 points 1 year ago (2 children)

Thos code is obviously nonsense to show the issue.

But other languages would simplify stuff. For example, some languages call getters implicitly, so .getField() becomes .field. Same with list indexing, which could be done with operator overloading, so x.get(i) becomes x[i].

In this situation that would be able to reduce the character count a fair bit.

[–] Anomandaris@kbin.social 2 points 1 year ago (1 children)

But that's functionally no different than what's already there...

The reason the lines are so long isn't because of anything Java related, it's because of the field names themselves.

[–] squaresinger@feddit.de 1 points 1 year ago

Your post doesn't seem to answer to anything I said in my post. Did you answer to the wrong post?

[–] biddy@feddit.nl 2 points 1 year ago (1 children)

The new convention in modern Java is to use .field() instead of .getField().

What you're complaining about isn't Java, it's object oriented programming, which Java basically forces on you. Verbosity is a flaw of OOP.

[–] squaresinger@feddit.de 1 points 1 year ago (1 children)

Compare:

x.field[5]

with

x.getField().get(5)

Both are exactly the same level of OOP, but the Java version is roughly twice as long. Add operator overloading to the mix and it becomes much worse:

x.getField().get(5).multiply(6).add(3)

vs

x.field[5] * 6 + 3

All this has nothing to do with OOP, but with syntactic sugar that is applied.

[–] biddy@feddit.nl 1 points 1 year ago (1 children)

As I said, the convention is now x.field() not x.getField()

What language are you comparing against here? x.field[5] is valid Java if field is a public array, but that's not OOP, at least not in a pure sense.

[–] squaresinger@feddit.de 1 points 1 year ago* (last edited 1 year ago)

It's not valid Java for e.g. Lists, Maps, Strings or any programmer-defined classes.

Same with operator overloading.

myVectorA + myVectorB is not valid Java, but it is valid OOP in e.g. Python or C++. And this kind of syntactic sugar reduces verbosity enourmously, while still being OOP.

If you have ever worked in e.g. Python, Groovie or Kotlin you notice quickly how non-verbose OOP can be.

It seriously is just Java.

And Javas insistance on having you wrap non-OOP things in fake OOP constructs (e.g. static methods, which are just functions in modules, but you have to uselessly abuse classes as modules) isn't helping either.

load more comments (14 replies)
load more comments (15 replies)
load more comments (19 replies)