JavaA2Z

KAB-studio > プログラミング > JavaA2Z > マジックナンバーとは

マジックナンバー

日本語 魔法数字
英語 magic number
ふりがな まじっくなんばー
フリガナ マジックナンバー

解説

プログラム中に突如出てくる整数リテラル浮動小数点リテラルのこと。
 
たとえば「System.out.println( 100 );」と書かれていた場合、この「100」がマジックナンバーである。
このようなリテラルは、プログラムを書いた者以外にとって「謎の数字」である。よく分からないが、とにかくちゃんと機能している重要な数字、という意味で「マジックナンバー」と呼ばれる。

マジックナンバーは極力避けた方がよい。
前述したように、マジックナンバーは一見、その数字がどういう意味を持つのかわかりにくい。そのため、記述者以外がプログラムを修正するのが難しくなる。
また、同じマジックナンバーがプログラム中に含まれている際に、同じ意味の値なのか分からないという問題がある。「System.out.println( 100 );」というがある場合、前述の「100」とこの「100」が同じ意味の「100」か分からず、一方を変更した際にもう一方も変更すべきかわかりにくい。

以上の問題から、マジックナンバーを書いてはならない。
できる限りstatic finalフィールドを用いることが望ましい。詳しくは「static final」の項目を参照
 
「ハードコーディング」もほぼ同じ意味。
「マジックナンバー」を書く「為」が「ハードコーディング」と言える。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

public class Sample
{
    public static void main( String[] args )
    {
        //       これがマジックナンバーです。
        //                   ↓
        System.out.println( 100 );
        // 100

        // しかし、この「100」という数字がどういう
        // 意味なのか、わかりません。
        // 修正する際に、プログラムを読み解く必要が
        // あります。

        // また、同じマジックナンバーがあると、
        // 同じ意味かわかりません。

        //       これもマジックナンバーです。
        //                   ↓
        System.out.println( 100 );
        // 100

        // この100が上の100と同じ意味か分からないので、
        // 上の100を変更する際、この100も変更すればいいのか
        // これまたプログラムを調べる必要があります。
        // なので、このようなマジックナンバーを使用せず、
        // static finalフィールドを使用するようにしましょう。
    }
}
public class Sample
{
    public static void main( String[] args )
    {
        //       これがマジックナンバーです。
        //                   ↓
        System.out.println( 100 );
        // 100

        // しかし、この「100」という数字がどういう
        // 意味なのか、わかりません。
        // 修正する際に、プログラムを読み解く必要が
        // あります。

        // また、同じマジックナンバーがあると、
        // 同じ意味かわかりません。

        //       これもマジックナンバーです。
        //                   ↓
        System.out.println( 100 );
        // 100

        // この100が上の100と同じ意味か分からないので、
        // 上の100を変更する際、この100も変更すればいいのか
        // これまたプログラムを調べる必要があります。
        // なので、このようなマジックナンバーを使用せず、
        // static finalフィールドを使用するようにしましょう。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/03/11
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。