効果的なJava


この章では、多くの開発者が自分自身を一度または別の、それはホイールを再発明されて落下を見つける問題に飛び込む.開発者として私たちはしばしば他の誰かのコードを使う方法を学ぶのではなく、何かの詳細に入りたいと思います.これは、このスタンスを取ることによって、我々はしばしば自分自身をdisdistingしている.
例を見てみましょう.次のコードを考えてみましょう.このコードの仕事は与えられた限界まで乱数を選ぶことです.
static Random rnd = new Random();

static int random(int upperLimit) {
  return Math.abs(rnd.nextInt()) % n;
}
一見、このコードは合理的に見えるかもしれません、それは仕事をして、簡潔な方法でそうです.いくらかの速いテストの後でさえ、それは仕事をするようです.すぐに明らかでないのは、このコードにはいくつかの問題があります.

  • 値の分布は等しくない.この方法がわかるかどうかはn は2の累乗であるが、2進法と数論により分布は等しくない.
  • まれにrnd.nextInt() リターンInteger.MIN_VALUE ) コードは、呼び出しによって値を肯定的にしようとしますMath.abs この特定の場合のどちらがまだ戻るでしょうかInteger.MIN_VALUE . これは、コードが準備されない可能性がある負の数に戻ることができます.これは非常にテストするのも難しいでしょう.
  • では、どのようにこれらの問題を解決するのですか?簡単に次のようにします.Random.nextInt(int) ? おそらく、あなたがこれを探していた面白い答えでない間、ほとんど常にケースです.Javaの組み込みライブラリ関数は、無数のアプリケーションで使用されている専門家によって書かれており、よく精査されています.これはあなたのコーディングスキルに対するどんな侮辱でもありません、しかし、単に各々のケースで開発されているソフトウェアの種類の事実.あなたはこれからカップルの恩恵を受ける.
  • あなたも、どのようにタスクを達成するには、単に関数を呼び出すと移動を考える必要はありません.
  • これらの機能のパフォーマンスは、あなた自身より優れているでしょう.あなたの特定のユースケースのためのより多くのPerformant機能を書くことができた間、あなたが彼らの戦いテストされたバージョンがより低いより速い一般的な解決策を考え出す確率は、あります.
  • また、アップグレードを取る無料の改善から恩恵を受ける.何もしなくても、これらの利点を見ることができます.
  • では、なぜ誰かがこれらの組み込み関数を使用しないのでしょうか?おそらく、私が考えるこの最も一般的な理由は、親しみの欠如です.JavaのAPIサービスがかなり大きいことは疑いありません.誰もが効果的にすべてのAPI空間に自分の脳でフィットできると思うのは愚かなことでしょう.そこには、あなたを助けるためのいくつかのプロセスがあります.
  • いくつかのコアパッケージに親しみやすくなるjava.lang , java.util , java.io , java.streams , など
  • 各Javaリリースでリリースノートを消費するには時間がかかる.Javaの新しいクイックリリースサイクルでは、これらのリリースノートを消費する方がずっと簡単になります.
  • うまくいけば言うことなく行くだけでなく、自分のバージョンを発明する前に、問題の解決策のためのインターネットを検索します.これはしばしば組み込み関数との親しみを得るのに十分なことができます.
  • Java言語の大量の組み込み関数でさえ、まだコア言語で実装されないことがあります.それでも、あなたの問題を解決するために活用することができますそこにいくつかの偉大な汎用ライブラリがあります.ライブラリ:Guava , Apache Commons , などの組み込み機能のすべての利点を得ることはありません.
    それはめったに正しい解決策ではないから、ソリューションを実装するのが楽しいことができます.ユニークな感じをしない機能を実装する前に、コアのライブラリだけでなく、既存の、Vettedソリューションを見つけるために迅速なインターネット検索を見て検討してください.