0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのクソコードを改善してみた

Last updated at Posted at 2025-02-13

はじめに

こんにちは。今日はクソコードを改善したい気分なので、Pythonでありがちなクソコードを5つほど取り上げ、修正していきたいと思います。

クソコードとは?

クソコードとは、一言で言うと 「読みにくい、理解しづらい、メンテナンスしにくいコード」 のことです。動作はするものの、以下のような特徴のあるコードが該当します。

  • 可読性が低い : 変数名や関数名が意味不明で、何をしているか理解しづらい
  • 冗長な処理 : 無駄なコードが多く。短く書けるものを長々と書いている
  • エラー処理が雑 : エラー時の挙動が曖昧で、デバッグが困難
    ⇒コードの可読性は、自分だけでなく他人にとっても重要な要素です。未来の自分を他人だと思って改善していきましょう。

実例紹介

では、具体的なクソコードを見て、その問題点と改善方法を紹介します。

1.無駄なグローバル変数の多用

クソコード例

sample.py
# グローバル変数を乱用したコード
a = 10
b = 20

def add():
    return a + b

def multiply():
    return a * b

print(add())
print(multiply())

問題点

  • グローバル変数の乱用 → 他の関数と競合する可能性があり、バグの温床になる
  • 関数が引数を取らない → 汎用性が低く、再利用が難しい

改善例

sample.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

print(add(10, 20))
print(multiply(10, 20))

改善ポイント

  • 引数を使うことで関数の汎用性が向上する
  • グローバル変数を排除することで、コードの予測可能性が高まる

2.ネストが深すぎるコード

クソコード例

sample.py
def check_value(x):
    if x > 0:
        if x % 2 == 0:
            if x > 10:
                return "10より大きい偶数"
            else:
                return "10以下の偶数"
        else:
            return "奇数"
    else:
        return "0以下"

問題点

  • ネストが深い → 可読性の面で非常に悪く、後から修正が困難になる
  • else文の多用 → ロジックが複雑化しやすい

改善例

sample.py
def check_value(x):
    if x <= 0:
        return "0以下"
    if x % 2 == 0:
        return "10より大きい偶数" if x > 10 else "10以下の偶数"
    return "奇数"

改善ポイント

  • 早期リターンを使い、ネストを浅くして読みやすくしている

3.意味不明な変数名

クソコード例

sample.py
def f(x, y):
    z = x * y + y / x
    return z

問題点

  • 変数名が不明確 → 何を意味うるか分からず、コードの意図を理解しづらい
  • 可読性が低い → 何を計算しているか一目でわからない

改善例

sample.py
def calculate_area_with_margin(length, width):
    area = length * width + width / length
    return area

改善ポイント

  • 意味のある変数名・関数名をつけることで、コードの意図が分かりやすくなる

4.無駄な処理が多い

クソコード例

sample.py
numbers = [1, 2, 3, 4, 5]
result = []

for i in range(len(numbers)):
    result.append(numbers[i] * 2)

問題点

  • 冗長なforループ → Pythonの特性を活かせていない
  • 可読性が低い

改善例

sample.py
numbers = [1, 2, 3, 4, 5]
result = [x * 2 for x in numbers]

改善ポイント

  • リスト内包表記を使うことで、コードが短くシンプルになる

5.エラー処理が雑

クソコード例

sample.py
def divide(x, y):
    try:
        return x / y
    except:
        return "エラーが発生しました"

問題点

  • exceptの処理が曖昧 → どんなエラーか不明で、デバッグが困難
  • 適切なエラーメッセージがない

改善例

sample.py
def divide(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        return "0で割ることはできません"
    except TypeError:
        return "入力値が数値ではありません"

改善ポイント

  • 具体的な例外を処理することで、エラーの原因が明確になる

まとめ

今回紹介したクソコードは、Python初心者がつまずきやすいポイントです。しかし、改善することでコードの可読性やメンテナンス性が向上します。最後にコードを書く際に意識しておきたいポイントをまとめます。

  • 変数名・関数名をわかりやすくする。
  • ネストを浅くする。
  • 無駄な処理を省く
  • エラー処理を丁寧に行う

最後まで読んでくださり、ありがとうございました。もし改善点や質問があれば、ぜひコメントしてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?