[解決済み] 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文字短い
()
.
オプションの括弧は、以下のものと同じスタイルの問題に該当します。 任意波括弧 . これは、ほとんどの場合、好みやコードスタイルの問題ですが、一貫性を保つために、ここでは冗長性が好まれます。
矢印関数は括弧なしで単一のパラメータを許容していますが、ゼロ、単一の非構造化、単一の残り、複数のパラメータとは矛盾しています。
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) => { ... };
上記の理由から、私個人としては
_ => { ... }
のコードスタイルは、避けるべき悪いトーンです。
関連
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] アロー関数」と「ファンクション」は同じものですか?
-
[解決済み] ジェネリックスを使用したTypescriptのarrow関数の構文はどのようになっていますか?
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
-
[解決済み】ES6クラス変数の代替品
-
[解決済み】ES6のarrow関数構文をジェネレータで使用することはできますか?(アロー記法)
-
[解決済み] ES6 矢印関数で return 文を使用するのはどのような場合か
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
[解決済み】JavaScriptの1行文に中括弧は必要ですか?
-
[解決済み] Angular Materialダイアログエリアの外をクリックしてダイアログを閉じないようにする(Angularバージョン4.0以上で使用可能)