Help us understand the problem. What is going on with this article?

読みとりやすい変数や関数の名前の付け方!

More than 3 years have passed since last update.

こんにちわ!アプリ道場 Advent Calendar 2015の17日目担当@bearcanyonです。

コード書くときって変数や関数の名前って迷いませんか?
初心者の僕はなんて名前をつけようかなって手を止めて悩んじゃうときがあります。
どうせ付けるなら他の人が見ても読み取りやすい名前の方がいいですよね!
それでは有名な書籍のリーダブルコードからすぐ使える技をいくつか紹介したいと思います。

明確な単語を選ぶ

func getPage () {
}

まずはこのメソッドの名前ですが、getという単語からはこのメソッドはページのどこから取ってくるのかまでは読み取ることはできません。
ローカルキャッシュから?データベースから?インターネットから?
もしインターネットから取ってくるのであればfetchPage()やdownloadPage()の方が明確です。

func getSize(){
}

続いてこのメソッドの名前ですが、もっとわかりにくいと思います。
Sizeというのは何のサイズなのか明確ではありません。
高さなのか?ノードの数なのか?メモリの消費量なのか?
明確につけるならHeight,NumNodes,MemoryBytesとなるはずです。

改善!もっと明確な単語を探す!
状況に合わせていくつかの単語と合わせて使うともっとわかりやすい表現になるはずです。
send → deliver,dispatch,announce,distribute,route
find → search,extract,locate,recover
start → launch,create,begin,open
make → create,setup, build,generate,compose,add,new

名前に情報を追加する

var time = getTime() 

この場合getTime()から取れる値は秒でしょうか?ミリ秒でしょうか?
変数timeに_msをつければ明確になるはずです。

var time_ms = getTime() 

改善!値に単位をつける!
時間以外にもプログラミングで使う単位はたくさん存在します。以下は例です。
delay → delay_secs
size → size_mb
limit → max_kbps
angle → degrees_cw

誤解するような名前を避ける

results = Database.all_objects.filter(“year <= 2011")

このresultsには「year <= 2011」のオブジェクトが入ってくるのか
「year <= 2011」ではないオブジェクトが入ってくるのか明確ではありません。
理由はfilterという単語が明確ではないからです。
これでは選択するのか除外するのかが伝わってきません。
選択するならselect、除外するならexcludeにしたら誤解は生まないはずです。

func clip(text, length){
}

このclipも動作は2つ考えられます。
最後からlength文字を削除するのか(remove)、最大length文字まで切り詰める(truncate)なのか。
ではtruncate(text,length)にしたとしましょう。

func truncate(text,length){
}

これでもまだ不十分です。
引数になってるlengthも良くないです。
max_lengthにした方が明確になります。
さらにmax_lengthにもいろんな解釈ができます。
バイト数なのか、文字数なのか、単語数なのか。
文字数なのであればmax_charsにしたらより明確になります。

名前の長さを決める

newNavigationControllerWrappingViewControllerForDataSourceOfClass

こんな名前嫌ですよね。
いい名前を選ぶときは「長い名前を避ける」という暗黙的な制約があります。
長い名前は覚えにくいし、コード行が無駄に増えてしまいます。
しかし!「長い名前を避ける」に従っていたら1つの単語の名前にまた戻ってしまいます。

指標!スコープが小さければ短い名前でもいい!

if(debug){
 var m = map(string, int)
 print(m)
}

この変数mには情報は含まれていません。
でも大丈夫です。コードを理解するのに必要な情報がすぐそばにあるからです。
if文の中が少なく、すべての情報(変数の型、初期値、破棄方法など)が見えている場合は、変数の名前は短くてもコードを理解することの問題にはなりません。


ホント簡単にだったのですが、以上です!
明確な単語を選ぶのって実際結構難しいですよね。
まずは何をどうするか、2つの単語を選んでそこから改善していくのがいい気がしました。
参考サイト貼っておきますね。http://php-archive.net/php/words-in-function-names/

このような事例がたくさん載っているのでぜひ、リーダブルコード読んでみてください!
リーダブルコード(amazon)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away