2014-06-25
■[リーダブルコード]名前:汎用的な名前を避ける:tmp
どういうこと?
汎用的な名前をつけるのは、「名前のことなんて考えていません」と言っているようなものです。このような「空虚な名前」をつけるのではなく、エンティティの値や目的を表した名前を選びます。
汎用的な名前の一つに「tmp」があります。
どうして?
tmpは「一時的な保管」を表現しますが、以下のtmpは単なる怠慢です。
String tmp = user.name(); tmp += " " + user.phone_number(); tmp += " " + user.email(); ... template.set("user_info",tmp);
生存期間は確かに短いですが、この変数にとっていちばん大切なことは「一時的な保管」ではありません。
どうすれば?
汎用的な名前を避け、変数の「目的」や「値の本質」を表す「いい名前」をつけるようにします。
上述の例であれば、「tmp」の代わりに、「user_info」のような名前で、意味を伝えるようにします。
String user_info = user.name(); user_info += " " + user.phone_number(); user_info += " " + user.email(); ... template.set("user_info",tmp);
「tmp」という名前は、生存期間が短くて、「一時的な保管」が最も大切な変数にだけ使います。以下、2つの変数を入れ替える古典的な例です。
if(right < left){
tmp = right;
right = left;
left = tmp;
}
このような場合は、tmpという名前で全く問題ありません。この変数の目的は、情報の「一時的な保管」です。しかも、生存期間はわずか数行です。
さらに、tmpという名前で「この変数には他に役割がない」という明確な意味を伝えています。つまり、「他の関数に渡されたり、何度も書き換えられたりしない」という意図を伝えているのです。
トラックバック - http://d.hatena.ne.jp/asakichy/20140625/1403643867
リンク元
- 25 https://www.google.co.jp/
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CBwQFjAA&url=http://d.hatena.ne.jp/asakichy/20100209/1265672342&ei=m_2pU5P3N4OpkwWB5oC4AQ&usg=AFQjCNF2mMkm0JBit1g3z_IEoPSZ9C4SsA&sig2=Oa709ecqHFy0Qr5neR3yvQ&bvm=bv.69620078,
- 3 http://reader.livedoor.com/reader/
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CBsQFjAA&url=http://d.hatena.ne.jp/asakichy/20090205/1233816894&ei=TheqU-OjLsOWkQXInoHoCw&usg=AFQjCNHeilE85j1mazo7GsKPztq1iz_OPQ&sig2=m18kikvCag5CWfdztTzwbw&bvm=bv.696
- 3 http://www.google.co.uk/url?sa=t&source=web&cd=1
- 2 http://aipo.lassic.co.jp/aipo7/
- 2 http://feedly.com/index.html
- 1 http://aipo.lassic.co.jp/aipo7/portal/media-type/html/user/arao/page/default.psml/js_pane/P-14183898520-10758?action=controls.Restore
- 1 http://aipo.lassic.co.jp/aipo7/portal/media-type/html/user/kawaguchi/page/default.psml/js_pane/P-140bf4a33a5-10350?action=controls.Restore
- 1 http://aipo.lassic.co.jp/aipo7/portal/media-type/html/user/yashima/page/default.psml/js_pane/P-140bf4a315b-10310?action=controls.Restore