Hard work by INTERNET

ベンチャーで働くひとりぼっちWEB開発者が頑張るブログ

名前付け大全を読んだ

間違った名前のパターン

  • (1) 名前と実装が一致していない
    • 実装はdestroyしているのに名前はcreateしている
  • (2) 名前の意味が狭すぎる
    • 1のパターンが包括していますが
    • saveという名前なのに、実装ではキャッシュの削除をしている、など
  • (3) 名前の意味が広すぎる
    • saveRecordAndClearCacheという名前なのにキャッシュを削除していない
    • getPageというWEB上のファイルを取得する処理があるとします。getPageだとローカルファイルからなのか、データストアからなのかわかりません。HTTPが確定しているならdownloadPageにしましょう。

命名に関するヒント

  • メソッド名は動詞にするべきか
    • メソッドには「何らかの値を返すことが主目的のもの」「何らかの処理を行い副作用を起こすことが主目的のもの」に分けられるので、メソッドは動詞である必要はない
  • 必要を表現する時
    • 対象が動詞の時はshould
    • 対象が名詞の時はneed

ルフレビュー項目

  • 名前と実装はあっているか?
  • 名前で挙動をカバーできているか?
  • 曖昧な単語を選んでいないか?
    • info
      • 曖昧なデータ構造を指す時に多いので適切な名前をつけるべし
    • check
      • 実行後に何が起きるのかを予測できない。raiseするならraiseを、boolを返すならboolを名前で表現するべし
        • check_paidだったら、boolを返すならpaid?, 支払いが済んでいなくてエラー情報を追加するなら add_error_if_not_paid, 支払いが済んでいない時にエラーを投げるなら raise_if_not_paid
      • chekは言葉が不明瞭であることが問題の根本。結果が曖昧な言葉は避けよう
  • 重要かつ汎用的な単語を使っていないか?
    • group, system...
    • 使うならネームスペースをつけるべし
  • 改修によって現行の名前の意味が変わっていないか?
  • 一言で表現できないか?
    • previuos_value => predecessor
  • 情報量のない言葉を足していないか?
  • 無駄な言い換えをしていないか?
    • text = Article.find(params[:id]).body ではなく、bodyでいいじゃん
  • 対になった言葉を選んでいるか?
    • get, set
    • deep, shallow
    • head, tail
  • スペルミスをしていないか?
  • 過剰な省略をしていないか?
  • 単数形と複数形は間違っていないか?