辞書: マジックナンバー

投稿日: 更新日:

マジックナンバーとは

プログラム中に「分かりにくい」即値をそのまま書くことです。

定数として定義すればいいものではない

例えばこれ。

https://github.com/terasolunaorg/tutorial-apps/blob/master/secure-login-demo/src/secure-login-domain/src/main/java/com/example/securelogin/domain/common/message/MessageKeys.java

単に定数として定義しても意味がありません。 せめてE5001_RESOURCE_NOT_FOUNDならいいんですが。

/** e.sl.fw.5001=Resource not found. */
public static final String E_SL_FW_5001 = "e.sl.fw.5001";

「分かりにくい」かどうか

勘違いしてはいけないのは、「即値=マジックナンバー」ではありません。 理由は、関連記事に書いている通りです。

自分の場合は以下を基準にしています。

  • 複数回出てくるところ
  • 前後のコードやドキュメントを呼んでも定数の意味が分からないところ
  • 変更される可能性があるところ

ただし、YAGNIの原則を守ってください。

定数を定義する場所

たぶんValue Objectがいいのかなぁと思います。

外部サイト