ESLint の "no-multi-assign" ルールとは?


ESLint の "no-multi-assign" ルールとは?

このルールは、コードの可読性とメンテナンス性を向上させるために役立ちます。複数の変数に値を代入するコードは、一見すると何が起こっているのか分かりにくく、バグが発生しやすくなります。

var a = 1, b = 2, c = 3;

上記のコードは、a に 1、b に 2、c に 3 を代入しています。しかし、このコードは以下のように書き換えることができます。

var a = 1;
var b = 2;
var c = 3;

このように、1 つの文で複数の変数に値を代入する代わりに、1 つの変数ごとに 1 つの文を使うことで、コードがより読みやすくなり、メンテナンスしやすくなります。

no-multi-assign ルールの例外

このルールにはいくつかの例外があります。

  • 変数の宣言:変数の宣言においては、複数の変数に値を代入することができます。
    var a = 1, b = 2;
    
  • 配列の要素への代入:配列の要素への代入においては、複数の要素に値を代入することができます。
    var numbers = [1, 2, 3];
    
  • オブジェクトのプロパティへの代入:オブジェクトのプロパティへの代入においては、複数のプロパティに値を代入することができます。
    var obj = { a: 1, b: 2 };
    

no-multi-assign ルールを有効化するには、.eslintrc ファイルに以下の設定を追加します。

{
  "rules": {
    "no-multi-assign": "error"
  }
}

この設定により、コードレビューツールや linter ツールで、このルールに違反しているコードを検出することができます。

  • コードの可読性が向上する
  • コードのメンテナンス性が向上する
  • バグが発生しにくくなる
  • 既存のコードを修正する必要がある場合がある
  • 慣れるまで違和感があるかもしれない

no-multi-assign ルールは、コードの可読性とメンテナンス性を向上させるために役立つ ESLint のルールです。このルールを有効化することで、より読みやすく、メンテナンスしやすいコードを書くことができます。



var a = 1, b = 2, c = 3;
var a = 1;
var b = 2;
var c = 3;
var a = 1;
var b = 2;
var c = 3;

var numbers = [1, 2, 3];

var obj = { a: 1, b: 2 };

このコードは、変数の宣言、配列の要素への代入、オブジェクトのプロパティへの代入において、複数の変数、要素、プロパティに値を代入しています。これらのケースは、no-multi-assign ルールの例外として許可されています。

  • 変数の宣言と初期化を別々に記述する
var a;
a = 1;

var b;
b = 2;

var c;
c = 3;
  • ループ内で変数を個別に更新する
for (var i = 0; i < 3; i++) {
  var numbers = [];
  numbers[i] = i + 1;
}
  • デストラクチャリング代入を使用する
var [a, b, c] = [1, 2, 3];


var a;
a = 1;

var b;
b = 2;

var c;
c = 3;
for (var i = 0; i < 3; i++) {
  var numbers = [];
  numbers[i] = i + 1;
}
var [a, b, c] = [1, 2, 3];
  • 別の変数を使用する
var tmp = 1;
var a = tmp;
var b = tmp + 1;
var c = tmp + 2;

上記のように、no-multi-assign ルールには代替方法がありますが、以下の理由から、no-multi-assign ルールを使用することを 一般的には推奨 します。

  • コードが簡潔になる
  • 意図が明確になる
  • メンテナンスしやすい

no-multi-assign ルールと他のルールとの組み合わせ

no-multi-assign ルールは、他の ESLint ルールと組み合わせて使用することができます。例えば、no-unused-vars ルールと組み合わせて使用すると、使用されていない変数を検出することができます。

{
  "rules": {
    "no-multi-assign": "error",
    "no-unused-vars": "error"
  }
}