Section 5 / 6
冗長性の排除
「同じことを何度も書いてしまっていませんか?」「もっと短く書ける気がするけど、どう直せばいいのかわからない…」そんなモヤモヤは、Pythonの“冗長性の排除”を意識することで解消できます。
冗長性(じょうちょうせい)とは、意味の重複やムダな書き方のこと。放っておくとコードが読みにくくなり、修正もしづらく、思わぬバグの温床にもなります。このセクションでは、Python初心者・IT初心者の方にもわかりやすく、冗長性を減らして読みやすいコードにする考え方と具体例を学びましょう。
冗長なコードの例
まずは具体例を見て、どこが冗長なのかを体感してみましょう。
次のコードは、商品の価格リストを合計し、税率をかけて最終的な金額を返す関数です。動作はしますが、書き方にムダがあります。
def calculate_total_price(prices, tax_rate):
total = 0
for price in prices:
total = total + price
total_with_tax = total + (total * tax_rate)
return total_with_tax
一見シンプルに見えますが、よく読むと「合計の出し方」と「税金の足し方」に重複表現があります。もしあなたが明日このコードをもう一度読んだら、一瞬「何をしているんだっけ?」と考えてしまうかもしれません。
冗長性を排除する方法
ここでは、先ほどのコードをPythonらしく短く、そして読みやすく書き直してみます。
短くすることが目的ではなく、意図がまっすぐ伝わるように整えるのがポイントです。
def calculate_total_price(prices, tax_rate):
total = sum(prices) # 合計を出す標準関数を活用
return total * (1 + tax_rate) # 税込金額を一行で計算
どこが良くなったのか、自然な流れで確認しましょう。
まず、合計の計算はPython標準のsum関数に任せています。sumは「合計を求めたい」という意図をそのまま表現できるため、ループを書き回す必要がありません。
読み手は「ここで合計しているんだな」と一瞬で理解できます。次に、税金の加算は「合計に税率をかけて足す」を「合計 × (1 + 税率)」と一行で表しています。中間変数を無理に作らず、計算式の意味がそのまま伝わる形になりました。「短いけど読みやすい」状態を実現できていますね。
冗長性の排除のポイント
実際の現場では、どんなところに冗長さが潜んでいるのでしょうか?
ここでは、日常的に効くチェックポイントを紹介します。難しい専門用語は覚えなくても大丈夫。ムダを見つけて、より素直な表現に置き換える意識を持てば十分です。
- 【繰り返しの排除】 同じ処理を何度も書いていないか見直しましょう。同じ式や同じロジックが2回以上出てきたら、関数化や変数の活用を検討します。
- 【簡潔な表現の選択】 Pythonにはsum、max、min、any、allなど「意図をそのまま表す」関数が揃っています。回り道のループより、適切な関数を選ぶほうが読み手に優しいことが多いです。
- 【標準ライブラリの活用】 自前で書くより、信頼できる標準の道具を使うほうが安全で読みやすくなります。たとえば文字列結合は+で繰り返すより"".join(...)を使う、といった基本も冗長性の削減につながります。
- 【中間変数の使いすぎに注意】 中間結果を置く変数は「読みやすさ」が増すときにだけ使います。「とりあえず置いておく」だけの変数は、むしろ読み手を迷わせます。
- 【一行至上主義にしない】 ただ短ければ良いわけではありません。「意図が素直に読めるか」を基準にしましょう。必要なときは適切に改行や変数名で補助します。
実践してみよう
ここからは、あなたの手で冗長性を取り除いてみましょう。
次の関数は、割引後の価格を返すコードです。合ってはいますが、少し遠回りな書き方になっています。「もっと直感的に書けないかな?」と考えながら取り組んでみてください。
def calculate_discounted_price(original_price, discount_rate):
discount = original_price * discount_rate
discounted_price = original_price - discount
return discounted_price
冗長さをなくすコツは、「式の意味がそのまま伝わる形」に整えることです。ここでは「元の価格 × (1 − 割引率)」とするのが一番ストレートですね。中間変数を無理に作らず、意図を式に込めてしまいましょう。
def calculate_discounted_price(original_price, discount_rate):
return original_price * (1 - discount_rate)
どうでしょうか。先ほどより短くなり、読む人が「割引後の価格を計算している」ことをすぐに理解できる形になりました。もし割引の計算を別の関数でも使い回すなら、同じ考え方で簡潔な実装が広がっていきます。
まとめ
冗長性の排除は、Pythonでリーダブルなコード(読みやすいコード)を書くための基本スキルです。ムダなループや不要な中間変数をなくし、sumなどの標準関数や表現力の高い構文を選ぶだけで、可読性と保守性はぐっと上がります。とはいえ、短さだけを追い求める必要はありません。大切なのは「意図がまっすぐ伝わること」。あなたの未来の自分やチームメイトが読みやすいかどうか、いつも少しだけ想像して書いてみましょう。今日から小さな冗長さを一つずつ減らすだけで、コードは確実に洗練されていきます。
このトピックの他のセクション:
- Pythonの命名規則
- 意味のある変数名・関数名を使う
- マジックナンバーの排除
- コメントの活用
- 冗長性の排除(現在表示中)
- 関数の分割