Jの衝動書き日記

さらりーまんSEの日記でございます。

Effective Javaの読書メモ 第7章 メソッド

 今回はメソッドに関することのメモ。今までに読んできたリーダブルコードやリファクタリングの内容と第7章の内容はかぶるものが多かった。それだけ重要だということだろう。メモではかぶってないものをあげておく。

項目40 メソッドシグニチャを注意深く設計する

 メソッド名を選ぶポイント

  • 同じパッケージ内の他の名前と矛盾がない名前を選ぶ
  • 標準命名規約
    • パッケージ名
      • 階層的であるべき
      • 組織外で使用する場合、トップレベルのドメインを最初にしたその組織のインターネットドメイン名を使用しべき
      • 八文字以下にすべき
      • 要素は一単語
    • 型パラメータ名
      • 通常は一文字
      • 任意の型:T
      • コレクションの要素型:E
      • マップのキーと値:KとV
      • 例外:X
      • 一連の任意の型:T,U,VやT1,T2,T3
      • 下手に名前を付けない(クラスがあるのと勘違いする※体験済)
    • メソッド
      • 何からの処理を行うメソッドは一般に動詞あるいは動詞句で命名
      • オブジェクトの型を変換し、別の無関係のオブジェクトを返す場合:toType(toStringなど)
      • レシーバオブジェクトの型とは異なる型を持つViewを返す場合:asType(asListなど)
      • メソッドが呼び出されたオブジェクトと同じ値を持つ基本データを返す場合:typeValue(intValueなど)
  • 理解可能で同じパッケージ内の他の名前と矛盾のない名前をまずは選ぶ
  • 存在する広範囲のコンセンサスと矛盾がない名前を選ぶ
  • 便利なメソッドを提供しすぎないようにする
    • 頻繁に使用される場合のみ提供する
  • 長いパラメータリストは避ける
    • 4個以下が目標
    • 同じ型のパラメータが何個も続くのは特に有害
    • パラメータを短くするには?
      • メソッドを分けて必要なものだけを渡す
      • パラメータの集まりを保持するヘルパークラスを作成する→引数オブジェクト
      • ビルダーパターンをオブジェクトの生成からメソッドの呼び出しに適用する
  • パラメータ型に関してはクラスよりもインタフェースを選ぶ
  • booleanパラメータよりも2つの要素を持つenum型を使用する

項目41 オーバロードを注意して使用する

  • オーバーロードとオーバライドの違い
    • オーバロードされたメソッドの選択は静的(コンパイル時)
    • あるクラスの親クラスと子クラスをそれぞれ別々に引数にとる同一名のメソッドがある場合、呼び出されるのは常に親クラスを引数にしている方になる
    • オーバライドされたメソッドの選択は動的
  • 心がけること
    • 同じパラメータ数となるようなオーバロードメソッドを作らない
    • Intergerとintなど自動ボクシング対象となる変数をそれぞれ別々にパラメータとして受け取るようなオーバロードメソッドを作らない

参考文献

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)