Java= 7の「Project Coin」の提案された機能の1つは「Elvisオペレーター」でした。ProjectCoinの 2009 JavaOneプレゼンテーションのレポート は、次のように説明しています:
このプレゼンテーションで取り上げられている「小さな機能」の1つは、いわゆる「エルビス演算子」です。これは、3項演算子のより簡潔なバージョンです。従来のJavaを使用すると、Groovyの機能の一部が欠けていることに気づきました。これは、追加された場合、両方の言語で使用できる1つの演算子になります。 "Elvis"演算子は、評価された式がnullの場合に使用できるデフォルト値。Groovyの安全なナビゲーション演算子と同様に、これは不要なnullを回避する方法を指定する簡潔な方法です。NullPointerExceptionを回避する方法については、以前ブログで説明しました。
プロジェクトコインの他の側面は最終的に実装されましたが、これは実装されませんでした。含まれる可能性のある候補としてJavaOneで提示されたにもかかわらず、Elvisオペレーターが最終的に拒否されたのはなぜですか?
明確にするために、私はこの演算子と、Java 7の「プロジェクトコイン」の一部として拒否された理由について、当時真剣に検討されていたので、具体的に尋ねました。それを拒否する理由が議論されたメーリングリストなど。何も見つかりませんでした。Javaのどのバージョンにも含まれていない理由に関するより一般的な情報がある場合、それは許容されますが、好ましくありません。
当然、この質問をするのに最適な人は JCP実行委員会 の誰かであり、私たちではありません。しかし、それは私がいくつかのアイドル投機に従事することを妨げません。
すべての「この機能が実装されなかった理由」の質問に対する答えは常にです。これは、メリットがコストを超えないためです。
Eric Lippert (元C#チームのメンバー)は、製品に機能を持たせるには、その機能が次の条件を満たしている必要があると述べています。
言い換えれば、新しいプログラミング言語の機能を実現する前に、多くの重要なことを実行する必要があります。 コストはあなたが思っているよりも大きいです。
C#チームでは、すべての新しい機能リクエストはマイナス100のスコアで開始します。次に、チームはメリットとコストを評価し、メリットのポイントを追加し、コストのポイントを差し引きます。スコアがゼロを超えない場合、提案された機能は即座に破棄されます。つまり、新しい機能は、説得力のある利点を提供する必要があります。
しかし、Elvis OperatorがC#にしました。では、なぜJavaにならないのでしょうか。
それらの明らかな類似性にもかかわらず、JavaとC#の言語哲学は大きく異なります。これは、Javaエンタープライズという事実によって証明されますプログラムは、多くの場合、アーキテクチャの構造的コレクションが大きくなる傾向があります。儀式の祭壇とコーディングの容易さによって簡潔さと言語の表現力が犠牲になります。開発チームの全員が認識できる、よく知られたソフトウェアアーキテクチャパターンは、言語の利便性よりも優先されます。
検討してください このReddit交換 :
Elvis演算子はJavaのすべてのバージョンで7以来提案されており、毎回拒否されています。言語によって、「純粋」から「プラグマティック」までのさまざまな点で言語が異なります。 Elvisオペレーターの実装は、Javaよりも実用的な範囲の終わりに近づく傾向があります。
15年以上のチームがいる場合Javaプロが高度に分散され、並行性の高い何らかのバックエンド処理システムを作成しているプロであれば、おそらくかなり厳密なアーキテクチャが必要です。
ただし、ジュニアからミッドレベルのチームがあり、その半分がVisual Basicから移行していて、ほとんどがCRUD操作を実行するだけのASP.NET Webアプリを作成している場合は、多数を設計するのはやりすぎかもしれません。
AbstractFactoryFactory
クラスを使用して、使用する必要のある古いレガシーデータベースでnull可能な列を制御できないという事実を抽象化します。
言語哲学におけるこれらの深遠な違いは、言語が使用される方法だけでなく、言語設計プロセス自体が行われる方法にも及びます。 C#は 慈悲深い独裁者 言語です。C#に新しい機能を導入するには、実際に1人の人を説得するだけです。 Anders Hejlsberg 。
Javaはより保守的なアプローチを採用しています。新しい機能をJavaに導入するには、Oracle、IBM、HPなどの大規模ベンダーのコンソーシアムから合意を得る必要があります。 、富士通、Red Hat。明らかに、そのプロセスは遅くなり、新しい言語機能に対してより高い基準を提示します。
「なぜx機能が実装されなかったのか...」という質問には、常に「暗黙的に...良い考えだとしたら」という言葉が暗黙的に含まれています。ここで十分に説明したように、選択はそれほど単純ではありません。