• ベストアンサー

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

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

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

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答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

  • SQL Server2000でcase文がサポートされてない?

    お世話になります。 客先より、SQL Server2000のEnterprise ManagerでCASEを含むSQLを実行したら 「case SQL構成はサポートされていません」とエラーが出たと連絡が入りました。 自分のマシンに入っている同ツールで実行すると、エラーは出ません。 客先と自分のマシンのSQL Server2000の違いは、バージョンなのですが、 古いバージョンだとcase文がサポートされていないということはあるのでしょうか? 自分のマシンは最新バージョンが入っています。 SQL文の内容的に、case文が必要なので、代替案も思いつかず、困っています。 よろしくお願いいたします。

  • switch文 defaultについて

    switch文で曜日を表示するプログラムを作成したいのですが、 任意の月の1日を日曜日とし、入力された日にち(変数date)の曜日を変数dayとしました。 day=(date-1)%7 とし、day=0のとき日曜日、day=1のとき月曜日、・・・、day=6のとき土曜日とします。 dateに0以下の数が入力されたとき、default文で「その月は1日から始まります。」 dateに32以上の数が入力されたとき、default文で「その月は31日までです。」 といったエラーを表示させたいと思います。 1つのswitch文の中に2種類のdefault文をどうやって書いたらいいのかわかりません。 switch文以下のプログラムは、以下のように書いてみました。 day=(date-1)%7; switch(day) { case 0: printf("1月%d日は日曜日です。",date); break; case 1: printf("1月%d日は月曜日です。",date); break; case 2: printf("1月%d日は火曜日です。",date); break; (case 3~case 5も同様に書く。) case 6: printf("1月%d日は土曜日です。",date); break; default: printf("1月は31日までです。"); /*dateに32以上の数が入力された場合のエラー表示*/ break; default: printf("1月は1日から始まります。"); /*dateに0以下の数が入力された場合のエラー表示*/ break; } しかし、1つのswitch文にdefault文は1つしか書けませんよね? 入力された日によってdefault文を使い分けるにはどうしたらよいのでしょうか。

  • JS switch文について

    JavaScript初心者です。 下記では、div内でphoto1.jpgを表示していますが、ここが別のコードで他の画像に書き換えられるため、下のjsで、画像がクリックされた際にsrcの中身を確認し、それに応じてアンカータグのhrefを書き換えようとしています。 ですが、参照の仕方が悪いのか、switch文が思惑通りに動いてくれません。 どなたか詳しい方、ご教授ください。よろしくお願いいたします。 $("#main a").click(function(){ var mimage = document.getElementById("main-img"); switch(mimage.src){ case "images/photo1.jpg": $("#main a").attr("href","sub1.html"); break; case "images/photo2.jpg": $("#main a").attr("href","sub2.html"); break; case "images/photo3.jpg": $("#main a").attr("href","sub3.html"); break; } }); <div id="main"> <a href="sub1.html"><img src="images/photo1.jpg" alt="" width="700" height="515" id="main-img" /></a> </div>

  • case文

    こんにちは、SQL初心者です。 値を判定して、trueなら「*」をfalseなら表示なしとするのですが、 判定項目がかなりありまあす。 case文だとtrue、falseで二通り書かないといけないと思うのですが、簡単な方法はありますか? if文みたいにelseを使えればいいのですが。

  • VHDLで、case文とwhen文のどちらを使おうか迷っています。

    VHDLで、case文とwhen文のどちらを使おうか迷っています。 以下のようなプログラムを作ろうと思っています。 //ここからcase文もしくはwhen文 SWの値を読み込み、 1の時signalに10を代入 2の時signalに20を代入 ・ ・ ・ 10の時signalに100を代入 //ここまでcase文もしくはwhen文 process(clk) clkが立ち上がる回数をカウントしていき、signalと同じ数になった時に1を出力 それ以外は0を出力 end process case文はprocess文で、when文は同時処理文で記述することは知っていますが、このような場合、どちらを使ったらいいのでしょうか?

  • UPDATEのCASE文で・・

    SQLの独学をはじめて間もない素人です。 今case文を使って・・a_flg、b_flgを更新というコードを考えたのですが・・↓ UPDATE tm_results_payment SET a_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '0' END ) b_flg = ( CASE WHEN b_flg=1 AND a_flg=1 THEN '1' ELSE b_flg END ) CASE文は同じ条件です。値を2個とも変更したいので上の処理を考えました。 しかし、どうやら先に最初のCASE文でa_flgを0に変えてしまっているので、 次のCASE文では処理をしてくれません・・; 同時進行で値を更新する方法ってどうすればよいのでしょうか・・; よろしくお願いいたします。

  • select case文について

    VB6.0のSelect Case文について質問です。 現在、ある文字列(mojiretu)の中から特定の文字を検索して その文字が文字列(mojiretu)の中に存在したらチェックボックスにチェックという一連の処理を行いたいのですがうまくいきません>< このSelect Case文のどこを直すべきでしょうか? select case mojiretu case instr(mojiretu,"abc") chk1.value=1 case instr(mojiretu,"def") chk2.value=1 case else chk3.value=1 end select

  • CASE文

    SQLのCASE文での質問なのですが、 テーブルの項目「区分」に1,2,3,4,5とデータが入っていた場合で 1の場合はA 2の場合はB 1かつ2でない場合はC と返す場合はどのように記述すればよろしいのでしょうか? 環境はSQL Server2000です。

  • CASE文について

    <環境> SQLSERVER2005 ACCESS2007 CASE文について質問です。 クエリで下記のSQL文を実行すると、「Case 式は、10 レベルまでしか入れ子にできません。」 とエラーになります。 このような場合、どのように記述すれば解決できるでしょうか? ご教授お願いします。 SELECT CASE WHEN (WA.MM = '01') THEN ROUND(SUM(WB.MONEY1), -3, 0) ELSE CASE WHEN (WA.MM = '02') THEN ROUND(SUM(WB.MONEY2), -3, 0) ELSE CASE WHEN (WA.MM = '03') THEN ROUND(SUM(WB.MONEY3), -3, 0) ELSE CASE WHEN (WA.MM = '04') THEN ROUND(SUM(WB.MONEY4), -3, 0) ELSE CASE WHEN (WA.MM = '05') THEN ROUND(SUM(WB.MONEY5), -3, 0) ELSE CASE WHEN (WA.MM = '06') THEN ROUND(SUM(WB.MONEY6), -3, 0) ELSE CASE WHEN (WA.MM = '07') THEN ROUND(SUM(WB.MONEY7), -3, 0) ELSE CASE WHEN (WA.MM = '08') THEN ROUND(SUM(WB.MONEY8), -3, 0) ELSE CASE WHEN (WA.MM = '09') THEN ROUND(SUM(WB.MONEY9), -3, 0) ELSE CASE WHEN (WA.MM = '10') THEN ROUND(SUM(WB.MONEY10), -3, 0) ELSE CASE WHEN (WA.MM = '11') THEN ROUND(SUM(WB.MONEY11), -3, 0) ELSE CASE WHEN (WA.MM = '12') THEN ROUND(SUM(WB.MONEY12), -3, 0) END END AS MONEY FROM (WA INNER JOIN WB ON (WA.YYYY = WB.YYYY)) INNER JOIN WC ON (WA.YYYY = WC.YYYY)

  • CASE文の集計について

    ORACLE10g EXISTS文について質問があります。 まず次のようなTBLが存在します。 休業MT 店舗CD | 休業区分 |  開始日  |  終了日 | AAA     09     20110311  20110311 AAA     09     20110313  20110325 AAA     03     20110330  20110330 月売上TR 店舗CD |  年月  |  客数  |  売上数 | 稼動タイプ AAA    201103   100     300    特殊 AAA    201104   200     400    フル 月売上TRの稼動タイプの判別を行う場合 以下の条件があります。 ・休業MTに同月、同店舗のレコードが存在しない場合にフルを適用 ・休業MTの休業区分 = 09 且つ その休業日合計が同月内で7日以内場合に稼動タイプにフルを適用。 ・休業MTの休業区分 = 03 である限り、同月に何回休業してもフルを適用 上記の条件をCASE文ですべて実現しようしたとき、 2番目の条件の休業日合計が7以下のものをうまく抽出できません。 CASE文やEXISTS文で集計項目に対して条件をつけることは可能でしょうか? できれば、サンプルSQLを教えていただきたいです。 よろしくお願いします。