はじめに
みなさんはちゃんと命名ができていますか?
他の人が最短時間でコードを理解できるようにするため、適切な命名が重要です
例
例えば1から10を2乗した合計を求めるコードを見ていきます
# SAMPLE_1
retval = 0
for i in 1..10
retval += i
end
# SAMPLE_2
sum_squares = 0
for i in 1..10
sum_squares += i # squares違和感
end
SAMPLE_2
ではiが2乗されてないことに違和感を覚えませんか?
上記のコードからも命名の重要さが伝わるかと思います
本記事では、リーダブルコードを参考に命名するための規則をまとめます
順を追って考えることで規則的な命名ができるのではないでしょうか
1. フォーマット規約1に従う
フォーマット規約により、それが何を表しているのか判断できるという利点があります
// コンストラクタ
var x = new DatePicker();
// 通常の関数
var y = pageHeight();
単語を繋ぐ際にもフォーマット規約は重要となってきます
例として4つのケースを記述します
スネークケース
user_name = "cat0"
# ケバブケース
user-name = "cat0"
# キャメルケース
userName = "cat0"
# パスカルケース
UserName = "cat0"
プロジェクトや言語によって使用できるフォーマット規約は変わりますが、一貫性を持たせることが大切です
自分自身やチーム、言語によって決められた規約の命名をしましょう
2. スコープ2を考える
スコープが小さければ短い名前でも良い
message = "Hello World!"
puts message
上記のコードはmessage
を理解するのに必要な情報がすぐそばにあるのでまだ理解できますが、数十行後にmessage
が出てきた際にそれは何を意味しているのか分からなくなりそうです
大きいスコープを持つ変数には、いつ見ても理解できる命名をすることが大切です
3. 汎用的な名前は避ける
下記のtmp
は生存期間こそ短いですが、この変数にとって一番大切なことは「一時的な保管」ではありません
tmp = user.name
tmp += " " + user.phone_number
tmp += " " + user.email
puts tmp
これをわかりやすくするためには格納されている情報がわかる命名をします
user_info = user.name
user_info += " " + user.phone_number
user_info += " " + user.email
puts user_info
汎用的な名前は便利ですが、コードを読みにくくしてしまいます
4. 明確な単語を選ぶ
def GetPage(url)
Get
ではこのメソッドがどこからGet
してくるのかがわかりません
インターネットから取得するのならばFetchPage()
, DownloadPage()
の方が明確です
状況に合わせて同じ意味でも適した単語を使うようにしましょう
単語 | 代替案 |
---|---|
send | deliver, dispatch, announce, distribute, route |
find | search, exact, locate, recover |
start | launch, create, begin, open |
make | create, set up, build, generate, compose, add, new |
5. 具体的な名前を使う
TCP/IPポートをサーバがリッスンできるかを確認するメソッド名を定義します。
ServerCanStart()
という名前のメソッドを作成してしまうと、名前が少し抽象的です。
具体的な名前にするとCanListenOnPort()
になります。
これならメソッドの動作をそのまま表せています。
6. 大切な情報を追加する
変数名に追加する情報は単位だけではく、状況によって改善すると良いです。
以下に例をまとめます。
状況 | 変数名 | 改善後 |
---|---|---|
passwordはプレーンテキストなので、処理をする前に暗号化するべきである | password | plaintext_password |
ユーザが入力したcommentは表示する前にエスケープする必要がある | comment | unescaped_comment |
htmlの文字コードをUTF-8に変えた | html | html_utf8 |
入力されたdataをURLエンコードした | data | data_urlenc |
7. 誤解されない名前か確認する
最善の名前とは誤解されない名前である。
これに基づきリーダブルコードで推奨されている命名をまとめます。
状況 | 命名案 |
---|---|
上下の限界値 | min, max |
包含的範囲 | first, last |
包含/排他的範囲 | begin, end |
ブール値 | is, has |
単語に対するユーザの期待にも注意し、get()やsize()には軽量なメソッドが期待されています
最後に
リーダブルコードより命名についてまとめました
1.から順序だてて命名を考えることができれば、より可読性が高くなるのではないでしょうか
本記事では説明しきれていない部分が多くあるので、気になった方はリーダブルコードを読むことをお勧めします