はじめに
みなさんはちゃんと命名ができていますか?
僕はできてないです!
就職して1年目ですが、命名についてレビューをいただくことが多々多々あります。
勉強も兼ねて命名の仕方をまとめました。優しい目で見てください。
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()には軽量なメソッドが期待されています
最後に
この記事の多くはリーダブルコードより抜粋しています
みんな躓くものはどこかにナレッジがあるもんですね
命名で躓かないようになりたいです