メソッド名は動詞で始めなくても良い

Sinatraのメモアプリのレビューの中でhelperに定義してメソッド名に対してアドバイスを頂きました。 「メソッド名は動詞で始める」と思い込んでいましたが、間違いだったと気付くことができたので良かったです。

結論

次のような処理内容のメソッド名は動詞で始める必要はない。

  • 毎回同じ値を返すだけのプロパティ系のメソッド: 例)full_name
  • 真偽値を返すだけのメソッド(Rubyの場合): 例)action_required?
  • データ型を変換するだけのメソッド: 例)to_date
  • 検証用のメソッド(英文そのものをメソッド名にする): 例)member_count_should_not_exceed

今回の場合

helperにメモのタイトルが未入力の場合にUntitled が設定されるようなメソッドを定義しました。

def set_title
  params[:title].empty? ? 'Untitled' : params[:title]
end

PR内で以下のようなコメントをいただきました。

setはしていない気がするのでtitle_with_default_text とかですかね?

確かにsetしている訳ではないし、「メソッド名は動詞で始める」と決めつけてメソッド名を考えたような記憶がありました。 コメント中のtitle_with_default_text というメソッド名を見た際に「動詞で始まっていないけど大丈夫なのかな?」という疑問が浮かびましたが、伊藤さんの記事にあるように「毎回同じ値を返すだけのプロパティ系のメソッド」に該当するので動詞で始める必要はないということに気付くことができました。

盲目的に「メソッドは必ず動詞、メソッドは必ず動詞……」と思い込まないように注意してください。

まさにその通りだなと思いました。反省。

まとめ

Rubyのプラクティス後、久しぶりに命名で指摘されましたがRailsのプラクティスに入った今のタイミングで指摘してもらって良かったと思います。 命名は難しいですが、ちょっとでも分かりやすい命名ができるように語彙力を付けていきたいです。

参照

モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう - Qiita