- ベストアンサー
条件分岐(if)について
- 条件分岐(if)についてお聞きしたことがあります。条件分岐の書き方や見やすさについて疑問があります。
- 条件分岐の書き方は複雑になる場合もあります。条件分岐の記述方法やプログラムの可読性について知りたいです。
- 条件分岐を短く記述する方法があるのか知りたいです。条件式の見やすさについて教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
・条件分岐この後も数十個続いたとします。その場合もelse ifで一つ一つ 条件を書かなければならないのでしょうか? あるいは#1の回答にあるようにswitchを使うかでしょう。 三項演算子はよほど気をつけて使わないと何をしているのか意味不明なコードを量産するので、素人にはお勧めできません。 ・条件式if($a == 'A' || $a == 'B'....)が長くなる場合プログラムが見にくくなるので 別途に条件式を書いておいてif文の所では($a == ◯)といったように簡潔に書くことは できないのでしょうか? $a == ○という書き方はできませんが、条件判定をする関数なら書けます。 function condition1($a) { return $a == 'A' || $a == 'B'; } if (condition1($a)) { 処理 } のような感じで。 あるいは、連想配列を作って、キーにマッチした場合に特定の処理をするという場合はこういう書き方もできます。 function normal_print($x) { echo $x; } function hello_print($x) { echo "hello " . $x; } $rules = array( 'A' => normal_print, 'B' => hello_print, 'C' => hello_print, ); $in = 'B'; foreach ($rules as $charactor => $procedure) { if ($in == $charactor) { $procedure($in); } } こうすると、連想配列のキー一つ一つとマッチングをとって、マッチした場合は値として入っている関数を呼び出します。なお、関数が実行されるのは別のスコープになるので引数でちゃんと必要な値を渡しておく必要があり、元の環境の値を変更する場合はそういう処理を書かなくてはいけません。 上記二つを組み合わせて、ある条件にマッチしたら、所定の処理をさせることもできます。 $rules = array( // condition, procedure. array( function($x) { return $x == 'A' || $x == 'B'; }, function($x) { return 'This is ' . $x; }), array( function($x) { return $x == 'C' || $x == 'D'; }, function($x) { return 'My name is ' . $x; }), ); $in = 'B'; foreach ($rules as $rule) { $condition = $rule[0]; $procedure = $rule[1]; if ($condition($in)) { print $procedure($in); } } こうすると条件式と処理を一カ所でまとめて管理できます。 参考までに。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
まず$aがAであった場合$aはC~Eにはならないのでelseはいりません それだけで構造はだいぶ簡潔になります また同じ変数をorで確認するだけならswitchかin_arrayで処理すると ソースも見やすくなります if(in_array($a,array('A','B'))) 処理1; if(in_array($a,array('C','D','E'))) 処理2;
- kmee
- ベストアンサー率55% (1857/3366)
> ・条件分岐この後も数十個続いたとします。その場合もelse ifで一つ一つ条件を書かなければならないのでしょうか? if~else ifを使うなら、書かなければならない。ただし、本当にそれだけの条件分岐が必要な場合。 その前の段階で、整理しておくのがよいでしょう。 例えば、 if($a == 'A' || $a == 'B'){ $data='DATA1' ; }else if($a == 'C' || $a == 'D' || $a == 'E'){ $data='DATA2' ; }.............. とかだったら、あらかじめ対応表を配列にしておいて $data=$table[$a] ; みたいにすればすっきりする。 例えば、特定のパターンがあって、正規表現を使って表現できるものなら if( preg_match('/^[AB]$/',$a) === 1 ) { 処理1 ; } のような方法もある。 どの方法が使えるかは、そのケース次第です。万能の方法はありません。 本当に条件が複雑で、まとめられなければ、if~else ifを数十個続けるくらいしかありません。 # でも、その場合は、やりかた自体を根本的に考え直した方がいいです。
- SherlockHolmes2
- ベストアンサー率40% (175/429)
詳細なやりたいことが分からいので、参考にならなかったらすみません。 以下のサイトを参考にしてみてください。 switch文を使う方法。 三項演算子を使う方法。 参考URL : http://www.php-labo.net/tutorial/php/if.html#switch