【Java】#俺が見たクソコード選手権 個人的メモ
個人的にはこれが一番衝撃的だった。 きっと何かトラウマがあったんだと思う。
— Norihisa Miyakawa (@m_nori) 2012年4月3日
x = y;
x = y; // 不安だからもう一回 #俺が見たクソコード選手権
基本的に笑いながら読んでたんですが、
新人向けの問題(ソースを読んでバグを発見してもらう練習)とかに使えそうなものもあったので、
備忘も兼ねてメモしておきます。
・if (true), if (false)
if(a == true){ /* 処理 */ }
例はちょっと改変しましたが、
boolean型の変数なのに、わざわざtrue/falseの判定をイコールで行っているケースって割りとありますよね。
別に全然クソコードではないんですが、
if (a) { /* 処理 */ }
でいいんだからそうしよう、という個人的な話。
・if条件とcase条件がごっちゃになってる奴~www
if (5 <= n) { /* 5超えた処理 */ } else if (10 <= n) { /* 10超えた処理 */ }
下のifの中には絶対に到達しませんね。
割と新人の問題用に使えそう。
・無限ループやばい
for(i = 0; i < 100; j++){ /* 処理 */ }
iとjを間違えている。
打ち間違えることはほぼ有り得ないと思うので、
jでループしてたのをコピペしてきてインクリメントだけ修正忘れたとかかな。
・無限ループやばい(2回目)
while(i <= n){ /* 処理 */ n++; i++; }
なぜnをインクリメントしているのか。
まぁここまでわかりやすいのは別としても、whileの条件が複雑になっている場合なんかには、
ループ内で変数いじった結果、絶対にループを抜けられないようになっていることはたま~にあります。
再帰呼び出しとかしてるとやばいですね。
おわり。