<一覧に戻る

関数の分割

関数の分割は、コードの可読性や再利用性を向上させるために重要なテクニックです。大きな関数を小さく、特定のタスクを行う関数に分割することで、コードの理解が容易になり、バグの発見や修正がしやすくなります。この教材では、関数の分割の重要性とその実践方法を学ぶため、サンプルコードを通じて説明します。

1. サンプルコードの概要

以下に示すサンプルコードは、単純な計算を行うプログラムです。このプログラムは、リストの平均を計算し、標準偏差を求める機能を持っています。しかし、全ての処理が一つの関数にまとめられているため、可読性が低く、メンテナンスが難しくなっています。

def calculate_statistics(numbers):
    if not numbers:
        return None, None

    total = 0
    for number in numbers:
        total += number
    mean = total / len(numbers)

    variance = 0
    for number in numbers:
        variance += (number - mean) ** 2
    variance /= len(numbers)
    std_deviation = variance ** 0.5

    return mean, std_deviation

numbers = [10, 20, 30, 40, 50]
mean, std_deviation = calculate_statistics(numbers)
print(f'Mean: {mean}, Standard Deviation: {std_deviation}')

コードの解説

上記のコードでは、calculate_statistics関数が全ての処理を行っています。具体的には以下のステップで動作します:

  1. リストが空でないかを確認します。
  2. リストの合計を計算します。
  3. 平均を計算します。
  4. 分散を計算し、標準偏差を求めます。
  5. 最後に平均と標準偏差を返します。

このアプローチは、関数が多くの責任を持っているため、今後の拡張や修正が難しくなります。

2. 関数の分割による改善

次に、上記のコードを関数に分割して、可読性と再利用性を向上させます。以下に示すのは、各タスクを独立した関数に分けた改善版のコードです。

def calculate_mean(numbers):
    return sum(numbers) / len(numbers)

def calculate_variance(numbers, mean):
    variance = sum((number - mean) ** 2 for number in numbers) / len(numbers)
    return variance

def calculate_statistics(numbers):
    if not numbers:
        return None, None

    mean = calculate_mean(numbers)
    variance = calculate_variance(numbers, mean)
    std_deviation = variance ** 0.5

    return mean, std_deviation

numbers = [10, 20, 30, 40, 50]
mean, std_deviation = calculate_statistics(numbers)
print(f'Mean: {mean}, Standard Deviation: {std_deviation}')

改善点の解説

  1. calculate_mean関数:

    • リストの平均を計算します。
    • この関数は、単一責任原則に従い、計算の一部を担当します。
  2. calculate_variance関数:

    • 平均を受け取り、分散を計算します。
    • 平均を受け取ることで、関数の再利用性が向上します。
  3. calculate_statistics関数:

    • 最初にリストが空でないかを確認します。
    • 平均と分散を計算するために、他の関数を呼び出します。

このように関数を分割することで、各関数が明確な役割を持ち、コードの理解が容易になります。さらに、特定の関数だけをテストしたり、修正したりすることが簡単になります。

3. まとめ

関数の分割は、コードの可読性や再利用性を向上させるための重要な手法です。大きな関数を小さな関数に分けることで、各関数が特定のタスクを担当し、コード全体の理解が容易になります。上記の例を参考に、自分のコードでも関数の分割を実践してみましょう。

出力結果: