3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

voidを使って値を使わないことを示す

Posted at

最近思いついた書き方。

[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);
});

doSomethingundefinedを返す場合、コードの結果は全くおなじになるし、そもそもArray#forEachは渡された関数の返り値を無視するので、doSomethingundefined以外を返しても、やっぱり結果は同じ。

だけど、これが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() {
    //
}();

なにか、こう書くべきでない理由とかあれば教えてもらえると助かります。

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?