Help us understand the problem. What is going on with this article?

かつて見たびっくりクソ コード

概要

@rana_kualu さんの記事に触発されて、
自分が今まで見かけたなかでもヤバめのクソ コードについて書いてみる。

(元記事)
・これまで見た中で最も汚いソースコード - Qiita
https://qiita.com/rana_kualu/items/2f3c40642836c11f5ddc

クソ コード

① typedef

再現コード.c
typedef void coid;
typedef void boid;

キーボードを見ると [c] [v] [b] が並んでいる。
即ちこれは、 タイプミスを型名の再定義でカバー しているというもの。
流石にコレは プログラムではない、と思った。

② マイナス1万

変数名はとりあえず適当。

再現コード.php
$date0 = '20201122'; //画面からYYYYMMDDで文字列が来る
$date1 = $date0 -10000;
$year = substr($date1, 0, 4);
$month = substr($date1, 4, 2);
$day   = substr($date1, 6, 2);

なんだこの1万を引いている処理は・・・。
(当時の)同僚が保守中の仕組みからこのコード見つけ、一緒に悩んだ。
日付系処理では1万はキリが悪い。。。
幸いにも書いた輩が隣に居たので直接聞いてみた。

1年前を計算している

:thinking::thinking::thinking::thinking::thinking:

:astonished:なるほど!
:rage:書き直せ!:punch_tone2:

幸いにも書いた輩が高校から友人(同級生)だったので、とりあえず殴った。

日付操作は日付操作用の関数がちゃんとあるので、それを使いましょう。
(と言うか、私は静的型畑の人間なので、動的型変換の使い方にも膝が震えた。)

③ たこいかぱにっく

再現コード.java
boolean checkNumber (str) {
  boolean isNumber = !NumberUtils.isNumber(str);
  if(isNumber) {
    //エラーメッセージ処理処理
  }
  return !isNumber;
}

ツッコミどころ

  • 変数名が明らかに嘘をついている
  • 結局この関数は、また反転して戻している
  • じゃぁそもそも反転していた理由は何???

論理値(真偽値)がめちゃくちゃである。

<記載内容を削除しました>

論理値は非常に混乱しやすいので、扱いには本当に注意が必要。
私は、ポジティブな方を真、ネガティブな方を偽になる様に心がけている。

④ (追記) includeのチカラ!

@fujitanozomu さんのサンプルコード を見ていてなんとなく思い出したので追記します

再現コード.c
int tbl[] = {
  #include <list.csv>
};

こ、、、こんな使い方。。。
コンパイルのプロセスを理解しているからこその荒業!?
って思いました。

プログラミング言語において、マクロ文化は基本悪法になりましたねー・・・。
(一部の機能は後発の言語でも残っていますが)

以上

クソコードを書かない様に日々精進したいものです。

追記① 2020/06/21(日)

思ったより閲覧数が多くてビビっています。
ちょっと角が立つ部分はプライベートで問題になりそうなので、
一部記載を消しました。

追記② 2020/06/21(日)

④を追記しました。
つい思い出してしまったもので(苦笑)

追記③ 2020/06/22(日)

@sakuro さんより情報を頂きました。
元々includeされることを想定されているファイル フォーマットがある様です。
・XPM - Wikipedia
https://ja.wikipedia.org/wiki/XPM
XPMはそれ自体がC言語のソースコードの体を成している様です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした