最初に書いても動くけどさぁ
switch ($condition) { case STATUS_A: default: // STATUS_Bでないときの処理 break; case STATUS_B: // STATUS_Bであるときの処理 break; }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
STATUS_Bの立場は…
このコード「breakがないとその下まで処理してくれちゃう」を活用してるせいでこうなってるんだわ。分岐としてはA+default , default ,B の3つに分かれる。「breakなし」と「defaultどこにおいても大丈夫」両方の仕様をわかってない人があとからつつくと危険。強いて言うなら「Aのみの処理系がないならBとdefaultだけでいいでしょ」ってところか。
これなんでウンコって言われてんの? STATUS_Bであるかどうかで処理を分けたくて STATUS_Aであるときの処理を速くしたくて 未知の値もつかまえたいならこれでOKだと思うんだけど
K&RのCの時代から、switchは、これOKだよね。
>nariakiiwatani こんな感じにdefaultを最後におく書き方が一般的だからでしょうね。人によっては面食らう気持ちもわかります。
switch(...){
case STATUS_B:
// 処理B
break;
case STATUS_A:
default:
// デフォルト処理
break;
}
PHPの実装の詳細は知りませんが、プログラミング一般でいうswitchは値をテーブル検索するので並び順序で評価速度や順序がかわったりしないはずです。
oe_roel コメントありがとうございます。caseに整数以外が許されると素直にテーブルにダイレクトアクセスできないので検索のコストを問題にする価値はあるとは思いますが、問題はそこじゃないですね。余計なこと書いちゃいました。失礼。 要は、defaultが最後にかかれるべきっていう主張を盲目的にする方がむしろウンコをはらんでる気がしての書き込みでした。 ま、ま、ま、この辺の論争は泥沼になりがちなのでこのへんで・・・
C言語だけど、何かのジェネレーターでコードを生成してみたら、defaultがいちばん上にある&&どんどんフォールスルーする&&明示してある値だと処理の途中に飛び込む、なんていう今までの常識を全て覆していくようなコードができあがったことがあったなあ(もちろん、正しく動作しました)。
コメント投稿には、twitter認証が必要です。
Twitter認証
動くんだ・・・すげー不安(笑)