ES6/Typescript の矢印関数で _ (アンダースコア) 変数を使用する 質問する

ES6/Typescript の矢印関数で _ (アンダースコア) 変数を使用する 質問する

私は 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

このスタイルを使用できる理由 (おそらくここで使用された理由) は、_が より 1 文字短いためです()

オプションの括弧は、次のようなスタイルの問題に陥ります。オプションの中括弧これは主に好みとコード スタイルの問題ですが、一貫性を保つために冗長性が優先されます。

矢印関数では括弧なしの単一のパラメータが許可されますが、ゼロ、単一の構造化分解、単一の残余引数、および複数のパラメータとは矛盾します。

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

エラーis declared but never usedTypeScript 2.0で修正されましたアンダースコア付きパラメータの場合、リンターまたは IDE からの警告が_トリガーされる可能性もあります。これは、これを行うことに対するかなりの反対意見です。unused variable/parameter

_無視されるパラメータには慣例的に使用できます (他の回答で既に説明されているように)。これは許容できると考えられるかもしれませんが、この習慣は_Underscore/Lodash 名前空間との競合を引き起こす可能性があり、無視されるパラメータが複数ある場合にも混乱を招く可能性があります。このため、適切に名前が付けられたアンダースコア付きパラメータ (TS 2.0 でサポート) を持つことは有益であり、関数シグネチャとパラメータが無視としてマークされている理由を理解する時間を節約します (これは_ショートカットとしてのパラメータの目的に反します)。

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

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

おすすめ記事