Re:Why is OOP still so widely spread?
by teekert on Wednesday September 02, 2020 @05:38PM
(#24358471)
As a Python programmer, all I see is heaps of very similar and the same words. It looks like mess, I'm sorry.
[ Parent
| on HN ]
Re:Why is OOP still so widely spread?
by jschwartzi on Wednesday September 02, 2020 @06:28PM
(#24358941)
That's because you're telling the compiler what the type of the variables is ahead of time so the compiler knows whether you're using the type correctly. As opposed to in Python constructing an object and adding functions to it one by one at run-time, and only checking that the type is used correctly when the type is used.
There's a trade-off being made between conciseness on one hand and fast feedback on the other. Python leans toward conciseness and Java/C++ lean toward fast feedback. In Python you can express complicated ideas quickly, but you can't necessarily express correct ideas quickly. Whereas in C++ you can express correct ideas quickly but you can't express complicated ideas quickly.
If it's costly for you to correct defects in deployed software then you might prefer the fast feedback of C++ or Java rather than the flexibility of Python.
Re:Why is OOP still so widely spread?
by dheera on Wednesday September 02, 2020 @08:02PM
(#24359583)
That part is fine, but Java idioms seem to routinely think that
String string = new String("string");
isn't enough repetition, and so they take it a step further: StringFactory mStringFactory = new StringFactory(StringFactory.FOO || StringFactory.BAR);
StringOptions stringOptions = new StringOptions();
try {
String string = mStringFactory.createString(StringFactory.STRING, "string", stringOptions);
} catch (java.lang.string.StringException e) {
runOnUIThread(
new Runnable() {
try {
// facepalm
I'm exaggerating ;) but as a Python programmer myself, this is what comes to my mind whenever someone says the word "Java" to me. Obviously not for strings, but for more advanced constructs (e.g. Bluetooth) I often do see this much repetition in Java code. It's almost like someone designed this language to prank engineers.
Re:Why is OOP still so widely spread?
by arethuza on Thursday September 03, 2020 @06:19AM
(#24362565)
That a reasonably parody of a lot of Java code - but I don't think it's really a property of Java the language but some odd principles that seem to be popular (or used to be popular) in the Java community.
BTW You missed:
public static final String STRING_STRING_CONSTANT = "string";
Re:Why is OOP still so widely spread?
by teekert on Thursday September 03, 2020 @04:23AM
(#24361904)
Thank this is a very nice answer and it makes sense to me. Indeed I once sat down to try Kotlin for a day. The amount of code I had to write to get a json from an api into a dict that I could address by key was baffling to me. In python it took met 2 imported modules and then 2 lines (something like
some_dict = module.scrape_api()
value_I_want = some_dict['my_value']
I gave up after a day, when I just wrote down exactly what I expected to pull down and what types were in the values and keys. I can understand it helps you prevent errors but man is there a learning curve... BTW, I could write those checks in Python as well, but they are optional.
Re:Why is OOP still so widely spread?
by garethrowlands on Thursday September 03, 2020 @09:13AM
(#24363690)
> I could write those checks in Python as well, but they are optional
You're probably going to need to check `value_I_want` though. So maybe the checks aren't quite as optional as they look.
Checks in Python are pretty concise. If you just want to have a default value if the key my_value doesn't exist, this is all you need:
value_I_want = some_dict.get('my_value', default_value)
If you want a more strict check including type checking: value_I_want = some_dict.get('my_value')
if type(value_I_want) is not str:
do_something()
In Java the real problem is nested JSON objects -- it's a real PITA to read those. You can't do something like this (Python): value = some_dict.get("foo", {}).get("bar", {}).get("blah", default_value)I believe one can even do:
value_I_want = some_dict.get('my_value':str)
and value = some_dict["foo"]["bar"]["blah"]A Python background explains that, as y'all tend to worry less about memory usage and re-use. This can have its upsides, but it probably creates a bit of a blind spot here, because it's referencing the sort of thing one probably wouldn't do in python.