日常に潜むクソコード

読み終えるまでの目安: 10分

目次

概要

コードを書く機会をもっていると、当然ながらいろんな人のコードを読むことになる
仕事であればチームメンバーの書いたものかもしれない
趣味であっても、インターネットで公開されているコードを参照することは多々あるはず

すると、中には「恐ろしいコードだ…」と震え上がるようなものもあったことと思う
恐ろしいだけで済んだらまだ幸運かもしれない
私は読んでいて気分が悪くなったこともある

とはいえ、当然だが私も初心者の頃はひどいコードを書いていた
なので、ひどいコードを見る度に「ああ、私にもこんな時期があったなあ…」と思ったり「クソを憎んで人を憎まず」と唱えたりして心を落ち着かせている

今回は、鉄板ネタも含め私が目にした「日常に潜むクソコード」を取り上げてみる
なお、詳細を隠さなければならず、説明が抽象的になってしまうと思うが許してほしい

でかすぎるループ

for
    ...
    for
        ...
        for
            ...
            if A:
                continue
            ...
            if B:
                break
        if C:
            break
        ...

でかすぎんだろ…

どういう条件で何が起きるのか、読み取るのは不可能に近い

ループが深くなるようであれば、関数に切り出すといった対策を講じよう

ピンと来ないクラス名

class Context:
    ...

Context…?????
直訳すると文脈?何の??

ちなみに、実態としてこれはかなり広い処理を担当しているクラスだった
入力の csvファイルを読み取り、それをもとに HTTPリクエストをたくさん送り、最後に結果をファイルに出力して…
Strategyパターンで実装しているというわけでもない

そもそも役割が多すぎる
当然、命名は難しくなるわけだけど、これはもう投げ出してるよね…

適切な命名が思いつかないときは設計を見直そう

不揃いな僕ら (インデント)

#!/bin/bash

if [ ... ]; then
  echo ...
fi

if [ ... ]; then
    echo ...
    for ...; do
    echo ...
    done
   echo ...
fi

どうか…どうかインデントだけは揃えてください…

まず、スペースの数は統一してほしい
なんなら同じ if の範囲内でも揃ってないってどういうことだよ
for の後もちゃんとインデントしようね

たしかに、シェルスクリプトではインデントができてなくても処理に影響しないね
でも、Pythonってインデントが適切にできてないと構文エラーになるじゃん?
あれって「インデントもできないやつはコードを書くな」ってことだと思うんだ

よりによってそのワードか…

#!/bin/bash

expect -c "
spawn ssh user@192.168.1.1
expect \"assword:\"
...

_人人人人人人人_
> ケツワード <
 ̄Y^Y^Y^Y^Y^Y^Y^ ̄

そういうクソではない
先頭の Pが大文字か小文字かわからなかったんだね…

おわりに

今回はこのあたりにしておく
いくつかの例を紹介してきたが、抽象化したので少し物足りなかったかもしれない
解説するのが大変だったため取り上げていないが、アルゴリズムやパフォーマンス的な観点で壊滅的な例もあった

なんなら、これらはまだまだ序の口だとも思う
私が直接お目にかかったことがないだけで、暗黒大陸で魔王が書いたかのような闇のコードが存在するようだ
これについては「クソコード」とかでググってもらうとよくわかると思う

ただ、ここで取り上げたものは私が実際に目にしたものなので、おそらく日常に溢れている
みなさんにも「クソを憎んで人を憎まず」という言葉を贈って終わりにしようと思う

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください