2013-08-23 7 views
16

を破るには、私はしばしばのような状況を参照してください?リターンとスイッチケースとちょうど好奇心

+0

これは_probably_あるだけコピー/貼り付けおよび/またはhaphhazardly将来的にそのコードを修正することから生じるエラーに対して防ぐために。私には良い安全のネットのように見えます。 – jahroy

+2

字下げを考えると、それは単にスタイル上の選択です - 提案された[ブロック]の終わりに 'break'を使用します(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /文/ブロック)。しかし、 'break'は' return'ステートメントの後の到達不能なコードです。だから、何もしません。それでも何も傷つけることはありません。 –

答えて

17

returnステートメントが導入される前に、break;ステートメントがあった可能性があります。したがって、それは冗長になり、除去することができる。実際に

あなたはjslintを通じてそのコードを実行すると、それはこのエラーが表示されます:このアドバイスは、あなた次第です

Unreachable 'break' after 'return'.

留意するかどうか。あなたが特定のスタイルに落ち着く前にいくつかのことを試しているなら、開発中に役立つかもしれません。

これは、一部が主張するかもしれないという代替文体では、より良い習慣です:

var retval = null; 
switch (something) { 
    case 'alice': 
     retval = something; 
     break; 
    // ... 
} 
return retval; 
+1

だから、いくつかの人々(jslint)はヒントのために実際に表記法*エラー* +1を考えます –

+0

@RienNeVaPlusそう、Crockfordはこれらのことを明らかに感じています:) –

-3

場合は、実際にあなたがケースを持って

非常に必要である、あなたはそのケースから分割するか、他他の例も同様にピックアップされている必要があります。

ケースを使用することは、多くの場合、悪い習慣とみなされるため、可能な限り避けてください。

+1

さて、 'return'が呼び出されると、関数は実行を停止します – Plato

+0

なぜ、*使用例が最も頻繁に悪い習慣とみなされるのか説明できますか*?また、なぜあなたのケースの中の '{}'? –

+0

@ user2701974あなたはその質問を誤解しているかもしれないと思います。 'return'の後に' break'を使うことを尋ねています。 'switch..case'は文脈のためのものです。また、 'switch'ブロックは普遍的に悪い習慣とはみなされません。彼らは単に代替案よりも優先度があまり高くありません。 –

4
switch(casein){ 
case 1:{ 
break; 
} 
case 2:{ 
break 
} 
} 

breakswitchブロックのケースを評価停止するJavaScriptを伝えます。コードの実行は、終了の末尾であるswitchを超えて続きます。サンプルコードのreturnステートメントは、実際には、他のcaseステートメントや、switchブロックの後のものを含めて、それを越えたものをさらに防ぎます。

私はすべての場合に習慣によってbreak声明を書いています。私はbreakせずにケースを書いたなら、私はコピー可能性があり、将来的には周りのコードのペーストブロックとbreak文の欠如はそうのようなバグになる:

function whereLivesA(species){ 
    switch(species){ 
    case 'worms': 
     // Relying on return to prevent further code execution within the switch 
     // block works but is ~bad~ smelly (according to plato :D) 
     var habitat = 'dirt' 
     return (species + ' live in ' + habitat); 
    case 'bees': 
     var habitat = 'hive'; 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 
console.log('whereLivesA'); 
console.log(whereLivesA("worms")); 
console.log(whereLivesA("bees")); 
    /* Output: 
    whereLivesA 
    worms live in dirt 
    bees live in hive 
    */ 


function whereLivesB(species){ 
    switch(species){ 
    case "worms": 
     // what if future code changes remove `return` and don't add `break`? 
     // return (species + ' live in ' + habitat) 
     var habitat = 'dirt'; 
     // break; 
    case "bees": 
     var habitat = 'hive' 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 
console.log('whereLivesB'); 
console.log(whereLivesB("bees")); 
console.log(whereLivesB("worms")); 
    /* Output: 
    whereLivesB 
    bees live in hive 
    worms live in hive 
    */ 


function whereLivesCorrect(species){ 
    switch(species){ 
    case "worms": 
     var habitat = 'dirt'; 
     break; 
    case "bees": 
     var habitat = 'hive' 
     break; 
    } 
    // Stuff to do after the switch statement (unless you returned already) 
    var str = species+' live in '+habitat; 
    return str; 
} 

console.log('whereLivesCorrect'); 
console.log(whereLivesCorrect("bees")); 
console.log(whereLivesCorrect("worms")); 
    /* Output: 
    whereLivesCorrect 
    bees live in hive 
    worms live in dirt 
    */ 

JS初心者:そうしない場合それをファイルに保存してnode filenameを実行したい場合は、F12キーを押してこのスクリプトまたはその他の自己完結型スクリプトをブラウザのコンソールに貼り付けて実行することができます。

node.jsを使用する場合は、コマンドラインでnodeと入力してnodeコンソールを起動し、そこに貼り付けることもできます。

0

breakキーワードは、文を終了するか、ループを終了して実行を継続しないようにするために使用されます。例えば

HTML

what's your age?: <input type="text" id="ageOf"><br> 
<input type="submit" onSubmit="postReply();"> 
<div id="reply"></div> 

JS

var userResponse = document.getElementById('ageOf'); 
var response = document.getElementById('reply'); 

function postReply() { 
    switch(ageOf) { 

    case 1: ageOf<18 { 
     response.innerHTML = "You are still young."; 
     break; 
    } 

    case 2: ageOf>18 && ageOf<45 { 
     response.innerHTML = "You are getting up there..."; 
     break; 
    } 

    case 3: ageOf >= 45 { 
     response.innerHTML = "You are over the hill!"; 
     break; 
    } 
} 

ので、提出の上、フォームは、それが必要、ユーザーの答えをチェックし、値に応じて、function postReply()を呼び出す必要がありますそれらのステートメントの1つを返します。

+1

ケースラベルの後の条件は実際に有効な構文ですか? 'ageOf <18'は私には疑わしいですね。また、OPの質問は本当になぜ誰かが 'return'ステートメントの後に' break'ステートメントを使用する理由に関係しています。 – jahroy

+0

私は構文を乱しているかもしれませんが、もっと明確になるように例を提供しようとしていました。 – matt6frey

+0

A)ケースは中括弧で囲まれていません。B)リテラルを 'case'に渡す必要があります。例えば'case 1:ageOf <18 {}'の代わりに 'var s = 'young'を実行します。 if(age> 18){s = 'medium'}; if(age> 45){s = old '} 'そして' switch(s){case' young ':...;ブレーク; case 'medium' ...} ' – Plato

関連する問題