1. ホーム
  2. javascript

[解決済み] ES6/Typescriptでアロー関数と_(アンダースコア)変数を使用する

2022-04-27 05:54:38

質問

Angularのサンプルでこの構成に出会いましたが、なぜこれが選ばれるのでしょうか?

_ => console.log('Not using any parameters');

という変数があることは理解しています。 _ は気にしない/使わないという意味ですが、これが唯一の変数である以上、この変数の使用を好む理由があるのでしょうか? _ を超える。

() => console.log('Not using any parameters');

確かにこれでは、入力する文字数が1文字減る程度では済まない。その () の構文は、私の意見では、より意図を伝え、また、よりタイプに特化しています。なぜなら、そうでなければ、最初の例は次のように見えるはずだからです。

(_: any) => console.log('Not using any parameters');

一応、これが使われている文脈でした。

submit(query: string): void {
    this.router.navigate(['search'], { queryParams: { query: query } })
      .then(_ => this.search());
}

解決方法は?

このスタイルが使える理由は(おそらくここで使われた理由も)、次のとおりです。 _ よりも1文字短い () .

オプションの括弧は、以下のものと同じスタイルの問題に該当します。 任意波括弧 . これは、ほとんどの場合、好みやコードスタイルの問題ですが、一貫性を保つために、ここでは冗長性が好まれます。

矢印関数は括弧なしで単一のパラメータを許容していますが、ゼロ、単一の非構造化、単一の残り、複数のパラメータとは矛盾しています。

let zeroParamFn = () => { ... };
let oneParamFn = param1 => { ... };
let oneParamDestructuredArrFn = ([param1]) => { ... };
let oneParamDestructuredObjFn = ({ param1 }) => { ... };
let twoParamsFn = (param1, param2) => { ... };
let restParamsFn = (...params) => { ... };

とはいえ is declared but never used エラー は TypeScript 2.0 で修正されました。 をアンダースコアのパラメータに使用します。 _ をトリガーすることもできます。 unused variable/parameter の警告が表示されます。これは、これを行うことに対するかなりの反論です。

_ は、無視されるパラメータに慣習的に使用することができます(他の回答ですでに説明されているとおり)。これは許容範囲とみなされるかもしれませんが、この習慣は _ Underscore/Lodashの名前空間は、無視されるパラメータが複数ある場合にも混乱を招きそうです。このような理由から、アンダースコアで適切に命名されたパラメータを持つことは有益です(TS 2.0でサポート)。 _ パラメータはショートカットです)。

let fn = (param1, _unusedParam2, param3) => { ... };

上記の理由から、私個人としては _ => { ... } のコードスタイルは、避けるべき悪いトーンです。