<一覧に戻る

マジックナンバーの排除

プログラミングにおいて「マジックナンバー」とは、コード内に意味を持たずに直接書かれた数値のことを指します。これらの数値は、コードを理解しにくくし、メンテナンスを難しくする原因となります。この教材では、マジックナンバーを排除する方法を学び、リーダブルなコードを書くための実践を行います。

マジックナンバーとは?

マジックナンバーは、特定の意味や目的を持たずに、直接コードに埋め込まれた数値です。例えば、以下のようなコードがあります。

def calculate_area(radius):
    return 3.14 * radius * radius

このコードでは、3.14がマジックナンバーです。この数値が円周率であることは知っている人も多いですが、他の人には意味が伝わりません。

マジックナンバーを排除する理由

  1. 可読性の向上: コードを読む人が、数値の意味を瞬時に理解できるようになります。
  2. メンテナンスの容易さ: 数値の変更が必要な場合、定義された定数を一箇所変更するだけで済みます。
  3. エラーの防止: 数値が何を意味するのかを明示することで、誤解を防ぎます。

マジックナンバーの排除方法

マジックナンバーを排除するには、意味のある定数を定義し、その定数を使用するようにします。以下のサンプルコードを通じて、どのようにマジックナンバーを排除できるかを見ていきましょう。

サンプルコード

まず、マジックナンバーを含む基本的な円の面積を計算する関数を見てみましょう。

def calculate_circle_area(radius):
    return 3.14 * radius * radius

このコードを修正して、マジックナンバーを排除します。まず、円周率を定数として定義します。

PI = 3.14  # 円周率

def calculate_circle_area(radius):
    return PI * radius * radius

このように、PIという名前の定数を作成することで、マジックナンバーを排除しました。これにより、コードの可読性が向上しました。

さらに進めてみましょう

次に、円の面積を計算するプログラムに、複数の円の面積を計算する機能を追加してみます。ここでも、マジックナンバーを排除する良い例を見てみましょう。

def calculate_circle_area(radius):
    PI = 3.14  # 円周率
    return PI * radius * radius

def calculate_total_area(radii):
    total_area = 0
    for radius in radii:
        total_area += calculate_circle_area(radius)
    return total_area

radii_list = [1, 2, 3, 4]
total_area = calculate_total_area(radii_list)
print("Total area:", total_area)

このコードでは、円の半径のリストを受け取り、それぞれの円の面積を計算して合計を返す関数calculate_total_areaを定義しています。

定数の活用

さらなる改善として、円周率を定数として外部に配置して、全体で使えるようにします。

PI = 3.14  # 円周率

def calculate_circle_area(radius):
    return PI * radius * radius

def calculate_total_area(radii):
    total_area = 0
    for radius in radii:
        total_area += calculate_circle_area(radius)
    return total_area

radii_list = [1, 2, 3, 4]
total_area = calculate_total_area(radii_list)
print("Total area:", total_area)

このように、PIを関数の外に定義することで、他の関数からも円周率を利用できるようになりました。

まとめ

マジックナンバーを排除することは、コードの可読性とメンテナンス性を向上させるために非常に重要です。意味のある名前を持つ定数を使用することで、コードの理解が容易になり、エラーを防ぐことができます。次回のコーディングでは、マジックナンバーが存在しないかを確認し、リーダブルなコードを目指しましょう。

出力結果: