最近思いついた書き方。
[0, 1, 2, 3, 4].forEach(function(i) {
if (i % 2 === 0) {
doSomething(i);
return;
}
doX(i);
doY(i);
doZ(i);
});
こんなことがしたいとき、doSomething(i);
とreturn;
をまとめて以下のように書くことがある。
[0, 1, 2, 3, 4].forEach(function(i) {
if (i % 2 === 0)
return doSomething(err);
doX(i);
doY(i);
doZ(i);
});
doSomething
がundefined
を返す場合、コードの結果は全くおなじになるし、そもそもArray#forEach
は渡された関数の返り値を無視するので、doSomething
がundefined
以外を返しても、やっぱり結果は同じ。
だけど、これがArray#forEach
のようによく知られている関数じゃなかった場合、doSomething
の返り値を使って何かしているんじゃないかと、読んでいる時に誤解するかも知れない。
niceFunction(function(value) {
if (value.isNotNice())
return doSomething(); // 何か必要な値を返している?
doX();
doY();
doZ();
});
こういう時にvoid
を書き加えると、なにか必要な値を返しているわけではないことを示すことができる。
niceFunction(function(value) {
if (value.isNotNice())
return void doSomething(); // doSomething()の返り値が必要なわけではないとわかる
doX();
doY();
doZ();
});
以前から、返り値を使わない即時関数の先頭にはvoid
を書くようにしていたので、その応用。
void function() {
//
}();
なにか、こう書くべきでない理由とかあれば教えてもらえると助かります。