for の後ろに if をつける書き方
こんな書き方ができるのを知った
for (var i = 0; i < 10; i++) if (i % 2 == 0) { print(i); }
これは以下と同じ
for (var i = 0; i < 10; i++) { if (i % 2 == 0) print(i); }
例をもう1つ。
これは
for (var k in attr) if (attr.hasOwnProperty(k)) {
これと同じ。
for (k in attr) { if (!attr.hasOwnProperty(k)) continue;
for 文を if で修飾するというんだろうか。
ん? Ruby だと if 修飾子っていうけど JavaScript でもいうのかな?
慣れたら修飾する書き方のほうが読みやすそう。
追記
修飾子というのは僕の勘違いだった。
コメントやトラックバックで突っこんでくれた方々、どうもありがとうございました!
最初の例のこのコードを
for (var i = 0; i < 10; i++) if (i % 2 == 0) { print(i); }
省略せずに書くとこうなる。
for (var i = 0; i < 10; i++) { if (i % 2 == 0) { print(i); } }
ここで「for は中身が一つの文のみの場合は、中括弧を省略できる」
という規則を使って、中括弧を省略するとこうなる。
for (var i = 0; i < 10; i++) if (i % 2 == 0) { print(i); }
さらに、ここからスペースを取り除いて少し形を変えると、最初の例と同じ形になる。
for (var i = 0; i < 10; i++) if (i % 2 == 0) { print(i); }
なので、if は for を修飾しているわけではない。
僕は for の後ろに if があるのを見て
これは if が for を修飾するときに使える特別な書き方なのかなぁ
と適当なことを思っていたのだけど、それは間違いだった。
ちなみに、if も for 同様に中括弧を省略できるので
上記のコードをさらに短縮することもできる。
for (var i = 0; i < 10; i++) if (i % 2 == 0) print(i);
でもこれはあまりいい書き方ではないと思う。