DrunkenDad_KOBA 2012-08-01 07:51:24

[PHP] defaultは最後に書こうぜ このエントリーをはてなブックマークに追加

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

最初に書いても動くけどさぁ

switch ($condition) {
    case STATUS_A:
    default:
        // STATUS_Bでないときの処理
        break;
    case STATUS_B:
        // STATUS_Bであるときの処理
        break;
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(15)

#1 rhosoi 2012-08-01 07:58:11  

動くんだ・・・すげー不安(笑)

#2 okb_m 2012-08-05 04:46:21  

え?これ動くの!? しらんかった・・・

#3 _john_doe_ 2012-08-14 04:23:48  

STATUS_Bの立場は…

#4 mironal 2012-08-14 04:34:08  

これは気持ち悪い

#5 rela1470 2012-08-14 07:05:34  

そうなの!? switchでdefaultを先に書いても動くのか...

#7 Miraranran 2012-08-14 09:26:14  

このコード「breakがないとその下まで処理してくれちゃう」を活用してるせいでこうなってるんだわ。分岐としてはA+default , default ,B の3つに分かれる。「breakなし」と「defaultどこにおいても大丈夫」両方の仕様をわかってない人があとからつつくと危険。強いて言うなら「Aのみの処理系がないならBとdefaultだけでいいでしょ」ってところか。

#8 s025236 2012-08-14 13:44:32  

むしろこれを意図通り処理できるphpがうんこーどwww

#9 nariakiiwatani 2012-08-14 16:03:22  

これなんでウンコって言われてんの? STATUS_Bであるかどうかで処理を分けたくて STATUS_Aであるときの処理を速くしたくて 未知の値もつかまえたいならこれでOKだと思うんだけど

#10 defocuslight 2012-08-14 16:04:25  

K&RのCの時代から、switchは、これOKだよね。

#11 oe_roel 2012-08-14 16:12:41  

>nariakiiwatani こんな感じにdefaultを最後におく書き方が一般的だからでしょうね。人によっては面食らう気持ちもわかります。

switch(...){
case STATUS_B:
    // 処理B
    break;
case STATUS_A:
default:
    // デフォルト処理
    break;
}

PHPの実装の詳細は知りませんが、プログラミング一般でいうswitchは値をテーブル検索するので並び順序で評価速度や順序がかわったりしないはずです。

#12 nariakiiwatani 2012-08-14 16:32:15  

oe_roel コメントありがとうございます。caseに整数以外が許されると素直にテーブルにダイレクトアクセスできないので検索のコストを問題にする価値はあるとは思いますが、問題はそこじゃないですね。余計なこと書いちゃいました。失礼。 要は、defaultが最後にかかれるべきっていう主張を盲目的にする方がむしろウンコをはらんでる気がしての書き込みでした。 ま、ま、ま、この辺の論争は泥沼になりがちなのでこのへんで・・・

#13 PG_kura 2012-08-14 17:44:42  

+1. Good!! > nariakiiwatani

#14 jkr_2255 2013-03-01 14:22:18  

C言語だけど、何かのジェネレーターでコードを生成してみたら、defaultがいちばん上にある&&どんどんフォールスルーする&&明示してある値だと処理の途中に飛び込む、なんていう今までの常識を全て覆していくようなコードができあがったことがあったなあ(もちろん、正しく動作しました)。

#15 S_F__ 2013-12-02 05:12:12  

STATUS_Aいらんだろ

コメント投稿には、twitter認証が必要です。

Twitter認証

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

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

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

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

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

鑑賞する »

[PHP] $select2「$selectがやられ...

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

コメントはすべて原文にはないものです

<?php

// 注: 実際のファイル名はちゃんとしたものです
incl...

鑑賞する »

[C] すげーちゃんと動く!

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

結合試験2日前に脱退したうんkプログラマ...

return 0;

鑑賞する »