はじめに
戻り値の型が boolean の関数について,「2値を返すのだから is を付けて命名しよう」と教わったことがあります.
私自身もこれまでその考え方に従って命名してきました.
しかし最近,関数名を考える中で「何でもかんでも is を付けると逆に読みにくくなるのではないか?」と感じるようになりました.
この記事ではboolean メソッドの命名について私が引っ掛かりを感じたポイントを整理したポエム記事です.
is が表す特性について
is は「状態・性質を表すときに使う動詞です.
そのため,以下のようにオブジェクトの状態や性質を表す関数名には違和感がありません.
isEmpty()isValid()isEnabled()
これらは「空であるか」「有効であるか」「有効化されているか」と自然に読めます.
一方で以下のように処理や動作を表す単語と is を組み合わせると違和感を覚えました.
isUserExists()isPermission()
is が状態を表す動詞であることを考えると,「存在するか」「権限があるか」といった意味を is で表現するのはやや不自然に感じます.
処理や動作を実行する関数でBooleanを使う場合
処理が実行できたかどうかを判別するために戻り値を用意している場合戻り値の型が boolean であっても,処理の正常終了・異常終了を表す目的で返している場合があります.
このようなケースで is を使ってしまうと関数名から「true が何を意味しているのか」を推察しづらくなります.
is は状態を問う印象が強いため,処理結果や可否を表す用途では命名と戻り値の意味が噛み合わなくなることがあります.
終わりに
is は状態・性質を表す動詞であるため,処理や動作を表す単語と結び付けると読みにくくなる恐れがあると感じました.
そのような場合は,
- 所有や保持を表す
has - 実行可能かどうかを表す
can
といった動詞を適切に使い分けた方が、関数名と戻り値の意味が一致し読みやすくなるのではないかと感じました.