IT

【プログラミング】命名センスがわりと大事だったりする

こんにちは、エリ狐です。

社会人1年目かつエンジニア1年目の頃の話です。
変数や関数、定数の「名前」の付け方にセンスがないと言われたことがります。

ふぅ…1つの機能が完成したぞぉ〜
レビューしてもらおう!
エリ狐
エリ狐
リーダー!確認お願いしますっ!
エリ狐
エリ狐
え、エリ狐くん…コレさぁ。。。
「名前のつけるセンスないよ…」
ぇぇ…(別にいいやんけ、、、
エリ狐
エリ狐

学校の教科書や市販の参考書ではよく「i」や「tmp」といった名前を使っていることが多いです。

これらの影響により、エリ狐も普段の開発で「i」や「tmp」を使いまくっていました。
でもこれらは「イけてないプログラミング」なので、今回はプログラミングにおける「名前」の重要性、付け方についてお話します。

わりと使っちゃってる人も多いので〜
知らぬ間に、イケてないプログラミングをしてることに気づいてないことも…
エリ狐
エリ狐

変数でも、関数でも、クラスでも全て気をつけなければならないことは…

「名前に情報を与える」ということです。

名前 = 「情報」 だと意識することが大切です。
短くてもいい名前をつけることができれば、それだけ多くの情報を伝えることができるからです。

それでは、どうやってつければいいのか次にまとめます。

具体的な名前にする

明確な単語と曖昧な単語

名前に情報を与えるとは、明確な単語を選ばなければなりません。
特に「その文字に意味がない」曖昧な単語は避けるべきです。

例えば「get」はあまり明確な単語ではありません。

get(url)という関数があった場合はいかがでしょう?

え?getは手に入れる…だからなんかのURLを取得する関数じゃん?
ローカルキャッシュから?データベースから?インターネットから??と、何のURLなのか、どこから取得するのか分かりにくいですよね?
エリ狐
エリ狐
このように「get」という単語からは何も伝わってこないのです〜
エリ狐
エリ狐

仮にインターネットからの取得する場合にはFetchPage()やDownloadPage()の方が明確です。

したがって、名前は明確さを求めるために、いくつかの単語と状況に応じて複数の単語を組み合わせることが大切です。

個人的によく使う辞典はweblioです。

直感的に分かりやすく

よく参考書やネットに転がっているサンプルソースでは「tmp」、「i」などが使われています。

このような名前を使うのは「名前のことは深く考えてないでーす!」と言っているようなものですので、意味のある単語や目的が分かる単語を使用しましょう。

もちろん、サンプルソースにおいては、「提示すること」「教えること」がメインですので変数の意味はそこまで重要ではないため問題ございませんが、業務では使用しないようにしましょう。

「rtnVal」を使っているプログラムを例とします。

そーいうけど…ぶっちゃけ戻り値に「rtnVal」とかつけたいよー

確かにいい名前が思いつかなければ、戻り値に「rtnVal」を使いたくなりますよね。

しかし、「rtnVal」には「これは戻り値だぞ!」という以外の情報はありません。
イケてる名前とは変数の目的や値を示すものになります。

上記のプログラムを例とすると rtnVal += v[i] * v[i]; はvを2乗の合計をしている。

したがって変数の目的としては「2乗して合計している」ということで「sum of squares」よりsum_squaresとする方が好ましいです。
sum_squares += v[i] * v[i];

このようにすることで変数の目的が分かりやすくなり、バグの発見にもしやすくなるのです。

しかし、「tmp」、「i」が全て悪いわけではありません。

ここでいう「tmp」は「一時保管」という目的しかありません。
したがって「この変数は他に役割がない」ということを意味しています。

このように他の関数に渡されたり、なんども書きかえられたりしない場合には「i」や「tmp」といった単語を使用しても問題ないです。

名前は長くすればいいものではない

みなさんが名前をつけるときに「長い名前はやめよう」と思うことや意識していることってありませんか?

確かに、イケてる名前を決めるときに「長い名前は避ける」という暗黙的な決まりうごとがあります

「newOrganizeWrappingSettingControllerDataSorceOfClass」とか付けられたプログラムがあったら誰でもドン引きするでしょう。
長い名前は覚えられないし、エディターを占領してしまい折り返しが必要になります。

しかしながら、「長い名前はダメ」としたら1つの単語や頭文字だけになってしまいます。
ではどのように名前を選べばいいでしょうか。

それは「スコープの長さによって名前の長さを変える」ことです。

プログラミングでのスコープは、ある変数や関数が特定の名前で参照される範囲のことです。
エリ狐
エリ狐

皆さんは旅行に行きますか?1泊2日で行く場合と、7泊8日で行く場合では荷物の差は変わりますよね?

プログラムも同様に使用する関数の長さが大きいほど「多くの情報を詰め込む」必要があります。
したがって、短いスコープであれば短い名前で問題ないのです。

「k」という変数名はあまり情報量がありません。
しかし、ソースを理解すれば必要な情報が分かるので特に困りません。

しかしながら、この「k」が他の関数で使用されていたらいかがでしょう?
その場合に「k」は型や目的が分からず、イケてない名前となってしまうのです。

したがってスコープが大きくなれば、同様に名前にも十分な情報を詰め込む必要があります。

まとめ

今回は「名前の付け方」についてまとめていきました。
これらは意識してないと抜けちゃうことになるので気をつけてください。

オススメの辞書:weblio
イケてる名前の付け方とは…

  • 意味や目的を示す具体的な名前をつける
  • スコープの長さによって名前の長さを変える

です。