• ベストアンサー

ifとswitchはどのように使い分けたらいいのでしょうか?

ifとswitchはどんなところが違うのですか? どのように使い分けたらいいのでしょうか? よろしくお願いします

  • dfksh
  • お礼率64% (756/1164)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

単純な分岐ならif文、3つ以上の条件分岐がある場合はswitch文で切り分ければよいと思います。 例えば何度も呼び出される関数の a という引数の値が必ず 1 か 2 か 3 になると分かっている場合はswitch文で書いた方がわかりやすいです。 また、1 と 2 の処理だけまとめたい、という使い方も出来ます。(例2参照) 【例1】 void func( int a ) { switch( a ) { case 1: // 処理A break; case 2: // 処理B break; case 3: // 処理C break; default: // その他の値はコーディングミス break; } } 【例2】 void func( int a ) { switch( a ) { case 1: // a が 1 ならここを通過。このまま処理は case 2 へ遷移する case 2: // a が 1 か 2 であればここにくる break; case 3: // 3 ならここにくる break; default: // その他の値はコーディングミス break; } }

dfksh
質問者

お礼

わざわざ書いていただきありがとうございました。 とても勉強になります

その他の回答 (5)

  • nerosuke
  • ベストアンサー率33% (39/115)
回答No.6

値に対しての処理=switch (同条件に分岐の場合#define等使用するとifより明示的) 式に対しての処理=if 単純にこんな感じで分けてます。

回答No.5

推奨しない使い方。 #gotoよりはましと言う理由で使う人はいる。 switch (0) { case 0: // 前処理 ...; /* thru */ case 1: // 処理1 ...; if (/* error */) { break; } /* thru */ case 2: // 処理2 ...; if (/* error */) { break; } } // 後処理

回答No.4

ifではできるけれども、switchではできないことがあります。 例えば、ある整数型変数 a があったとして、 ・a>0ならXを実行 ・a=0ならYを実行 ・a<0ならZを実行 のようなことは、switchではできません。 switchではできることが限られていますが、逆にswitchで十分な状況では、switchを使うとifよりも判りやすいコードになります。

dfksh
質問者

お礼

なるほど使い分けしてみます。 ありがとうございました

noname#21330
noname#21330
回答No.2

switchの方が、キーストローク少ないとか、 評価対称パラメータのみに依存していることがわかりやすい(視認性が良い)とかのメリットがあります。 一方、ifのほうは、評価対称パラメータ以外の条件が付加された場合に対応しやすい、のメリットがあります。 ただ、個人的には、好みの問題と考えていて、 if---else if---else しか使いません。

dfksh
質問者

お礼

なるほど。いろいろな使い方があるんですね ありがとうございました

  • mssine
  • ベストアンサー率24% (38/156)
回答No.1

4以上はswitchを使え。と会社のコーディング基準で決まっています。 一般的には、夫々の会社なり、プロジェクトで決める事項です。

dfksh
質問者

お礼

ありがとうございました 会社で決まっているんですか!

関連するQ&A

  • phpのifとswitchって似てますけど if

    phpのifとswitchって似てますけど ifはカッコの中に大なり小なりをいれますが switchは入れませんよね 似てるけどこういう所が違うんですかね? <?php if ($a > $b) { echo "aはbより大きい"; $b = $a; } ?>

    • ベストアンサー
    • PHP
  • phpのswitch文について switchはif

    phpのswitch文について switchはifと違って、条件式の中がブール型の論理演算とかではないんですか? 完全に1つの値とかなんですかね? $num1>5とかそういうのは入らないんですか?

    • ベストアンサー
    • PHP
  • (if/elseif)と(switch文)の使い分け方

    プログラミング初心者です。 switch文がある事を最近知りました。 条件分岐をする時は主にif文を使用してきましたが、switch文とはどのように使い分けるものなのでしょうか。 こんな質問で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • switch文かif文か?

    スイッチ(SW50~SW80)を押したら、それに対応したコマンドを送る。というものを作っています。 スイッチはスライドスイッチなので、 1)ON(0)の間だけコマンドを出して、OFF(1)は止める。 2)ONしている間に別のスイッチが入ったら止める。 という風に組みたいのですが、中々上手くいきません。 8ピンのスライドスイッチなのですが、1~4はIDとして、5~8をコマンドとして使います。 なので、1~4は絶対にONになります。とすると、2)にしたいとき、defaultが使えなくて…if文を入れたらややこしくなりました。 もっと簡潔に、かつ解りやすく書くにはどうしたらいいでしょうか? #define SW1 input(PIN_C0) // ID #define SW2 input(PIN_C1) // ID #define SW3 input(PIN_C2) // ID #define SW4 input(PIN_C3) // ID #define SW50 PIN_C4 #define SW60 PIN_C5 #define SW70 PIN_C6 #define SW80 PIN_C7 uchar LED_ON(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x4E; return(DATA); } uchar LED_OFF(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x46; return(DATA); } void LED(void){ ulong n; uchar DATA; while(1){ WriteFSKbyte(DATA); switch(n){ case SW50:DATA=LED_ON(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; case SW60:while(SW60==0){ DATA=LED_ON(); DelayMs(1000); DATA=LED_OFF(); DelayMs(1000); if((SW50||SW70||SW80)==0) break; } break; case SW70:while(SW70==0){ DATA=LED_ON(); DelayMs(500); DATA=LED_OFF(); DelayMs(500); if((SW50||SW60||SW80)==0) break; } break; case SW80:DATA=LED_OFF(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; } } }

  • 条件分岐 if(elseif) switchの実行速度

    条件分岐に if switchがありますが、 ifパターン ============================== if ( $a = 1) {   処理A } elseif ($a = 2) {   処理B } ============================== switchパターン ============================== switch($a){ case '1':   処理A break; case '2':   処理B break; } ============================== 実際はもっと複雑ですが、どちらのほうが実行速度が速いのでしょうか。

    • ベストアンサー
    • PHP
  • phpのSwitch文のswitchってそもそもど

    phpのSwitch文のswitchってそもそもどういう意味なんでしょうか? ifはわかります もしもこういう場合は というので switchってなんですか?電源を押すみたいな意味ですか?

    • ベストアンサー
    • PHP
  • switch文をif文に変換

    以下のプログラムをif文に書き換えるとどうなるでしょうか? if文と論理演算子を使って短く書きかえられるらしいのですが。 #include <stdio.h> main() { int no; scanf("%d",&no); switch (no){ case 1: puts("1番です。\n"); break; case 2: puts("2番です。\n"); break; case 3: puts("3番です。\n"); break; case 4: puts("4番です。\n"); break; case 5: puts("5番です。\n"); break; case 6: puts("6番です。\n"); break; default: puts("そんな学年はありません。"); break; } }

  • switch文について

    お世話になります。switch文について教えてください。 分岐の条件を複数使用することは出来ますか。 たとえば switch(a) [ case "1": if (x == "0") { document.write(1x0); } else if (x == "1") { document.write(1x1); else { document.write(1x); break; } case "2": if (x == "0") { document.write(2x0); } else if (x == "1") { document.write(2x1); else if (y == "0") { document.write(2y0); else { document.write(2x); break; ] という構文は可能ですか。 case 2でx yの二分岐しても可能ですか。 教えてください。

    • ベストアンサー
    • Java
  • スイッチのVLAN設定について質問です。

    Switch#vlan database Switch(vlan)#vlan 10 Switch#conf t Switch(config)#int fa0/1 Switch(config-if)#switchport access vlan 10 Switch(config-if)#end Switch#show running-config interface fa1/1 Building configuration... ! interface FastEthernet1/1 switchport access vlan 10 shutdown end Switch(config)#int fa0/1 Switch(config-if)#no switchport access vlan 11 Switch(config-if)#end Switch(config)#int fa0/1 Switch#show running-config interface fa1/1 Building configuration... ! interface FastEthernet1/1 shutdown end VLAN 10 を設定し、interface fa0/1にvlan10を割り付けたんですが、 割り付けたVLANを削除しようとして no switchport access vlan 10 ではなく switchport access vlan 11と打ち込んでみました。 するとshow running-config で確認すると int fa 0/1のswitchport access vlan 10が 削除されていました。 これは no switchport access vlan に続くVLAN番号が何であっても no switchport access vlan 10 と同じ設定効果があるということなのでしょうか?

  • switch の範囲指定

    switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){   case 0: case 1:     //処理A     break;   case 2: case 3: case 4:     //処理B     break;   case 5: case 6:     //処理C     break;   case 7: case 8: case 9:     //処理D     break; }

専門家に質問してみよう