47
25

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 3 years have passed since last update.

【初心者向け】マジックナンバーは定数にしよう

Last updated at Posted at 2019-09-17

#マジックナンバーって?
プログラムの中に突然現れる数字のこと。
以下の関数を例に説明します。


// 税抜価格から消費税分の金額を割り出す
function calculate_tax($price) {
  return $price * 0.08;
}

この「0.08」ってなんの数字でしょう?

…バカにするなって怒られるかもしれません。
そうです。消費税の税率です(2019年9月現在)。

しかしこの「0.08」は、関数に直接書くべきではない数字なのです。

#どうしていけないの?
可読性(読みやすさ)や保守性(維持管理のしやすさ)が低下するためです。

###可読性が低下する
数字だけ見てもその意図が全くわからないのです。
上記の関数だと、「0.08」だけを見ても関数名や実際の処理を見ないとなんのこっちゃ?って感じですよね。

###保守性が低下する
2019年10月1日から消費税が10%に引き上げられますうんざりしますね
もし関数が上記の例だけなら「0.08」から「0.1」に書き換えれば済む話です。
ですがもし他にもこんな関数があったらどうでしょう。


// 税抜価格から税込価格を計算する
function include_tax($price) {
  return $price * (1 + 0.08);
} 

税率が変わった場合、2つの関数を書き換える必要が出てきます。

そしてもし、関数calculate_taxの税率だけ書き換えるのを忘れてしまったら…?
100円の税込価格は108円のままなのに、100円の消費税分を計算すると10円になっちゃいます…。

#じゃあどうすれば?
税率を定数にしちゃいましょう。


// 消費税率0.08を定数tax_rateとして定義
define("tax_rate", 0.08);

function calculate_tax($price) {
  return $price * tax_rate;
}

function include_tax($price) {
  return $price * (1 + tax_rate);
} 

マジックナンバーを定数にすることはメリットだらけです。
まず可読性の面では、今回の場合だと税率=tax_rateとなるので意味が明確になります。
さらに保守性の面では、税率が変更されても定数の値を書き換えるだけで済みます。

#さいごに
Qiita初投稿です。
マジックナンバーについて触れている記事が意外と少ないようなので投稿してみました。
拙文ですが、お役に立てれば幸いです。

47
25
0

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
47
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?