次のような関数を書いて eslint でチェックをかけます。


const f = (x, y) => {
  return x + y;
};

このような書き方は `arrow-body-style` を指定していると Unexpected block statement surrounding arrow body の指摘を受けます。

こう書け、ということです。


const f = (x, y) => x + y;

[async.js](https://github.com/caolan/async) などを使っていると、このような局面によく出会います。

以下の例は説明のためのものなので、別段非同期実行する必要はありません。単に 1〜10 までを足すプログラムです。


"use strict";

const async = require("async");
let sum = 0,
    i = 1;

async.whilst(          // async.while()

  () => i <= 10,         // condition

  (callback) => {        // procedure
    sum = sum + i;
    i = i + 1;
    callback();
  },

  () => {                // finally
    console.log(sum);
  }

);

この中で、condition で書いた式は関数の本体を `{` と `}` で囲むと eslint から指摘を受け、finally の方は指摘を受けないというのは、どうも統一が取れなくて落ち着かない気がします。

単に気持ちの問題ですが、多くのプログラミングスタイルでは、読み間違いを防ぐために統一するスタイルを採用する傾向が強いように感じています。例えば、`if` 〜 `else` などで、実行する文が 1つしかなくても常に `{` と `}` で囲むというスタイルと同じ考え方です。

私としては、 `{` と `}` は省略せず、こう書きたいです。


  () => {              // condition
    i <= 10,           // not work
  },

この書き方は ES6 のセマンティクスとして NG で、この関数は `true` か `false` ではなく、常に `undefined` を返します。アロー関数で `return` を省略できるのは `{` と `}` を書かないときだけです。

見た目を統一したいなら、こうするしかありません。


  () => {              // condition
    return i <= 10,
  },

関数型言語としては、`return` をいちいち書くのはちょっと面倒な気がします。普通の関数型言語では、関数の本体の中の、最後の式の値が自動的に返却されるのですけどね。

やや冗長な書き方になりますが、私は `arrow-body-style` は使用しないことにしました。