2016-08-21 1 views
3

私のコードで何が間違っているのか不思議です。switchステートメントでブレークを使用すると、到達不能なコードエラーが発生する

switch (action.type) { 
    case TYPES.ADD_TO_FAVORITES: 
     if (state.faves.length <= 10) { 
     return assign({}, state, { 
      faves: state.faves.concat(action.payload), 
      full: false 
     }); 
     } else { 
     return assign({}, state, { 
      faves: state.faves, 
      full: true 
     }); 
     } 
    default: 
     return state; 
    } 

マイリンターがdefaultケースの前にブレークを追加すると言うが、私はそれを行うとき、それはunreachable codeを言う:私は、次の操作を行うにしようとしています。

+0

スイッチのステートメントから戻ることはありません –

+0

@TinyGiantなぜですか? – 1252748

答えて

1

returnbreakとして機能します。両方を使う必要はありません。到達できないコードがあるというメッセージが表示された場合は、そこにポイントがないか、以前に行ったことが論理的に間違っていることがあります。 switch文

+0

Ah。私は還元を学ぼうとしています。私のfavesリストにすでに10のものがあるかどうかをチェックするためのより良い方法は何ですか?10未満の場合は、faveを追加するだけですか? – user6701863

0

戻る無感許可されていませんします。 のみファンクションに返すことができます。 switch文から値を取得したい場合。ただ、この

var result; 
switch (action.type) { 
    case TYPES.ADD_TO_FAVORITES: 
     if (state.faves.length <= 10) { 
      result = assign({}, state, { 
       faves: state.faves.concat(action.payload), 
       full: false 
      }); 
     } else { 
      result = assign({}, state, { 
       faves: state.faves, 
       full: true 
      }); 
     } 
     break; 
    default: 
     result = state; 
     break; 
} 
+0

私はreduxを学んでおり、彼らはスイッチでリターンを使用しています:(ここに例があります:http://onehungrymind.com/build-better-angular-2-application-redux-ngrx/ – user6701863

+0

私は今還元していません。しかし、あなたの与えられた情報はバニラのjavascriptに関するものですが、私はこの答えしか持っていません。 – KmasterYC

0
switch (action.type) { 
case TYPES.ADD_TO_FAVORITES: 
    if (state.faves.length <= 10) { 
    return ...; 
    } else { 
    return ...; 
    } 
    break; // YOU HAVE ADDED BREAK HERE 
default: 
    return state; 
} 
case TYPES.ADD_TO_FAVORITESインサイド

、どちらかifまたはelseが実行されるように、変数に割り当てます。あなたとelseの両方でオブジェクトを返した場合、defaultの直前に追加したbreakは決して実行されません!

だからこそ、それはunreachable codeと言います。

1

リンタールール即ち「無フォールスルー」eslintで、ケースからケースへの偶発的なフォールスルーを許可しないように作用します。ブレークコード実行せずに

意味などを返す、ブレークしない限り、次の例にケースに一致するから続ける検出されました。

は時々、意図しないフォールスルーが、この現象が発生することができないといけないと、このルールはそれを阻止しようとします。

ルールを無効にするか、警告として設定できます。 戻り値と関数の最後に変数を割り当て、ルールを無効にしないで返すことをお勧めします。

function() { 
var returnvalue; 
Switch(variableA) { 
    Case 1: 
     returnvalue = somevalue; 
     break; 
    case 2: 
     returnvalue = some other value; 
     break; 
    default: 
     returnvalue= default value; 
    } 
return returnvalue; 

}

と到達不能の部分は、あなたの場合は、他のブロックから戻ってきています。

したがって、ブレークは決して実行されることはありません。

関連する問題