as_a_mix 2012-08-15 01:35:33

[PHP] おれは確かにASCしたつもりがDESCになっていた。』な… 何を言ってるのかわからねーと思うが(ry このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

あれ?ASCとDESCってどっちが昇順でどっちが降順だっけ?と思わせる香ばしいコードのご紹介です。

某社のとある人(Aさん)が一人で実装した某プロジェクトで使われていたSQL周りの処理をするライブラリーの中で見つけた香ばしいコードです。 一見判り難いのですが、strcasecmp($def, "asc") に罠があって、ASCを指定してるとelse ifに入ってdescだと判定されちゃう。逆にDESCを指定するとASC扱いになっちゃう。 Aさんは自分のミスに気づかずに「あれ?ASCって降順って意味だっけ?」と毎回疑問に思いながらこの香ばしいコードを5年前から使い続けていたそうです。

//ASCは降順でDESCは昇順になります
foreach ($sort as $item => $def) {
	if (strlen($sql_order_by) > 0) 	$sql_order_by .= ",";
		 if (strcasecmp($def, "asc")) 	$sql_order_by .= $item." ASC";
	else if (strcasecmp($def, "desc")) 	$sql_order_by .= $item." DESC";
}
if (strlen($sql_order_by) > 0) 	$sql_order_by = " ORDER BY ".$sql_order_by;

コメント(8)

#1 nbuy 2012-08-15 02:14:33  

ある意味一貫しているコードかも。

コメントにも書いてある通り、このシステムの中の "asc" とは SQL の DESC である、と作者が考えているならロジックとしては正しい。 ちょっとした工夫だが、if のインデントがミスリードを誘うように書かれているのも素敵だ。

メンテナを混乱させる素晴らしいウンコードである。:D

#2 masarakki 2012-08-15 05:40:20  

まず {} 省略するのがクソ

#3 toriimiyukki 2012-08-15 11:20:17  

{}がないのは

#4 math_neko 2012-08-15 15:17:46  

これは素晴らしいウンコードw

#5 yuu_hara 2012-08-15 15:21:33  

{}がないのがいただけない

#6 as_a_mix 2012-08-16 06:32:11  

みなさまコメントありがとうございます。 ぜひこのコードが無事に昇天できるようディスっていただければ幸いです。

>nbuyさん 作者の人は自分が書いたコードのせいでASCとDESCがどっちだかわかん無くなって毎回テストしてからコード書いてるそうです。書いた人自身もカオスに落とし込んだウンコードに合掌!

>masarakkiさん、yuu_haraさん 確かに{}省略は読みにくくなりますよね。いろいろウンコードです。

>math_nekoさん 書いた本人は心のそこから過去の自分を恨みながらも未だにこのコードを保守しているそうです。ウンコウンコウンコード。

#7 math_neko 2012-08-16 10:50:37  

strcasecmp を中途半端に知っていたからこそ起こった悲劇ですな

#8 m_shige1979 2012-08-20 11:56:10  

やっぱり、{}がないとわかりにくいな


このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] 専用機

このエントリーをはてなブックマークに追加

山田さん(仮名)専用機らしいことがクラス...

/**
 * My Army Knife
 * 20XX/XX/XX
 *...

鑑賞する »

[JavaScript] とっても長いswitch/case文

このエントリーをはてなブックマークに追加

配列変数を全く理解できていなかった。

var rnd = Math.floor(Math.random() * 128...

鑑賞する »

[Java] フルHD推奨。

このエントリーをはてなブックマークに追加

画面の左側がわりと無駄な気がします。

public int hoge(){
    int result = 0;
...

鑑賞する »