switch と case のインデントレベル
主に2種類あると思う。
switch (expr) { case expr1: break; case expr2: break; default: // ... }
と
switch (expr) { case expr1: break; case expr2: break; default: // ... }
ボクは、前者がお勧めだと思っている。jslint ? そんなの知りません。
- vim のデフォルトがインデントするから
- ブロック文を生成した時の整合性
1番目はいいや、単にボクの使用エディタがvimだってだけだから。
2番目。
switch内の最後の句で、微妙にインデントレベルが合わなくて気分が悪くなるわけだが、下記のようにブロック文にするとすっきりさせることができる。
switch (expr) { case expr1: break; case expr2: break; default: { // ... } }
また、 将来的に、ECMAScript.next が主流になり──僕の場合はMozilla JSがメインなので主流なのだが──let
,const
が使えるようになると、case
句内で使用したくなることがある。
んで、もし下記のように書くと、TypeError: redeclaration of variable foo(Mozilla JSの場合)というエラーが発生する。同一case句等ではブロックが発生しないため、同一ブロックないに同じ変数を宣言してしまうことになるからだ。
switch (expr) { case expr1: let foo = 20; // ... break; case expr2: let foo = 10; // ... }
switch (expr) { case expr1: { let foo = 20; // ... break; } case expr2: { let foo = 10; // ... break; } }
と、ブロックを生成すると良い。
これが、switchとcaseが同じインデントレベルだと、非常に気持ち悪いことになる。
switch (expr) { case expr1: { let foo = 20; // ... break; } case expr2: { let foo = 10; // ... break; } }
ってことで、将来的なことも考えて、case,default句はインデントした方が良いと思う。