16
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アプリ道場Advent Calendar 2015

Day 17

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

Posted at

こんにちわ!アプリ道場 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)

16
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?