概要
こんにちは。
ほとんどのプログラミング言語は,英作文の発想で記述できるように設計されています。
英語でのネーミングは,頭を悩ませるトピックの一つですが,このことを意識するだけでも,コードはグーンと読みやすいものとなることを紹介しながら,自分自身の知識整理も図ろうと思いました。
高度な文法知識は不要,中学英語で理解できる内容となっております。
ルールはシンプル
気を付けるべきルールはすごくシンプルで,英語での命名(クラス,メソッド,変数,……)を考えるときは,周辺ロジックとのツナガリを大切にする,ということに尽きると思います。
いわば,「単語」ではなく,「文」で発想するというアプローチです。
早速ですが,いくつかの分かりやすい事例をとりあげてみます。
事例① 関数と IF ブロック
引数として与えられた文字列 $ext
が,有効な拡張子であるかをチェックする関数があったとします。
いま,有効な拡張子を 'txt' もしくは 'md' のいずれであるかとすれば,以下のような疑似コードが書けます:
関数を isValidExtension
と命名したことによって,コードが「英文」のように見える嬉しさができました。
具体的には,IF ブロックと一緒に使うと if this is valid extension となり,まるで英文そのもののコードが仕上がります:
isVallidExtension
は,拡張子が有効か無効かを,論理値で判定するという仕様であることを考えると,IF ブロックの中で使われることは,少し考えてみれば,すぐに分かることです。
このように,英語での命名は,これから名付けようとしている対象が,どのようなロジックの中で使われているかを考えることによって,自然な発想でネーミングできることの好例だと思います。
事例② CSS クラス名
段落タグ <p>hogehoge</p>
を,条件に応じて,赤色にしたり,青色にしたりするシーンを考えましょう。
たとえば,エラーメッセージを発するときは赤色,正常終了メッセージを発するときは青色だとします。
CSS クラスを作るときには,is-
で始めると,内容を形容しやすくなります:
これを実際のコードで使うと,<p class="is-error">名前が入力されていません</p>
となり,ここでも class is error という英文が,自然と形成されていることが分かります。
「単語」ではなく,「文」で発想することによって,ネーミングは,自然なものとなることが理解できる好例ですね。
事例③ クラスとメソッド
オブジェクト指向で組む時にも,「単語」ではなく「文」で発想するというアプローチは使えます。
具体的には,クラス名が名詞(例:犬,ネコ,ロボット),メソッド名は動詞(例:食べる,眠る)という品詞になることを頭に入れて,自然になるようなクラス名とメソッド名を考えましょう。
ネーミングのポイントは,実際のコード中で使われたとき,自然な英文になるか?という観点です。
Human
が主語となることを考えれば,eat
や sleep
といった動詞を思いつきますが,これがそのままメソッド名に使えないかと考えてみましょう。
コード中で使われると human.eat()
などとなって,ここにも human eat という,意味のつかめる英文ができることからも,適切なネーミングだと判断できます。
つい,メソッド名から考えてしまいがちですが,オブジェクト指向では,クラス名からのつながりでメソッド名を考えると,自然に思いつくケースもあると思います。
まとめ
ネーミングをするときは,それが,どんなロジックの中で使われるかを,一足先に考えることで,自然なネーミングの発想ができるというアイデアを,共有させていただきました。
テストクラスを書くときにも,この記事でご紹介したような考え方を理解しておけば,完成したコードは,まるで英文のようにスラスラ意味を拾えるような構造になっているはずです。
GitHub などで,オープンソースのライブラリを参考にしながら,うまいネーミングのアイデアを集めていくのも,勉強になると思います。
ネーミングの良し悪しは,将来的なメンテのしやすさと直結する部分でもあるので,大切にしていきたいですね。