この人頭いいなと思ったエピソード

if文についての疑問を質問させてください。
if文はelseを挟むことで複数指定したり入れ子にしたりして使えますが、
elseを未入力で下記のように複数指定することは問題があるのでしょうか。
また、このように24個のifを並べるという書き方はよろしくないものなのでしょうか。

<script type="text/javascript">
(function() {
var image_obj = new Image();
image_obj.src = "../image/";
var jikan_obj = new Date();
var htime = jikan_obj.getHours();

if(htime==0){alert('日が変わりました');}
if(htime==1){alert('夜中です');}
if(htime==2){alert('2時です。');}
if(htime==3){alert('真夜中です');}
if(htime==4){alert('もうじき朝です');}
if(htime==5){alert('新聞が届きました');}
if(htime==6){alert('朝です');}
if(htime==7){alert('忙しいです');}
//これが23まで続きます。
if(htime==23){alert('もうじき日が変わります');}
})();
</script>

A 回答 (3件)

期待通りの動作はしますので、問題はありません。

ただし、

if(htime==0){alert('日が変わりました');}
else if(htime==1){alert('夜中です');}
・・・・

のようにelseをつけると、条件判断が真になった段階で残りの条件判断はスキップされますが、
お書きのようにつけないと、条件判断は常に24個分実行されます。つまり無駄に判断しているわけです。まあ、それによる速度低下はほとんどゼロなので、こういう例ではどっちでも良いです。何万回も繰り返して実行される場合はelseをつけた方が良いです。

この手のは、switch/case文を使う事も出来ますね。

ただ、この場合は、文字列を配列にすると良いでしょう。
alert(['日が変わりました', '夜中です', ~, 'もうじき日が変わります'][htime]);
    • good
    • 0
この回答へのお礼

とても参考になりました。
ありがとうございました。

お礼日時:2012/03/17 11:39

既に指摘がある通り、文法は間違っていませんが、効率は悪いです。


例の場合は、switchの方が向いています。
理由は、先の回答と同じく、24回常に評価させるか、1度だけ評価させるかの差です。

switch(htime){
case 0: alert("日が変わりました");break;
case 1:alert('夜中です');break;



}
    • good
    • 0
この回答へのお礼

とても参考になりました。
ありがとうございました。

お礼日時:2012/03/17 11:39

こんにちは。



この場合、timeは必ず0~23でありどこかに引っかかるとわかるのでelseが無くても問題ないと思います。



余談ですがこのようなロジックなら以下のようにするとすっきりします。
var arr = new Array();
arr[0] = '日が変わりました';
arr[1] = '夜中です';
// 省略
arr[23] = 'もうじき日が変わります';

var htime = jikan_obj.getHours();

alert ( arr[htime] );
    • good
    • 0
この回答へのお礼

とても参考になりました。
ありがとうございました。

お礼日時:2012/03/17 11:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報