BETA

リーダブルコードの勉強会へ向けた資料作りとアウトプット Part2

投稿日:2019-08-07
最終更新:2019-08-07

第二章 名前に情報を埋め込む

名前に情報を詰め込むことが必要。

明確な単語を選ぶ

シソーラス(類語辞典)を使い、名前にニュアンスを含めた意味をつけていったほうが分かりやすい。
例えば、

class hoge{  
  void Stop();  
//省略  
};  

このStopはよく使われるメソッドの名前だけれど、これでは止まるという意味のみしか分からない。止まった後の動作まで伝えるほうが親切だ。

もし止まった後にやり直せる、一旦止まってすぐ再生するニュアンスを含めるならPause()の方がピンときやすい。

class hoge{  
  void Pause();  
//省略  
};  

逆に止まってからは、再生はしかりそのあとの動作が何も出来ないような重い操作なら、Kill()にするとより直感的で先の動作まで想像しやすい。

class hoge{  
  void Kill();  
//省略  
};  

状況に合わせ単語をカラフルにしていくべきだが、やりすぎはいけない。
気取った言い回しよりも、明確で正確なほうが重要だ。

汎用的な名前を避ける

明確な理由がないのならば、tmpやitやretvalなどの汎用的な名前は避けるべきだ。
tmpが伝えることは「一時的な保存」に近い。
生存期間が短く、一時的に保存する以外の意味合いがない場合に使うと良いだろう。
iterなどの時は状況に応じて、付属の情報をつけるとバグが見つかりやすい。

名前に情報を追加する

名前は短いコメントのようなものなので、絶対に知らせなきゃいけない大切な情報があれば[単語]を変数名に追加すればいい。
単位をつける!
delay size limit degrees等は値に単位がある。ならば単位のフォーマットを名前に入れれば、見返したときに一発で分かる。
delay_secsといった具合だ。
属性をつける!
String password →plaintext_password
パスワードは処理をする前に暗号化したほうがいい。
属性はプレインテキスト。
String html→html_utf8
htmlの文字コードをUTF-8に変えたなら、その旨を名前に表現する。
全部が全部つけりゃいいってもんでもない
必要な部分に必要なだけ情報を加えよう。(それが難しい)

名前の長さを決めるガイドライン

名前の長短を決める基準のひとつは識別子のスコープの大きさだ。
その名前が見えるコードの行数が小さければ、多くの情報を詰め込む必要がない。
プロジェクト独自の短縮した形は使わないで!
新しいチームメイトが見て理解できるような形の短縮か?
StringがStrになる、Documentがdovになる等共通の認識ではない短縮は避けるべきだ。
不要な単語はいらないよ!
DoServerLoop()とServerLoop()は全く同じ意味なのでDoは不要だ。

名前のフォーマットで情報を伝える

クラスのメンバ変数にアンダースコアをつけて、ローカル変数と区別したり、フォーマットでなんの変数か分かるようにすると便利だ。

【蛇足】英語の感覚が分からない私を救ってくれた記事

名前を様々に工夫していく必要性があるのは分かった。
しかしどうしても英語のニュアンスがよくわからない。
そもそも英語の定義自体が私の目指しているそれにあっているのだろうか?、英語の使い方あっているかしら等々つきぬる。

こんな私の(同じことを思ったすべてのエンジニア)のために、Qiitaは応えてくれました。

モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう
この記事の合わせて読みたいに紹介されている記事も本当におススメです。

ありがとう、記事を無料で公開している諸先輩方!
ありがとう、Qiita!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@NowBridgeがひたすらアウトプットします。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!