489 Stimmen

Warum bietet Java keine Operatorüberladung?

Wenn man von C++ zu Java wechselt, ist die offensichtliche unbeantwortete Frage, warum Java keine Operatorüberladung enthält.

Ist nicht Complex a, b, c; a = b + c; viel einfacher als Complex a, b, c; a = b.add(c); ?

Gibt es dafür einen bekannten Grund, stichhaltige Argumente für no das Überladen von Operatoren zuzulassen? Ist der Grund willkürlich oder aus Zeitmangel?

6 Stimmen

1 Stimmen

@zzzz, es fällt mir schwer, diesen Artikel zu lesen. Wurde er automatisch übersetzt, oder ist Englisch die zweite Sprache des Autors? Ich finde die Diskussion hier viel sauberer.

48 Stimmen

An die Leute, die dies als nicht konstruktiv abtun: Diese Frage hat einen der konstruktivsten Dialoge hervorgebracht, die ich bei SO gesehen habe. Vielleicht ist es ein besserer Kandidat für programmers.stackexchange.com aber es gibt Zeiten, in denen ich denke, dass SO übermäßig abweisend gegenüber breiteren Themen ist.

0voto

Scott Punkte 1087

Obwohl die Sprache Java das Überladen von Operatoren nicht direkt unterstützt, können Sie die Verteiltes Compiler-Plugin in jedem Java-Projekt zu aktivieren. Es unterstützt Java 8 - 17 (die aktuelle Java-Version) und wird in IntelliJ IDEA vollständig unterstützt.

0voto

Audrius Meškauskas Punkte 19811

Ich denke, dass die Entscheidungsträger komplexe Werte, Matrixalgebra, Mengenlehre und andere Fälle, in denen eine Überladung die Verwendung der Standardnotation ermöglichen würde, ohne alles in die Sprache zu integrieren, einfach vergessen haben. Wie auch immer, nur mathematisch orientierte Software profitiert wirklich von solchen Funktionen. Eine allgemeine Kundenanwendung braucht sie fast nie.

Die Argumente über die unnötige Verschleierung sind natürlich gültig, wenn ein Programmierer einen programmspezifischen Operator definiert, der stattdessen die Funktion sein könnte. Der Name der Funktion, wenn er deutlich sichtbar ist, gibt den Hinweis, dass sie es ist. Operator ist eine Funktion ohne den lesbaren Namen.

Java ist im Allgemeinen nach der Philosophie konzipiert, dass eine gewisse zusätzliche Ausführlichkeit nicht schlecht ist, da sie den Code lesbarer macht. Konstrukte, die das Gleiche bewirken, nur dass weniger Code eingegeben werden muss, wurden in der Vergangenheit als "Syntaxzucker" bezeichnet. Dies unterscheidet sich stark von der Python-Philosophie, wo kürzerer Code fast immer als besser angesehen wird, auch wenn er weniger Kontext für den zweiten Leser bietet.

0 Stimmen

Ich stimme zu, dass etwas mehr Ausführlichkeit nicht schlecht ist. wenn es macht den Code besser lesbar. Ich stimme jedoch nicht zu, dass mehr Ausführlichkeit den Code immer besser lesbar macht. Ich bin auch nicht der Meinung, dass weniger Wortreichtum den Code immer lesbarer macht (z. B. Python). Ich denke, dass Lesbarkeit und Ausführlichkeit voneinander unabhängig sind.

-1voto

saditya Punkte 11

Java erlaubt keine Überladung von Operatoren, weil sein Schöpfer keine Funktionalität hinzugefügt hat, um verschiedene Bedeutungen mit demselben Operator zu verbinden. Sie wollten die Dinge nur einfach halten indem man einfach die Bedeutung eines Operators in der gesamten Programmiersprache einheitlich beibehält.

Das Überladen der Operatoren macht die Dinge unübersichtlich und schafft eine steile Lernkurve für neue Programmierer. Also haben sie einfach Operatorüberladung aus dem Lehrplan.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X