ページ 1 / 1
if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:02
by ムンバ
こんばんはっ!
どちらをどの様な時にどの様に使ったらいいのか解らないので、ご意見お願い致します。^^;
if (cat.flag == 1){
/*if (cat.muki == 0)
cat.y++;
else if (cat.muki == 1)
cat.x--;
else if (cat.muki == 2)
cat.x++;
else if (cat.muki == 3)
cat.y--;*/
switch (cat.muki){
case 0: cat.y++; break;
case 1: cat.x--; break;
case 2: cat.x++; break;
case 3: cat.y--; break;
default: break;
}
}
この様なソースの場合、if文とswitch文の、どちらを使うのがいいのでしょうか?
どちらでも、コンパイルして実行すると同じ動きをするのです。^^;
このソースは、switch文を使ってる場合なので、if文を/* */でコメントしてます。
宜しくお願い致します。<_ _>
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:12
by ムンバ
言葉が足りなくて、すみません。
今、猫を主人公にしてRPGを作りたいと思ってます。
ですので、「猫」が構造体となってますので、「cat」を使ってます。
(猫でもわかる・・・とは関係ない事だという事です。^^;)
宜しくお願いします!
-----------------------------------------------------------------------------------------
編集にて追加です。
龍神録プログラミングの館→プロジェクトと素材を用意しよう→
http://dixq.net/rp/img/1/5.png
の直下
「今後章ごとにダウロードしたファイル」
誤字かと思われます。(謝
-----------------------------------------------------------------------------------------
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:35
by Libra
自分はこの場合におけるifとswitchは見やすさの違いだと思いました。
#include <stdio.h>
#define DOWN 0
#define RIGHT 1
#define LEFT 2
#define UP 3
typedef struct CAT{
int flag;
int muki;
int x,y;
}Cat_t;
int main(void){
Cat_t cat;
cat.flag = 1 ;
cat.muki = DOWN ;
cat.x = 200 ;
cat.y = 200 ;
if (cat.flag == 1){
switch ( cat.muki ){
case DOWN: cat.y++;break;
case LEFT: cat.x--; break;
case RIGHT: cat.x++; break;
case UP: cat.y--; break;
default: break;
}
}
printf("x = %d y = %d ", cat.x , cat.y ) ;
return 0;
}
私はこの場合であればdefineとswitchを使って、分けた方が見やすいと思いました。
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:41
by BEMANI
比較の回数が違うのでは・・・と思いました。
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:45
by array
私もこれは、謎に思ってました。
自分なりの解釈では、処理速度の違いだと思ってます。
----------- if文の場合 -----------
if (cat.muki == 0)
cat.y++;
else if (cat.muki == 1)
cat.x--;
else if (cat.muki == 2)
cat.x++;
else if (cat.muki == 3)
cat.y--;
if文の場合、もし「else if (cat.muki == 3)」まで一致しなかったら、4回判定する事になります。
cat.muki=「0」でもない「1」でもない「2」でもない「3」でもない、だと処理が長いです・・・
----------- switch文の場合 -----------
switch (cat.muki){
case 0: cat.y++; break;
case 1: cat.x--; break;
case 2: cat.x++; break;
case 3: cat.y--; break;
default: break;
}
switch文だと、if文と違って「cat.mukiは何と一致するか」を判定してると思います。
cat.muki=「何と一致するか」のみで、処理は短いはず・・・。
------ 結果 ------
結論は、switch文を使った方が良いと思われます。
----追記
判定じゃなくて比較ですね。
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:50
by ムンバ
Libraさん、早速のご解説ありがとうございます。
Key[KEY_INPUT_DOWN]
Key[KEY_INPUT_LEFT]
Key[KEY_INPUT_RIGHT]
Key[KEY_INPUT_UP]
の部分
#define DOWN KEY_INPUT_DOWN
#define LEFT KEY_INPUT_LEFT
#define RIGHT KEY_INPUT_RIGHT
#define UP KEY_INPUT_UP
で
Key[DOWN]
Key[LEFT]
Key[RIGHT]
Key[UP]
の様な感じで宜しいでしょうか?
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 00:55
by ムンバ
BEMANIさん、arrayさん、ご解説ありがとうございます。
if文だと4回、switch文だと5回・・・何となく解ります。^^;
自分が好きな方で、うまく動作する方を選んだ方がいいということですかね?(汗
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:06
by BEMANI
沢山条件分岐が出るのであれば、switchの方が早いです。
ifはとりあえず、条件が何であれ比較します。
switchは switch(値)・・・
この「値」をみて、該当する「case 値」にジャンプするので比較の回数が少ないです。
もし、御時間が許されているのであれば、
cat.muki = 3; という値を入れて、
if文 と switch~case をれぞれ一行一行にブレイクポイントをうち、デバッグしてみてください。
上にも書いてますが、ifはとりあえず、条件に合うまで比較します。
switchは、case ? にすぐ飛んでいきます。
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:09
by ムンバ
うっ!比較ですね。<_ _>
すごく悩んでたので助かりました。
どうもありがとうございました。(謝
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:12
by BEMANI
ただ、見やすさというのは非常に重要なので、その辺りも考慮してあげて下さい^^
一概にswitchの方がいい! とは言い難いので;
二・三個程度の比較ならif文で十分ではないかな~と思います^^
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:18
by ムンバ
BEMANIさん、ありがとうございます!
今日は、眠くて自爆ですみません。^^;
起きたら、試してみます。(謝
皆さんのご解説のスレッド保存して
今後、読み返しながら勉強したいと思います。
ずっと悩んでいた事なので助かりました。
どうもありがとうございました。(謝
編集で追加です。
switch文を使った方が自分なりに見た目もカッコいい~♪
的な感じで、いいのでしょうかね?^^
どうもありがとうございました。<_ _>
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:21
by Libra
> if文だと4回、switch文だと5回・・・何となく解ります。^^;
>
自分もそう思ってました。同じなら見やすさの問題かなと。
勉強になります。m(_ _)m
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:30
by ムンバ
こちらこそ、勉強になります。^^
重ね重ね、どうもありがとうございました。(謝
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:39
by Justy
参考までに。
メモリ効率の向上 : Y's Software Library
ttp://ww4.tiki.ne.jp/~yosshie-k/programming/techniques/memory.html#if_or_switch
Re:if文とswitch文の違い(区別?)につきまして
Posted: 2009年1月25日(日) 01:47
by ムンバ
ttp://ww4.tiki.ne.jp/~yosshie-k/programming/techniques/memory.html
こっ これは・・・。(激汗
Justyさん、ありがとうございます。^^
お気に入りに登録です!
ありがとうございました。おやすみなさい♪