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:
- an erster Stelle gedacht
- erwünscht
- entworfen
- angegebenen
- implementiert
- geprüft
- dokumentiert
- Versand an Kunden
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 :
Der Elvis-Operator wurde seit 7 für jede Java-Version vorgeschlagen und jedes Mal abgelehnt. Verschiedene Sprachen fallen auf verschiedene Punkte entlang des Spektrums von "rein" bis "pragmatisch", und Sprachen, die den Elvis-Operator implementieren, tendieren dazu, weiter am pragmatischen Ende des Spektrums zu sein als Java.
Wenn Sie ein Team von mehr als 15-jährigen Java-Profis haben, die ein hochverteiltes, gleichzeitig ablaufendes Backend-Verarbeitungssystem schreiben, dann möchten Sie wahrscheinlich ein hohes Maß an architektonischer Genauigkeit.
Wenn Sie jedoch ein Junior- bis Mid-Level-Team haben, von dem die Hälfte von Visual Basic migriert ist, und eine ASP.NET-Webanwendung schreiben, die meistens nur CRUD-Operationen ausführt, ist es möglicherweise übertrieben, eine Reihe zu entwerfen von AbstractFactoryFactory
Klassen, um die Tatsache zu abstrahieren, dass Sie keine Kontrolle darüber haben, welche Spalten in der beschissenen Legacy-Datenbank, die Sie verwenden müssen, nullwertfähig sind.
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.