(有)未来検索ブラジルが運営するあらゆる言葉についての記事を閲覧・編集したり、コメントをしたりするサイトです。

単語記事: マジックナンバー

編集

マジックナンバーとは

  1. プログラム中に突如出現するマジカルミラクルでドリームファンタジーな数字。本稿で解説。
  2. プロ野球において、上位チームが下位チームに対して「上位でシーズンを終了することが確定するまであと何勝しなければいけないか」を表す数字。日本では単に「マジック」と呼ぶことが多い。
  3. 2003年元日発売、KICK THE CAN CREWメジャー2ndアルバム
  4. 2009年に発売された坂本真綾シングルテレビアニメこばと。」OP

概要

コード中になんら説明無く「*2」とか「+100」とかいった形で割り込んでくる数字をマジックナンバーという。場合によっては文字列などにも使う。マジックナンバーで値を決め打ちしてコーディングすることをハードコーディングと呼ぶ。

マジックナンバーは、書いた本人には意図が分かっていても読む側にとっては解読に一手間かかる。後から自分で読み返して何の数字だか思い出せないのもよくある話。また、その数字を変更する必要が生じた場合、その数字が複数箇所で使われていると、それらすべてを変更しなければならない。これは手間が掛かるだけではなく、変更し忘れによってバグを埋め込んでしまう可能性すら有る。

これらの理由から、一般的にマジックナンバーは使うべきではない。一見してどんなに自明の内容であっても、必ず一端定数に代入するのがプログラミングマナーである。もちろん定数名もちゃんと意味のある内容でなくてはならない。可読性のみならず、バグを出さないという面でも定数代入が推奨される。ちょっとした違いであるが、小さな気遣いが素人と玄人の分かれというやつなのだ。

具体例

例えば、以下に示した消費税を計算する関数consumption_taxの擬似コードについて考えてみよう。

function consumption_tax(price) {
  return price * 0.05
}

この場合、「0.05」がマジックナンバーであり、消費税税率が変わってしまった場合(そして残念ながらそれはきっと実現してしまうだろう)に簡単に対応できなくなってしまう。このコードは定数consumption_tax_rateを用いることによって、次のように書き換えられる。

const consumption_tax_rate = 0.05
function consumption_tax(price) {
  return price * consumption_tax_rate
}

このようにすれば、consumption_tax関数では消費税率を用いて消費税を計算しているということがより明確に示される。また、消費税率が変わってしまった場合には、consumption_tax_rateの値を変えるだけで良い。

関連項目

携帯版URL:
http://dic.nicomoba.jp/k/a/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC
ページ番号: 4654389 リビジョン番号: 1463463
読み:マジックナンバー
初版作成日: 11/06/15 02:03 ◆ 最終更新日: 12/03/08 13:34
編集内容についての説明/コメント: 微修正
記事編集 / 編集履歴を閲覧 /

マジックナンバーについて語るスレ

1 : r :2011/06/16(木) 03:15:35 ID: rKPAlHhswT
坂本真綾の曲 (こばと。OPテーマ)
2 : ななしのよっしん :2011/10/30(日) 02:28:42 ID: 82nVbizuNE
マジックナンバーは絶対使うべきではない。」と言うが、例えば三角形台形公式で使う/2とかは逆に定義すると分かりにくくなる。基本的に避けるというのには同意だけど、結局ケースバイケース希ガス
3 : ななしのよっしん :2011/10/30(日) 08:30:06 ID: 0B2FwkMCh4
#define DENOMINATOR_TWO 2.0
double calculate_triangle_area(double height,double base){ return base*height/DENOMINATOR_TWO; }

とか書くのがマナーだからそうしろって事なんでしょうきっと。

この記事では、定数を利用するとバグ数の減少に繋がると言う理由が全然分かりませんけどね。

例えば
配列変数の初期長の定義を直書きじゃなくて定数でやっておけば、あとから定義を変更しても少ない箇所の修正で済むね」とか
「定数名そのものが役割を示しているのならこんな感じでプログラムが読みやすくなるね」
みたいなサンプルコードでも書いておけばいいのに。

マジカルミラクルでドリームファンタジーな数字」とか皮のつもりで書いてるのが既にお寒い。
4 : ななしのよっしん :2011/10/30(日) 12:48:00 ID: 82nVbizuNE
とりあえず具体例追加した。追加した後で>>3をよく読んだらバッファ長の話があって、そっちの方が(プログラムへの影や利点が分かりやすいので)例として適切な気もしたけれど面倒なので、気になるなら誰か勝手に変更しといてほしい。
5 : ななしのよっしん :2012/03/22(木) 07:39:07 ID: 8OZumMh9gd
#define CHIHAYA 72
#define 宇宙人生全ての答え 42
#define hyde 154
ページトップへ戻る