Eine der vorgeschlagenen Funktionen für Java 7s "Project Coin" war der "Elvis-Operator". In einem Bericht einer JavaOne-Präsentation 2009 zu Project Coin wurde dies als solches beschrieben:
Eine der "kleinen Funktionen", die in dieser Präsentation behandelt werden, ist der sogenannte "Elvis-Operator", eine präzisere Version des ternären Operators. Bei der Verwendung von traditionellem Java fehlen mir einige Funktionen von Groovy, und dies wäre ein Operator, den ich in beiden Sprachen verwenden könnte, wenn er hinzugefügt würde. Der Operator "Elvis" ist praktisch, um einen Standardwert anzugeben, der verwendet werden kann, wenn der ausgewertete Ausdruck null ist. Wie bei Groovys sicherem Navigationsoperator können Sie auf präzise Weise festlegen, wie unnötige Nullen vermieden werden sollen. Ich habe zuvor darüber gebloggt, wie ich die NullPointerException vermeiden möchte.
Während andere Aspekte von Project Coin letztendlich implementiert wurden, war dies nicht der Fall. Warum wurde der Elvis-Betreiber letztendlich abgelehnt, obwohl er auf JavaOne als wahrscheinlicher Kandidat für die Aufnahme vorgestellt wurde?
Um es klar auszudrücken, frage ich speziell nach diesem Operator und dem Grund, warum er als Teil von Java 7s "Project Coin" abgelehnt wurde, da er damals ernsthaft in Betracht gezogen wurde. Ich vermute, dass es Mailinglisten oder ähnliches gibt, in denen die Gründe für die Ablehnung besprochen wurden, aber ich konnte nichts finden. Wenn es allgemeinere Informationen darüber gibt, warum es in keiner Java-Version enthalten ist, ist dies akzeptabel, aber nicht bevorzugt.
quelle
?.
als Beispiel ) ist es sicherlich zu weit gefasst als eine gewöhnliche Frage wäre, aber Sie würden eine gute Antwort haben.Antworten:
Die beste Person, um diese Frage zu stellen, ist natürlich jemand im JCP-Exekutivkomitee, nicht wir. Das hindert mich jedoch nicht daran, mich auf müßige Spekulationen einzulassen.
Die Antwort auf jede Frage "Warum wurde diese Funktion nicht implementiert?" Lautet immer, dass der Nutzen die Kosten nicht überstieg.
Eric Lippert (ehemaliges Mitglied des C # -Teams) sagt, dass ein Produkt eine Funktion haben muss, damit es eine Funktion hat:
Mit anderen Worten, es müssen viele wichtige Dinge geschehen, bevor eine neue Programmiersprachenfunktion realisiert werden kann. Die Kosten sind höher als Sie denken.
Im C # -Team beginnt jede neue Funktionsanforderung mit einer Punktzahl von minus 100. Anschließend bewertet das Team die Vorteile und Kosten, addiert Punkte für die Vorteile und subtrahiert Punkte für die Kosten. Wenn die Punktzahl nicht über Null liegt, wird die vorgeschlagene Funktion zusammenfassend verworfen. Mit anderen Worten, die neue Funktion muss einen überzeugenden Vorteil bieten.
Aber der Elvis-Operator hat es in C # geschafft. Warum hat es es nicht nach Java geschafft?
Trotz ihrer offensichtlichen Ähnlichkeiten haben Java und C # signifikant unterschiedliche Sprachphilosophien. Dies wird durch die Tatsache belegt, dass Java-Unternehmensprogramme in der Regel große strukturelle Architekturkollektionen sind. Kürze und Ausdruckskraft der Sprache werden auf dem Altar der Zeremonie und der einfachen Codierung geopfert. Bekannte Software-Architekturmuster, die jeder im Entwicklungsteam erkennen kann, werden gegenüber Sprachkomfort bevorzugt.
Betrachten Sie diesen Reddit-Austausch :
Diese tiefgreifenden Unterschiede in der Sprachphilosophie erstrecken sich nicht nur auf die Art und Weise, wie die Sprachen verwendet werden, sondern auch auf die Art und Weise, wie der Sprachentwurfsprozess selbst durchgeführt wird. C # ist eine wohlwollende Diktatorsprache . Um eine neue Funktion in C # zu integrieren, müssen Sie nur eine Person überzeugen: Anders Hejlsberg .
Java verfolgt einen konservativeren Ansatz. Um eine neue Funktion in Java zu integrieren, muss ein Konsortium großer Anbieter wie Oracle, IBM, HP, Fujitsu und Red Hat einen Konsens erzielen. Offensichtlich wird dieser Prozess langsamer sein und einen höheren Balken für neue Sprachfunktionen darstellen.
Die Frage "Warum wurde die x-Funktion nicht implementiert ..." enthält immer implizit die Worte "... wenn es offensichtlich eine so gute Idee ist?" Wie ich hier hinreichend demonstriert habe, ist die Wahl nie so einfach.
quelle