- ベストアンサー
jsのcase文では、~かつ~が使えないのはなぜ。
jsのcase文では、~かつ~を使いたいです。 例えば、月曜日かつ火曜日としたいのですが、どこにもそのようなサイトが載っていないのです。 どうしてですか。なければ代替案を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
dateという変数に日付が入っているとして、「dateの曜日が月曜日かつ火曜日」ということはあり得ないので、switch caseで表せなくて当然です。 「dateの曜日が月曜日または火曜日」なら、caseを並べて書くことができます。 switch (date.getDay()) { case 1: /* 月曜日 */ case 2: /* 火曜日 */ 「月曜日または火曜日」の場合の処理内容をここに書く break; case 3: /* 水曜日 */ 以下省略 } 「月曜日かつ火曜日」という言葉で何を表したいのか、もう一度考え直してみてください。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
caseはユニークだからです。 どうしても使いたいなら、 switch側に入れることはできます switch(a==1 && b==2) { case true: case false: } または、入れ子 switch(a) { case 1: switch(b) { case 1: case 2: // a==1 && b==2 }break; case 2: switch(b) { case 1: case 2: }break; } これで、OKだが、 >月曜日かつ火曜日としたいのですが これの場合は、break飛ばしの方がいいかも、 // dは日曜日スタートの0オリジンとした場合 switch(d) { case 0: break; // 日曜日(ただし記載不要) case 1: case 2: /* 月曜日か火曜日 */ break; default: break; } 問題として一つの変数が「月曜日かつ火曜日」になることは 普通ありえないので、先に書いたように2つの変数である 可能性が高い事と、やや混乱する要件定義ではあるとはいえます。 なので、超!特例処理としたら 先ほどの、dにたいして、 if (ある条件を満たしたら) d=7; という手はあります。 日曜~土曜(日曜スタート0オリジン) の場合、最大値は6なので、それの次の値に 別の意味を持たせてswichに入れてしまう手はありかもです。 ただし、他の人が見て全く理解できないソースになるので、 本来であれば「やるべきではない」とはいえます。 ただ趣味なら、正直何でもありなので、そういう手はあるでしょう。 という事であり得る代替案を書いてみましたが。 どうでしょうか?