• ベストアンサー

jsのcase文では、~かつ~が使えないのはなぜ。

jsのcase文では、~かつ~を使いたいです。 例えば、月曜日かつ火曜日としたいのですが、どこにもそのようなサイトが載っていないのです。 どうしてですか。なければ代替案を教えてください。

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

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1600/2328)
回答No.2

dateという変数に日付が入っているとして、「dateの曜日が月曜日かつ火曜日」ということはあり得ないので、switch caseで表せなくて当然です。 「dateの曜日が月曜日または火曜日」なら、caseを並べて書くことができます。 switch (date.getDay()) { case 1: /* 月曜日 */ case 2: /* 火曜日 */ 「月曜日または火曜日」の場合の処理内容をここに書く break; case 3: /* 水曜日 */ 以下省略 } 「月曜日かつ火曜日」という言葉で何を表したいのか、もう一度考え直してみてください。

その他の回答 (1)

回答No.1

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に入れてしまう手はありかもです。 ただし、他の人が見て全く理解できないソースになるので、 本来であれば「やるべきではない」とはいえます。 ただ趣味なら、正直何でもありなので、そういう手はあるでしょう。 という事であり得る代替案を書いてみましたが。 どうでしょうか?

関連するQ&A