文字列でswitchするときはif-else switchイデオムを使うほうが安全 - きしだのはてな
ところが、残念なことに、sがnullの場合はdefaultには飛ばず、ぬるぽが発生します。 そこで、null判定は事前にif文で行うことになるので、次のようなif-else switchイデオムを使うと便利です。 Integer型など、ラップクラスやenumでのswitchでも同じことが起こるので、同様にif-else switchイデオムが使えます。
if (s == null) { System.out.println("Null!"); } else switch(s) { case "a": System.out.println("AA"); break; case "b": System.out.println("BB"); break; default: System.out.println("Other"); }
ほむほむ、if の後の文が1つなら中括弧が省略できる*1というやつですね。
そういえば JavaScript では
for (var key in obj) if (obj.hasOwnProperty(key)) { // ... }
こんな書き方が可能だと社内でちょっと話題になったけど、全く流行らなかったw
最近は
Object.keys(obj).forEach(function(key) { // .. });
が良いのだろうけど、関数コールのコストが意外と高いのでイテレーションの回数が多そうだと躊躇する。
*1:正確には逆で、文法上 if や else の後ろには中括弧は必要とされていない。ただ、if の後には文が1つしか書けないため、複数の文を書きたい場合は、1つの文のように扱わせるために中括弧でくくってコードブロックにしなければならない