Py初めてのPython

Day 4関数・モジュール(再利用と部品化)

なぜ関数にするのか(重複排除・テスト・説明しやすさ)

関数化がもたらす3つの利点(重複排除・テスト・説明のしやすさ)を理解する。

同じコードを繰り返さない(重複排除)

同じ処理をあちこちにコピーして貼り付けると、後で仕様が変わったとき全部を直す羽目になります。1か所でも直し忘れるとバグです。関数にまとめておけば、直す場所は関数の中だけで済みます。

重複したコード

PYTHON
price1 = 1000
tax1 = price1 * 0.1
total1 = price1 + tax1

price2 = 2000
tax2 = price2 * 0.1
total2 = price2 + tax2
# 税率が変わったら両方直す必要がある

関数にまとめる

PYTHON
def with_tax(price, rate=0.1):
    return price + price * rate

total1 = with_tax(1000)
total2 = with_tax(2000)
# 税率の変更は関数の中だけ直せばよい

DRY原則

「Don't Repeat Yourself(繰り返すな)」という有名な考え方があります。同じ知識(ここでは税率の計算)はコードの中に1か所だけ書く、という指針です。関数はこの原則を実現する基本の道具です。

テストしやすくなる

処理が関数として独立していると、「この入力ならこの出力になるはず」と単体で確認できます。プログラム全体を動かさなくても、関数だけを呼んで結果を確かめられます。これが後々、動作の保証やAIに直してもらった後の確認で効いてきます。

PYTHON
def with_tax(price, rate=0.1):
    return price + price * rate

# 関数だけを試して結果を確認する
print(with_tax(1000))     # 1100.0 になるはず
print(with_tax(0))        # 0.0 になるはず
print(with_tax(1000, 0))  # 1000.0 になるはず(税率0)
関数単位で入力と期待する出力を確かめる

AIにはこう聞く

「この関数のテストケースを考えて。正常系と、境界値や異常系も出して」と頼むと、確認すべき入力の候補を挙げてくれます。ただし「その関数が何を正しいとするか」は人が決めることなので、出てきた期待値が本当に正しいかは自分で判断します。

説明しやすくなる(名前が意図を語る)

関数に良い名前を付けると、その名前自体が「何をするか」の説明になります。with_tax(1000) と書いてあれば、中身を読まなくても「税込みにしているんだな」と分かります。名前は最初のドキュメントです。

何をしているか読まないと分からない

PYTHON
x = p + p * 0.1

名前が意図を語る

PYTHON
total = with_tax(price)

何でも関数にすればいいわけではない

細かすぎる関数を大量に作ると、逆に処理の流れが追いにくくなります。目安は「繰り返し使う」「名前を付けると意図が伝わる」「まとまった一つの仕事になっている」こと。1回しか使わず名前も付けにくいものは、無理に関数化しなくて構いません。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

同じ計算を複数箇所にコピーして書くことの主な問題点はどれ?

Q2

関数化によって「テストしやすくなる」と言えるのはなぜ?

Q3

「なぜ処理を関数にまとめるのか」を、利点を3つ挙げて説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。