質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

2670閲覧

javascriptのswitch文

yumi0414

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/07/19 14:54

無料の学習サイト、書籍を使ってjavascriptを勉強しているのですが、ドットインストールで出てきた「switch文」が、他のサイトや書籍(初心者向け)には出てきません。

これはそれほど重要ではない(あまり使わない?)文ということでしょうか?

別の方法で書くことができたるするのでしょうか?
例えば↓の文なのですが・・・

var signal = "red"; switch (signal){ case "red": console.log("stop!"); break; case "green": case "blue": console.log("go!"); break; case "yellow": console.log("slow down"); break; default: console.log("no signal"); break; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

switchの利点として、

  • いちいち if (条件式) ; を記述する手間が省ける(breakはたくさん書きますが…)
  • わざとbreakを外して、対応するcase以下の処理をまとめて適用させることができる。

があります。
特に重要という訳ではないですが「便利に使える」モノです。

js

1var txt = ''; 2var pattern = 'all'; // half , one , その他 3 4switch( pattern ){ 5case 'all': 6 txt += 'all'; 7case 'half': 8 txt += 'half'; 9case 'one': 10 txt += 'one'; 11 break; 12default: 13 txt = 'default'; 14} 15console.log(txt); // allhalfone

js

1var txt = ''; 2var pattern = 'all'; // half , one , その他 3 4if (pattern === 'all') { 5 txt = 'allhalfone'; 6} else if (pattern === 'half') { 7 txt = 'halfone'; 8} else if (pattern === 'one') { 9 txt = 'one'; 10} else { 11 txt = 'default'; 12} 13console.log(txt); // allhalfone

ちなみに、上記例の場合30文字程度省略できます。

書き換え

そして、提示されたコードを書き換えるなら

js

1var signal = "red"; 2console.log(getCommand(signal)); 3 4function getCommand(signal){ 5 if (signal === "red") return "stop!"; 6 if (signal === "green" || signal === "blue") return "go!"; 7 if (signal === "yellow") return "slow down"; 8 return "no signal"; 9} 10

投稿2016/07/19 15:36

Ryo

総合スコア507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

使いどころ次第ですが、break;処理を忘れるなどした場合にバグの元になりやすいなどの理由で避ける人もおられるようです。

JavaScript

1var signal = 'red'; 2 3if ( signal === 'red' ) { 4 console.log( 'stop!' ); 5} else if ( signal === 'green' || signal === 'blue' ) { 6 console.log( 'go!' ); 7} else if ( signal === 'yellow' ) { 8 console.log( 'slow down' ); 9} else { 10 console.log( 'no signal' ); 11}

【switch - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/switch

投稿2016/07/19 15:29

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumi0414

2016/07/19 15:33

なるほど。確かにbreak; 忘れそうです・・・ if文の例もありがとうございます!わかりやすかったです。
guest

0

switch文はif文と互換可能ですが、
条件分岐が多い場合にスッキリするので使われます。

あと気になったのは質問文のソースでは、
インデントが先に行くほど潜っていますが、そうする必要はありません。

下記は一例ですが、各caseのインデントレベルは普通そろえます。
なぜそうするかは、分岐先を一目瞭然にしてバグを減らすためです。


javascript

1var signal = "red"; 2 3switch (signal){ 4 case "red": 5 console.log("stop!"); 6 break; 7 case "green": 8 case "blue": 9 console.log("go!"); 10 break; 11 case "yellow": 12 console.log("slow down"); 13 break; 14 default: 15 console.log("no signal"); 16 break; 17} 18

投稿2016/07/19 15:38

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if に比べると使う機会は少ないと思います。 (常にifで置き換え可能です)

ですが、言語ごと少しずつ書き方は違いますが、
色々なプログラミング言語で採用されている書き方で、覚えておいて損はないと思います。

他の人が書いたプログラムを読む時にわからないと困るので、知っておいたほうが良いです。

投稿2016/07/19 15:05

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumi0414

2016/07/19 15:34

そうなのですね。覚えておいて損は無い、ということなので頑張って覚えます! ありがとうございます。
guest

0

if文よりswitch文の方が早い
なんて都市伝説みたいな話もありますねえ。

JavaScript

1var signal = 'red'; 2 3var my_arr = {'red':'stop!','green':'go!','blue':'go!','yellow':'show down'}; 4var act = my_arr[signal]; 5if (!act) act = 'no signal'; 6console.log(act);

投稿2016/07/19 19:23

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問