プログラムを学ぶなら知っておきたい変数名の付け方【正しい命名規則】

naming プログラミング
プログラムを勉強し始めて、変数というものがあるのを知ったけど、どうやって名前を付けるのが正解なんだろう、試しにこんな名前を付けてみたけどこれで合っているのかなぁ…
こんな悩みを持つ方向け。

そして今回は自分の勉強の為にも正しい変数名の付け方というのをもう一度新しく勉強してまとめたいと思います。

変数にわかりやすい名前をつける

なぜ変数名の正しい付け方を学ぶかといったら答えはただ一つ「後から見て何の処理が行われているか、わかりやすくする為」です。

PHPで具体例を書いてみますね。

$resurt = $num1 * $num2;
return $resurt;

これを見た時に一体何の処理が行われているかがまったくわかりません。

正確に言えば$num1と$num2をかけてその値を$resultに入れて返していることはわかりますが、どういう目的で処理が行われているかがわからないですよね。

次に変数名をできるだけわかりやすくつけてみた例です。

$result = $price * $tax_rate;
return $result;

はい、これで商品か何かの価格に税率をかけて税込みの値段を計算して返している処理だということがわかりやすくなったと思います。

$resultというのは結果という意味ですがここも変えてみましょうか。

あとは$tax_rateは毎回値を代入するようなものでもなく、固定値で変数で持っておくのが無難なので定数化しておくとするとこんな感じ。

// 別の箇所で定数設定していると仮定
TAX_RATE = 1.08

$price_with_tax = $price * TAX_RATE;
return $price_with_tax;

税込価格を$price_with_taxとしましたが、普通に翻訳すると「price including tax」と出ました。

ちょっと長いので別の言い回しっぽい「with tax」を選択してみました。

こんな感じで税込み価格を扱う変数名に名前をつけるにも複数の選択肢があり、ある程度のルールはあるがこれが絶対の正解であるという答えが無い、変数名をつけるというのはそんな作業かと思います。

もっと言うとpriceが価格、taxが税ということくらいはパッと見てわかるのでこの変数名の付け方は良い方法かなと思いますが、普段聞いたことも無いような英語で名前を付けられていたら結局翻訳して単語の意味を理解しないとわかりづらいということもよくありますよね。

だからといって以下の様に日本語読みのローマ字で付けるのは多分相当ツッコまれますのでやめておきましょう。

悪い例
$zeikomi_kakaku = $kakaku * ZEIRITU;
return $zeikomi_kakaku;

個人的には超ダサいけど日本人にならわかりやすいとは思うんですけどね。

良くない事と理解しつつ絶対に自分しか使わないお勉強のプログラム内で書く分には好きにしていいんじゃないかと。

変数名の付け方で行くとスネークケースとキャメルケースを合わせるというのがあります。

それはこちらの記事の中に書いているので知りたい方はどうぞ。

program

プログラミングのインデントの意味とルール【読みやすいコードを書く】

2019年6月30日

具体的な例

上記が基本かと思うのですが、ここからは私も色々調べてみて無意識にやっているけど確かにその通りだなと思っていることを上げていきます。

一つ目はIDを変数名に格納する場合。

例えばツイッターなどを始め多くのwebサービスではユーザー登録を行います。ユーザー登録を行うとユーザー情報がデータベースに登録されます。

そしてそのユーザーには例えば連番の数字のようなIDが設定されていることがほとんどです。データベースの構造を簡素に表してみるとこんなところでしょうか。

user_id | email | password | nickname

そしてuser_idをキーにしてそのユーザーの情報を取得するコードを書くとします。

$id = 1;
$user = getUserInfo($id);

一見するとユーザーの情報をidをキーに取得してるんだなって感じで問題は無さそうですよね。

しかし登録されているつぶやきもついでに取得する場合はどうでしょう、つぶやきのデータベースの構造は以下の様な形としてみます。

tweet_id | user_id | tweet_text
$id = 1;
$user = getUser($id);
$tweet = getTweet($id);

ここで問題は「getTweet($id)」の部分です。

これだとtweet_idをキーに特定のつぶやきを取得しようとしているようにも見えてしまいます。

ところがやっていることはuser_idをキーにそのユーザーのつぶやきを取得しようとしているわけです。

この問題を解決する一つの手段としては以下の様になると思います。

$user_id = 1;
$user = getUser($user_id);
$tweet = getTweet($user_id);

これで$user_idをキーにしてユーザー情報とそのユーザーのつぶやき情報を取得しているということがより明確になったかと思います。

関数名にも注意が必要

check
上記の例ですが「getUser($user_id)」はまだいいとして、「getTweet($user_id)」という関数名でそのユーザーのつぶやきを取得する関数を作っていたとした場合は問題がありそうです。

そのユーザーのつぶやきを取得するのであれば、例えば「getTweetByUserId」となっていれば最悪「getTweetByUserId($id)」となっていてもこの$idはuser_idのことなんだろうなというのが推測できるようになります。もちろん$idそのまま使っていいよってことではありません。

このように変数名だけでなく、関数名にも注意しつつ名前をつける必要があります。

ただ見ただけで全てを表現する為にものすごい名前が長い関数のものを見かける時があるのですが、個人的には長すぎる関数名も短すぎる関数名にも問題があるのかなと。

このあたりは実際にやってみないとわかりづらい部分があると思うので、実際の場面に遭遇した時にこの場合はどうするのが一番いいのかなと頭を悩ませてみてください。

勉強だけでは限界がある

ちょっとした具体例を見てきましたが、あなたがもしまだプログラミングをあまり書かない内にこのことについて悩んでいるのであれば変数名なんて気にせずにとりあえず勉強優先でガンガン色々作って試してみてください。

あれ、この変数名ダサいかも…って気付けるようになるのはその後です。

ある程度作ってその上で、もっとわかりやすくするにはどういう変数名や関数名をつけるのがいいんだろうなと調べ始めればOKです。

お金をもらって業務として行っている場合はもちろん最初からこのあたりの意識はできている必要がありますし、採用試験などでコーディングを行うテストのような場合もしっかり注意して書く必要があります。

そして極論なんですが名前の付け方は絶対的な正解が無いんですよね、ある派閥が推奨する命名規則はある派閥に異様に非難されていたりもします。

最終的には自分で実践して最適解を見つけていくことしかないところなので、ある程度学んだらまた実践の中でどうするのが最適解なのかを考えながらコードを書くことが一番の近道です。