[迷信] ソースコード中の即値を全廃せよ

言語を問わず、プログラミングではマジックナンバーが嫌われる傾向にあります。しかし、マジックナンバーについて誤解しているケースも少なからず見受けられます。典型的なのは、即値=マジックナンバーという誤解です。即値とマジックナンバーは同義ではありませんし、即値が常にマジックナンバーになるわけでもありません。

さすがに true や false のような即値まで全廃しろという人はそういませんが、次のような例になると微妙になってきます。

double area_of_triangle(double base, double altitude)
{
  return base * altitude / 2;
}

文字どおり、三角形の面積を求める関数ですが、小学校で習ったように、底辺 × 高さ ÷ 2を計算しています。ここで登場する「2」は明らかに即値ですが、これを何らかのマクロやオブジェクトに置き換えることは無意味なばかりか、かえって可読性を低下させます。三角形の面積の公式では、ここは「2」以外あり得ず、それは小学校を卒業した人なら誰でもわかることです。

一般に、自然科学の公式のようなものは、もともとの数式で即値が使われているなら、ソースコード上も同じように即値を使ってコーディングするほうが望ましいといえます。もちろん、円周率や重力定数のように、もともとの数式でも記号を用いているものについては、マクロやオブジェクトに置き換えることが望ましいでしょう。

そうした公式では、仕様変更によって値が変わることもあり得ません(自然科学の公式の仕様変更は、自然法則の変更に他なりません)。自然科学以外でも、近い状況というのはあり得ると思います。そうした場合には、迷わず即値を使うべきです。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/589

マジックナンバーへの対処法

プログラムを書いている中で、『マジックナンバーを使わない』という規約を使ったプロジェクトに参加することも近年では割合ある

このエントリーを含むはてなブックマーク