不変の活用
4-1

ローカル変数の再代入をやめる

1つの変数に「小計」「税込額」「最終額」と次々に別の意味の値を上書きしていくと、途中のどの時点で何の金額なのかをコードを上から追わないと分からなくなる。計算の各段階に専用の変数名を与えれば、再代入は自然と消え、途中の値もすべて確認できるようになる。

請求書の最終請求額の計算

Bad

tmp という1つの変数が、小計→値引後→税込→源泉控除後と意味を変えながら使い回される

再代入で意味が変遷する変数
def invoice_total(items: list[LineItem], discount: int) -> int:
    tmp = sum(item.unit_price * item.quantity for item in items)
    # 値引きを反映
    tmp = tmp - discount
    # 消費税10%を上乗せ
    tmp = int(tmp * 1.10)
    # 源泉徴収税を差し引く
    tmp = tmp - int(tmp * 0.1021)
    return tmp
Good

計算の段階ごとに変数を分け、それぞれの金額に名前を付ける

1変数1役割
def invoice_total(items: list[LineItem], discount: int) -> int:
    subtotal = sum(item.unit_price * item.quantity for item in items)
    discounted = subtotal - discount
    tax_included = int(discounted * 1.10)
    withholding = int(tax_included * 0.1021)
    return tax_included - withholding

Java なら final を付けて再代入をコンパイルエラーにできるが、Python にその構文はない。代わりに「1変数1役割」を守ればよい。値引前の小計と源泉控除額がそれぞれ名前付きで残るので、請求書のどの行が合わないかをデバッグするときにも途中の金額をそのまま print できる。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第4章。コード例は原則を自分の題材で表現し直したオリジナル。
4-1

ローカル変数の再代入をやめる

1つの変数に「小計」「税込額」「最終額」と次々に別の意味の値を上書きしていくと、途中のどの時点で何の金額なのかをコードを上から追わないと分からなくなる。計算の各段階に専用の変数名を与えれば、再代入は自然と消え、途中の値もすべて確認できるようになる。

請求書の最終請求額の計算

Bad

tmp という1つの変数が、小計→値引後→税込→源泉控除後と意味を変えながら使い回される

再代入で意味が変遷する変数
def invoice_total(items: list[LineItem], discount: int) -> int:
    tmp = sum(item.unit_price * item.quantity for item in items)
    # 値引きを反映
    tmp = tmp - discount
    # 消費税10%を上乗せ
    tmp = int(tmp * 1.10)
    # 源泉徴収税を差し引く
    tmp = tmp - int(tmp * 0.1021)
    return tmp
Good

計算の段階ごとに変数を分け、それぞれの金額に名前を付ける

1変数1役割
def invoice_total(items: list[LineItem], discount: int) -> int:
    subtotal = sum(item.unit_price * item.quantity for item in items)
    discounted = subtotal - discount
    tax_included = int(discounted * 1.10)
    withholding = int(tax_included * 0.1021)
    return tax_included - withholding

Java なら final を付けて再代入をコンパイルエラーにできるが、Python にその構文はない。代わりに「1変数1役割」を守ればよい。値引前の小計と源泉控除額がそれぞれ名前付きで残るので、請求書のどの行が合わないかをデバッグするときにも途中の金額をそのまま print できる。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第4章。コード例は原則を自分の題材で表現し直したオリジナル。