2012年9月9日日曜日

メソッド名の動詞

先のポストに続いての話で、私は複雑なモデルのprivateメソッドを作るにあたって、メソッド名には動詞を必ず記載することにしている。java はおそらくそういう慣習があり rubyはそうではないが、複雑なモデルにおいては動詞を省略することはしない(じゃないと後で混乱を招きやすい)。 

そしてその動詞の使い分けにもそれなりに気を使う。どこかからデータを取ってきて返す、という場合 何も考えないと get_emails としてしまいがちだが、これだとその裏でどのような処理が走るのか見えない。get というとすでに取得済みの変数への参照が帰るだけ、というイメージがある。これが実は複雑な計算をはらんだ結果かえって来るようだと知らずに多用してしまうとパフォーマンス上の問題を容易に引き起こす。裏でどのような処理が行われるのか、ある程度見えるようなメソッド名をつけるようにしている。

 具体的には以下のような動詞を使い分けする。


  • get (すでにメモリ中に存在する変数への参照を返す)
  • read (ファイルから読む)
  • load (DBから取得する)
  • fetch (外部サーバにとりにいく)
  • calculate (deterministic な方法で計算する)
  • detect (複数の候補の中から計算して選択する)
  • build (新しく作る)
  • create(新しく作って保存する)
  • search (条件を使って多数の候補から絞り込む)
これは private メソッドを作るときの指針であって、public なメソッドの場合の判断基準はほかにもある。public なメソッドは誤解の生じない限り簡潔にしたほうがよいし、そのモデルが使われるコンテキストから動詞は省略できることが多い。使う側がloadかgetか知っているというのも仮定として成り立たないことも多い。load か get かで使う側が迷うのもおかしな話。private なメソッドは似たようなメソッドが作られることもあり、多少冗長でも誤解のないようにしたい。

0 件のコメント:

コメントを投稿