voidを使えば、アロー関数 で{}が省ける。

TOC

  1. 普通に {} はずせばいいのでは?
  2. void ってなに?
  3. まとめ

こんにちはー。

今、void を使えばアロー関数で{}がいらないんじゃないか説が、
ふと頭のなかを通り過ぎて行きましたので紹介いたしますー。

「void 演算子で、アロー関数の {} がいらない気がする」ということです。

普通に {} はずせばいいのでは?

まず、通常のアロー関数の{}なしの使い方です。
普通の関数がどんどん短くなっていく過程をご覧ください。

1
2
3
4
5
6
7
8
9
10
11
// function 式
var a = function (a) { return a + 2; };

// アロー関数にそのまましてみた
var a = (a) => { return a + 2; };

// 引数一つだから () いらない。
var a = a => { return a + 2; };

// 中身 1行で return で返されているから {} いらない。
var a = a => a + 2;

こんな感じですかね。
では、次のような例だとどうでしょう。

1
2
3
4
5
6
7
8
9
10
var num = 0;

// function 式
var b = function () { num++; }

// アロー関数にそのまましてみる
var b = () => { num++; }

// () はずしたいけどはずせない。
// {} はずしたいけど、戻り値ないから・・

そうです。戻り値が void のとき(あ、言っちゃった☆)です。
もし、このまま {} をはずせば、戻り値として num が帰ってきてしまい、
意図した結果にはなりません。

さあ、どうしても {} が外したい・・(←なんで?)
どうしよう・・・

そんなときは、void の出番です。
void を使えば、{} を外すことができます。

1
2
// void があらわれた!!
var b = () => void num++;

それはなぜだ?

void ってなに?

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/void

void は、式を実行するけれど、undefined を返すという演算子なのです。
C# とかで知っていたけれど、js での使い方はあまり良くわかっていませんでした。
今まで知っていた使い方は、こんな感じです。

1
2
3
4
5
6
if (a === void(0)) {} // undefined か判定する
if (a === void 0) {} // こちらでも良い
// でもこれは・・
if (typeof a === "undefined") {} // これで良かった。

// + 下の「ちなみに」(SyntaxErrorだな・・)

また、<a href="javascript:void(0)">hoge</a> として、
リンクは反応するけれどどこにも行かない、みたいな使い方もできるそうです。

まとめ

実用性があるかどうかはわかりませんが、
ちょっとした発見だったので、投稿しました。

まあ、void で 4 文字、{} で 2 文字で、ちょっと負けていますが、
使いたい人がいればどうぞ!!