Crockfordを説得することができなかったことの1つは、caseステートメントのフォールスルーを許可することです。
現在、これは問題ありません。
switch(foo){
ケース1:
ケース2:
doSomething();
}
しかし、これはそうではありません:
switch(foo){
ケース1:
doSomethingFirst();
ケース2:
doSomething();
}
以前にハッキングしたバージョンのJSLintで、コメント/ _falls through_ /をチェックして、フォールスルーするつもりであることを示しました。
switch(foo){
ケース1:
doSomethingFirst();
/ _falls through_ /
ケース2:
doSomething();
}
これがJSHintに含まれていることを本当に望んでいます。これは、私にとって非常に長い間JSLintの苦痛でした。
また、#11から— JSHintには、おそらくdefault
までのフォールスルーを許可するオプションが必要です。
多くの場合、フォールスルーは意図的ではないため、メッセージを無視するための個別のオプションを追加しませんでした。 代わりに、フォールスルーは意図的なものであるという明示的なコメントを付けて、あなたのアプローチを再利用しました。
switch(foo){ ケース1: dosmth(); / *フォールスルー* / ケース2: dosmth(); }
関連するコミット:4a72da1。
素晴らしいです、ありがとう!
IIRC、Crockfordは、彼の本の中で、なぜ彼がケースフォールスルーを嫌うのかについて具体的に言及しています。 ストーリーは面白く、やや非推奨です。
これについてコメントして申し訳ありませんが、警告はcase
秒間トリガーされ、ブロックの最後にスローされます。 /* falls through */
アノテーションを使用して警告を無効にすることはできますが、前のケース、アノテーションと次のケースの間の空白以外の何かによって、アノテーションが「妨害」されます(つまり、警告がトリガーされます)。ケースなので、コメントがそこにある理由についてコメントすることすらできません。
/* falls through */
代わりのコメントbreak;
文書化されていない機能です。 ドキュメントに追加してください。
/* falls through */
前の行
出向。 ドキュメントに/*falls through*/
を追加してください。
また、次のsupprtを追加してください。
case 'none':
default:
技術的には'none'
場合は不要ですが、コードの可読性が向上します。
これに関する情報をドキュメントに追加するための+1。
興味深い点として、私は最近、「フォールスルー」ケースが理にかなっている状況を見つけました。 これを使用して、localStorageから読み取ったバージョン管理されたデータの移行を実行しました。 元:
function migrate( version, data ) {
switch( version ) {
case 1 :
data.new1 = data.old; // convert data from version 1 to version 2
delete data.old;
case 2 :
data.new2 = data.new1; // convert data from version 2 to version 3
delete data.new1;
}
return data; // return data in version 3 format
}
データ形式が進化するにつれて、古いバージョンを移行するためのケースを追加することでコードを維持でき、特定のバージョンを最新にするためのすべての移行が適用されます。
.jshintrc
オブジェクトキーをお探しの方へ:
"-W086": true, //allow fall-through
最も参考になるコメント
.jshintrc
オブジェクトキーをお探しの方へ: