プログラムを書く時、名前をつける機会は多い。変数名・クラス名・メソッド名・ファイル名などなど。名前には正しいとか間違っているとかいう基準はないが、少なからずプログラムの読みやすさに影響している。プログラミングの命名に悩む時間を減らすため、そしてコードの読者の理解を助けるため、ここではある一定のルールを考えてみたい。
方針
- 大文字や特殊文字は少なくする。理由は文字の入力時間と、タイプミスを減らすため。
- 現実の英語文法に従うようにする。理解しやすくするため。
- 例外は少ないほうがいい。できるなら、例外がないほうがいい。
品詞
- クラス名、変数名、ファイル名は名詞にする。
- メソッド名はできるだけ動詞にする。
- 動詞と名詞とどちらの意味でも用いられる単語は、どちらにも用いる。
student = Student.new()
student.study(homework)
student.report(homework)
単語
- 長すぎる単語を避ける
- 珍しい単語を避ける。ただし、他の意味に誤解されない用語はそのまま使用する。
単数・複数
- データがリストや集合なら複数形にし、それ以外なら単数形にする。
- 名詞+名詞を使う場合は、1番目の名詞は形容詞とみなし、2番目の名詞だけが複数形になるものとする。
- 値が1より大きくても、複数形にしない。 3 points. 200 dollars が標準的だが変数名は複数形にしない。
student_name = "tanaka"
student_names = ["tanaka", "ando"]
scores = [100, 200]
所有格
- 普通の英語だと mother's というような所有表現ができるが、'が使えない場合は省く。
- 'を使わないで表現できる所有格はそのまま使う。
- でも人と時間・日にち以外は,'sはあまり使わないらしい。A of B を使う。
- 名詞+名詞+名詞の造語は長すぎるので of を使う。ただし、そこまで修飾する必要があるかは吟味する。
- s で終わる単語の所有格は 'es でなく 's のまま。たとえば class's は正しい。ただし、わかりにくいので使うべきでない。
mothers_pen = "tombow"
mothers_pens = ["tombow", "zebra"]
my_pen = "zebra"
requirements_of_teachers_license = [{credit: 20, field: '教科に関する科目'}, {credit: 10, field: '教職に関する科目'} ]
分詞の形容詞用法
- それで意味が完結する動詞は、 分詞 + 名詞 にする。
- 補語・目的語・修飾語(句)など付属語を取る動詞は、 名詞 + 分詞 + ... にする。
required_credit
language_spoken_in_japan
総数
- 普通の英語だと number of holidays というような表現をするが、接尾辞 count をつける。
- number はデータ型に使われたり、番号の意味で使われたりするので、総数の意味で利用しない。
holidays = ["憲法記念日", "みどりの日", "こどもの日"]
holiday_count = 3
期間
- AからBまでの間、という場合の表現方法。
配列添字
- 配列の[N番目]を指す変数には、 s_index index_of などをつける。
- 番号のまま操作するのはわかりくいので、できるだけやらない。
- アルゴリズム上必要ならば、 i, j とかいう省略文字でいいかもしれない。
taros_index = students.findIndex('name', 'taro')
taro = students[taros_index]
メソッド名
- ふつうは動詞にする。ただし、getter メソッドのように、属性値を返す(ように見える)ものは名詞でもよい(特にRubyでは()を省略できるのでそういう傾向が強い)。
- 目的語を引数にする。
- 文型がSVOCとなる場合、動詞の選択で回避できないか検討する。無理なら語順を入れ替える。(あまりよくないが、代わりの単語を置いておくのはくどい)
- グローバルメソッドには主語がないので、主語+動詞にする。主語が this program なら省略する。クラス名が非常にわかりにくいクラスのメソッドを作成しなければならない時も、このようにする。
- Rails の Controller が持つアクションは動詞にする。ただし、そのアクションを利用するためのURIは名詞である。
movie.title または movie.getTitle()
movie.entertain(me)
movie.make_happy(me)
student_register_license(student, license)
create_world()
URIの設計
- ツリーの1つのノードを指すものがURIだと考えると、ツリーを設計するほうが重要。
- 上位にあるものが、より広いものを指すようにする。A/B は A has B?
- クエリパラメータは末端ノードでしか使えず、ツリーの構造について何も言及しないので、できるだけ使わないほうがいいだろう。
/egg_chicken/document/note?subject=math&page=100
/egg_chicken/document/note/math/page/100
最終更新:2012年04月25日 14:54