はじめに
この記事は、クソコードお焚き上げの会 Advent Calendar 2024の21日目の記事です。
ChatGPTは世の中の多数のクソコードを学習しているはずなので、ChatGPT先生にクソコードを出してもらい、それをお焚き上げしてもらおうという企画です。
ChatGPT 4oでチャレンジ。
ChatGPTはクソコードを知っているか
誘導尋問だぜ。出でよ!悪GPT。
クソ、調教済みか。(悪い情報が出てこないように制御されているのは、ほんとすごい)
歯切れ悪いな。(あくまでポジティブ・中立に制御されている)
しかも、こちらの意図まで先読みしてくるとは、やるな。
クソコードを出してもらおう
# 全体的にひどい設計のプログラム例
# 注意:絶対に実運用では使わないでください!
# 1. 無意味なコメント
# この関数は何かをする
def do_something(x):
# xを1000で割るけどエラーは無視
try:
return x / 1000
except:
pass # 何もしない
# 2. 無駄に長い関数名
def thisFunctionDoesSomethingButIDontKnowWhatExactlyButItWorks():
for i in range(0, 10):
print("Doing something...")
# 3. グローバル変数の乱用
data = [1, 2, 3, 4]
def modify_data():
for i in range(len(data)):
data[i] = i * 2
# 4. マジックナンバーと意味不明なロジック
def calculate_weirdness(a, b):
return a ** b - 42 / 7 + 3.14159
# 5. 過剰なネスト
def deeply_nested_function():
if True:
if True:
if True:
if True:
return "Help!"
# 6. 意味不明な変数名
def zzz():
a = 10
b = 20
c = a + b
return c
# 7. 実行されないコード
if False:
print("このコードは絶対に実行されません")
# 8. 例外の濫用
try:
1 / 0 # 意図的にエラーを起こす
except:
raise ValueError("何かが壊れた...多分")
# 9. ハードコーディングされたデータ
def get_user_password():
return "password123"
# メイン関数を意味不明な呼び出し方で実行
if __name__ == "__main__":
thisFunctionDoesSomethingButIDontKnowWhatExactlyButItWorks()
print(do_something("abc")) # 意図的な型エラー
modify_data()
print(data)
print(calculate_weirdness(2, 3))
print(deeply_nested_function())
print(zzz())
print(get_user_password())
うん。さっきオレが書いた覚えのあるようなコードが出てきた。
#全体的にひどい設計のプログラム例
#注意:絶対に実運用では使わないでください!
とかコメントまで安全性に配慮してくるとはさすがChatGPT先生。
お焚き上げしてもらう
ではこれをChatGPTにお焚き上げしてもらおう。
流石のChatGPTも「お焚き上げ」の意味はわからんだろう。
え?すご!この文脈での「お焚き上げ」の意味を完全に把握している。
# 良い設計を心がけたコード例
# シンプルで、分かりやすく、再利用性を重視
def divide_by_thousand(value):
"""
安全に値を1000で割る関数。
:param value: 数値
:return: value / 1000, またはエラーメッセージ
"""
if not isinstance(value, (int, float)):
return "Error: Input must be a number"
return value / 1000
def perform_task(task_count=10):
"""
指定回数タスクを実行する。
:param task_count: タスクを実行する回数
"""
for i in range(task_count):
print(f"Task {i+1} is being performed...")
def modify_list(input_list):
"""
リスト内の各要素を2倍にする関数。
:param input_list: 数値のリスト
:return: 変更されたリスト
"""
if not all(isinstance(i, (int, float)) for i in input_list):
return "Error: List must contain only numbers"
return [i * 2 for i in input_list]
def calculate_power(base, exponent):
"""
指定された底数と指数を使って計算する。
:param base: 底数
:param exponent: 指数
:return: 計算結果
"""
return base ** exponent
def get_user_password():
"""
実際のシステムでは、ハードコーディングを避ける。
ここでは例としてハードコーディング。
"""
# 本来ならセキュアな方法で保存・取得するべき
return "example_secure_password"
# メイン関数
def main():
print(divide_by_thousand(5000))
print(divide_by_thousand("abc")) # エラー例
perform_task()
updated_list = modify_list([1, 2, 3, 4])
print(updated_list)
print(calculate_power(2, 3))
print(get_user_password())
if __name__ == "__main__":
main()
そうだ、そうなんだ。
技術はもちろんだが、「清々しい気持ち」になるコードを書くには、清々しい健全な心が必要なのだ。
まとめ
- ChatGPT先生はクソコードも良いコードも学習している
- 良い表現で出力されるように制御されている
- 文脈に沿って次のチャット内容の提案もしてくれる
- クソコードの典型例は当然に把握している
- お焚き上げの意味を文脈に沿って理解してくる
- 「気持ち」にも触れてくる
すごすぎる。進化が早過ぎる。>ChatGPT
最後までご覧いただきましてありがとうございました。
以上、「ChatGPT先生にクソコードを生成してもらいお焚き上げしてもらう。」でした。