Operatorenüberladung ja/nein?



  • Siehe: Paar allgemeine Fragen zu Java 🙂

    Gerard schrieb:

    << und >> für streams

    Das hat sich vielleicht in C++ eingebürgert und das will ich auch gar nicht als schlecht darstellen, aber in anderen Sprachen gibt es einfach eine andere Streaming API. Nur weil es in C++ gängige Praxis ist, heißt das nicht, dass man das als Argument für Operatorenüberladung anführen kann.

    Gerard schrieb:

    == != für alles mögliche

    Auch bei diesem Argument gehst du wieder von C++ als "Referenzmodell" für Operatorenüberladung aus. In Java gibt es nunmal einen Unterschied zwischen Identität und Gleichheit, da wäre eine Überladung eher kontraproduktiv.

    Gerard schrieb:

    + += für string-änliche klassen

    Mir fallen eigentlich relativ wenige Beispiele für string-ähnliche Klassen ein, höchstens StringBuffer und StringBuilder, bzw. analoge Klassen in anderen Sprachen. In diesem Fall kann ich auch mit einer append Methode, die sich wiederholt aufrufen lässt ganz gut leben.

    Gerard schrieb:

    = für schnelle copy construktoren

    Den = Operator in Java überladen zu können, wäre mehr als nur ein Verbrechen ..

    Zusammenfassend möchte ich noch erwähnen, dass ich deine Argumente für richtig und gültig ansehe, wenn man von C++ ausgeht. Sie lassen sich aber nicht zwangsweise auf andere Sprachen umlegen. In C++ finde ich Operatorenüberladung durchaus angebracht, wenn es auch besser gemacht hätte werden können (siehe C#), aber z.B: in Java (und in C# eigentlich auch) absolut nicht.

    Ich denke es sollte durchaus ersichtlich sein, dass ich keinen Flamewar führen oder Trolle anlocken will, sondern eben lediglich nur diskutieren.



  • Im Grunde hat der unreg ja Recht.
    Durch Operatoüberladung kann man sehr viel Misst bauen.
    ZB bei == und != muss man dann immer aufpassen, ob jetzt der "normale" == != Operator benutzt wird oder ob aufeinmal equals() aufgerufen wird.

    Operatorüberladung hat eigentlich nur bei mathematischen Klassen einen echten Pluspunkt. Man erspart sich die Methodennamen und gewinnt so einiges an Übersichtlichkeit.



  • Durch Operatoüberladung kann man sehr viel Misst bauen.

    Das schlimmste Beispiel für einen Missbrauch von Operatoren finde ich, ist ein Event in C# zu abonnieren.



  • Operatorenüberladung is gut und sinnvoll.

    Nur weil es in Java nicht möglich ist, sind Java progger dagegen. Das ist die realität.



  • sdfdsf schrieb:

    Operatorenüberladung is gut und sinnvoll.

    Nur weil es in Java nicht möglich ist, sind Java progger dagegen. Das ist die realität.

    Es gibt für Java Präprozessoren, die einem Operatorüberladung ermöglichen. Die werden aber kaum genutzt. Grund: Das interessiert einfach fast keinen.



  • Gregor schrieb:

    Es gibt für Java Präprozessoren, die einem Operatorüberladung ermöglichen. Die werden aber kaum genutzt. Grund: Das interessiert einfach fast keinen.

    Das sagt aber mehr ueber Praeprozessoren als ueber Operatorueberladung aus.



  • qwerty` schrieb:

    Gerard schrieb:

    == != für alles mögliche

    Auch bei diesem Argument gehst du wieder von C++ als "Referenzmodell" für Operatorenüberladung aus. In Java gibt es nunmal einen Unterschied zwischen Identität und Gleichheit, da wäre eine Überladung eher kontraproduktiv.

    Suuuuuuuuuper! In Java gibt es halt keine Pointer 🙄



  • Java geht halt eine klare Linie und realisiert die gleiche Semantik objektorientiert mit Methoden und Interfaces. Operatoren wirken ausschließlich auf primitive Datentypen, alles weitere sind Objekte und die werden auch so behandelt. Ich stimme DEvent aber vollkommen zu, bei mathematischen Klassen ist so eine Operatorüberladung hinsichtlich der Übersichtlichkeit schon praktisch.



  • byto schrieb:

    ...bei mathematischen Klassen ist so eine Operatorüberladung hinsichtlich der Übersichtlichkeit schon praktisch.

    Und bei Iteratoren die Operatoren ++, */-> und &, damit sie sich wie Zeiger "anfühlen" und man damit Arithmetik machen kann.



  • qwerty` schrieb:

    Gerard schrieb:

    == != für alles mögliche

    Auch bei diesem Argument gehst du wieder von C++ als "Referenzmodell" für Operatorenüberladung aus. In Java gibt es nunmal einen Unterschied zwischen Identität und Gleichheit, da wäre eine Überladung eher kontraproduktiv.

    Ich greife das mal exemplarisch heraus. Die Argumentation geht aber bei einigen späteren Argumenten analog.
    [/quote]

    Auch in C++ gibt es einen Unterschied zwischen Identität und Gleichheit. Wenn ich die Pointer vergleiche, dann Identität, wenn ich die Objekte vergleiche, dann die Gleicheit. Das Problem ist eher, daß es in Java nur Pointer gibt (Referenzen sind C++-Pointer mit dem Vorteil, daß sie nicht wild sein können), für die kann man Operatoren in C++ übrigens auch nicht überladen.

    In Java gibt es keine Ausdrücke, die als Wert ein Objekt liefern. Immer nur die Referenz auf das Objekt. Deshalb würde eine Operatorenüberladung die Semantik tatsächlich zu stark verwischen. Da in C++ das aber getrennt ist, kann man das da schön machen.



  • Jester schrieb:

    Auch in C++ gibt es einen Unterschied zwischen Identität und Gleichheit. Wenn ich die Pointer vergleiche, dann Identität, wenn ich die Objekte vergleiche, dann die Identität.

    🙄 🙄



  • Danke für den Hinweis auf den Tippfehler.



  • bitte bitte ^^


Log in to reply