関係ないが C/C++ 経験者は switch ~ case に数値以外を書けるとちょっと無駄に感動する。
C/C++、java のケースでも結構悩んでた気がするんだけれど、その C/C++、java でのワタシのスタイルは「悩んだ結果」確定していたわけなのよ:
1 switch (zzz) {
2 case 1: {
3 // ...
4 break;
5 }
6 case 2: {
7 // ...
8 break;
9 }
10 default: {
11 break;
12 }
13 }
break が視覚的に埋もれてしまうことは難だったのだけれど、emacs のスタイルとの親和性は問題ないし、javascript と違ってやっぱり基本的に block を細かく作っていきたいわけ。だから case, default の個々の分岐に「必要なくても必ずブロックを作る」というのが、C/C++、java るときのワタシの定型スタイルだった。(各分岐が 1行のうちはいいのだが、3行超えるだけでブロックで囲まないと読みにくくなる、という「読むほう」の都合ももちろんあるが、一番期待していたのは当然「変数の局所化。)
で、当たり前のことなんだけれどこの「case ごとにブロック」のスタイルは「各ラベルが switch より一つ深いインデント」でないと非常に困ったことになって、つまり:
1 switch (zzz) {
2 case 1: {
3 // ...
4 break;
5 }
6 case 2: {
7 // ...
8 break;
9 }
10 default: {
11 break;
12 }
13 }
これは最悪でしょう、「誤解を招く」というレベルじゃない。何がどう終了してるのかさっぱりわからなくなる。なので「ブロックを作る」のとこのインデントは「不可分」な戦略なわけだね。
で、この「switch と case, default」の深さを揃えるのか揃えないのかについて、w3schools なんぞを見ても、ワタシと同じスタイルの方が主流のように見えるのよ。けれども、ESLint も emacs もどちらも、「揃える」方なんだよね。(実は先に emacs の方で困ってて、ESLint してみてから emacs が ESLint と同じだと知った。)
じゃぁどうするか? については、どうせ javascript では function scoping なのだから、C/C++, java で必要だった「ブロックを都度作る」こだわりの方を捨てちゃおうか、と:
1 /** emacs を騙してまでこれにこだわるのではなく…
2 switch ($("#node-finder-target-node").val()) {
3 case "anime": {
4 selecter = "node.a";
5 break;
6 }
7 case "chara": {
8 selecter = "node.v";
9 break;
10 }
11 default: {
12 break;
13 }
14 }
15 **/
16 /** こだわりの方を捨ててこうしちゃいなよ: **/
17 switch ($("#node-finder-target-node").val()) {
18 case "anime":
19 selecter = "node.a";
20 break;
21 case "chara":
22 selecter = "node.v";
23 break;
24 default:
25 break;
26 }
switch と case が同じカラムに並ぶのを「読みやすい」と思うかどうかは単に慣れであろう。