Teď jsem to celé pochopil, naše nedorozumění spočívalo v tom, že já jsem pojem programátor chápal v nějakém smyslu a Ty v jiném (programátor = spokojený javista). Tudíž nemá smysl se o to dál hádat, neb coby člověk, kterého živí hlavně Python (a předtím C++ a C), nemůžu účinně argumentovat.
Ne, zase jste to nepochopil. Por mne programátor je někdo, kdo ovládá alespoň základy jazyka, ve kterém chce programovat.
Akorát bazíruju na tom, že s tím Pythonem jsi nadále mimo.
Bazírovat na tom můžete, smutné je, že nemáte pravdu.
class Integer:
def __init__(self, value):
self.value = value
a = Integer(1024)
b = Integer(1024)
print(a == b) #False
Co jsem udělal? Vzal jsem ten původní kód, který rozpoutal celou debatu. Kód, který se údajně v Javě chová úplně nemožně. Napsal jsem to samé v Pythonu, který se prý chová úplně jinak. A výsledek je co? Výsledek je naprosto stejný. Python se chová přesně tak, jako se chová Java, dělá přesně to, co kritizujete.
Jistě budete argumentovat tím, že v Pythonu to můžete dál vylepšovat. Můžete do třídy dopsat přetížení operátoru:
def __eq__(self, other):
return self.value == other.value
Ano, můžete. V Javě to také můžete dál upravovat, můžete přetížit metodu
equals() (resp. ve třídě
java.lang.Integer už ta metoda dávno přetížená je).
Předpokládám, že budete argumentovat i tím, že žádný soudný Python programátor by nenapsal třídu
Integer bez toho přetíženého operátoru. Jenže stejně tak by žádný soudný programátor v Javě neporovnával objekty pomocí
==, když chce porovnávat hodnoty.
Takže se zase dostáváme zpět k tomu, že jediný rozdíl mezi Javou a Pythonem v tomto případě je ten, že Java drží minimum funkcí samotného jazyka a proto nedovoluje přetěžovat operátory. Každý Java programátor to ví, takže ho ani nenapadne porovnávat objekty pomocí
== a bude shánět metodu, která porovnání dělá. Zároveň každý Java programátor ví, že když dává smysl u jeho třídy zjišťovat ekvivalenci s jiným objektem, musí přetížit metodu
equals(). Python naproti tomu chce mít bohatší jazyk, takže umožňuje přetěžovat operátory – a každý Python programátor ví, že když dává smysl porovnávat na ekvivalenci jeho třídu, musí přetížit metodu
__eq__.
Jsou to dva různé přístupy, každý má svá pro a proti – a přístup, který vyhovuje vám osobně, proto ještě není obecně lepší.
akorát dodám, že JavaScriptem bych se fakt neoháněl, protože to je bastl z definice (už jenom ta jejich vnitřní reprezentace čísel - tfuj!).
To je právě ten problém, že vy se na to pořád díváte tak, že co vyhovuje vám, musí vyhovovat všem, a co vám nevyhovuje, nemůže vyhovovat nikomu. JavaScript vznikla za nějakým účelem, a pro daný účel je vnitřní reprezentace čísel úplně nezajímavá.