Saya menemukan konstruksi ini dalam contoh Angular dan saya bertanya-tanya mengapa ini dipilih:
_ => console.log('Not using any parameters');
Saya memahami bahwa variabel _ berarti tidak peduli / tidak digunakan tetapi karena ini adalah satu-satunya variabel, adakah alasan untuk lebih memilih penggunaan _ daripada:
() => console.log('Not using any parameters');
Tentunya ini tidak boleh kurang dari satu karakter untuk diketik. Sintaks () menyampaikan maksud dengan lebih baik menurut saya dan juga lebih spesifik jenisnya karena jika tidak, menurut saya contoh pertama seharusnya terlihat seperti ini:
(_: any) => console.log('Not using any parameters');
Jika penting, ini adalah konteks di mana itu digunakan:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Jawaban:
Alasan mengapa gaya ini dapat digunakan (dan mungkin mengapa gaya ini digunakan di sini) adalah karena
_
satu karakter lebih pendek dari()
.Tanda kurung opsional termasuk dalam masalah gaya yang sama seperti tanda kurung kurawal opsional . Ini adalah masalah selera dan gaya kode untuk sebagian besar, tetapi verbositas disukai di sini karena konsistensi.
Sementara fungsi panah memungkinkan satu parameter tanpa tanda kurung, itu tidak konsisten dengan nol, satu dirusak, satu istirahat dan beberapa parameter:
Meskipun
is declared but never used
kesalahan telah diperbaiki di TypeScript 2.0 untuk parameter yang digarisbawahi,_
juga dapat memicuunused variable/parameter
peringatan dari linter atau IDE. Ini adalah argumen yang cukup kuat untuk tidak melakukan ini._
dapat digunakan secara konvensional untuk parameter yang diabaikan (seperti jawaban lain yang sudah dijelaskan). Meskipun ini mungkin dianggap dapat diterima, kebiasaan ini dapat mengakibatkan konflik dengan_
ruang nama Underscore / Lodash, juga terlihat membingungkan ketika ada beberapa parameter yang diabaikan. Untuk alasan ini, bermanfaat untuk memiliki parameter yang digarisbawahi dengan nama yang benar (didukung di TS 2.0), juga menghemat waktu untuk mencari tahu tanda tangan fungsi dan mengapa parameter ditandai sebagai diabaikan (ini menentang tujuan_
parameter sebagai pintasan):Untuk alasan yang tercantum di atas, saya pribadi akan menganggap
_ => { ... }
gaya kode nada buruk yang harus dihindari.sumber
(
biasanya disertai dengan)
. Saya pribadi lebih suka menggunakanp
parameter, saya juga bertanya-tanya apakah ini memiliki masalah kinerjaTidak persis.
()
mengatakan bahwa fungsi tersebut tidak mengharapkan argumen apa pun, tidak mendeklarasikan parameter apa pun. Fungsinya.length
adalah 0.Jika Anda menggunakan
_
, ini secara eksplisit menyatakan bahwa fungsi tersebut akan diteruskan satu argumen, tetapi Anda tidak peduli tentang itu. Fungsinya.length
akan menjadi 1, yang mungkin penting dalam beberapa framework.Jadi dari perspektif tipe, ini mungkin hal yang lebih akurat untuk dilakukan (terutama ketika Anda tidak mengetiknya dengan
any
but, katakanlah,_: Event
). Dan seperti yang Anda katakan, itu satu karakter yang kurang untuk diketik yang juga lebih mudah dijangkau pada beberapa keyboard.sumber
_
variabel fungsi panah yang tidak digunakan , saya ingin tahu apakah ada perbedaan kinerja dibandingkan dengan menggunakan()
Saya kira
_ =>
ini baru saja digunakan() =>
karena_
umum dalam bahasa lain di mana tidak diizinkan untuk hanya menghilangkan parameter seperti di JS._
populer di Go dan juga digunakan di Dart untuk menunjukkan bahwa parameter diabaikan dan mungkin parameter lain yang tidak saya ketahui.sumber
_
ini mungkin dipinjam dari bahasa fungsional seperti ML dan Haskell, yang lama mendahului penemuan Python (apalagi Go, Dart, atau TypeScript).Dimungkinkan untuk membedakan antara kedua penggunaan, dan beberapa framework menggunakan ini untuk mewakili berbagai jenis callback. Misalnya saya pikir kerangka kerja node express menggunakan ini untuk membedakan antara jenis middleware, misalnya penangan kesalahan menggunakan tiga argumen, sedangkan perutean menggunakan dua.
Diferensiasi tersebut dapat terlihat seperti contoh di bawah ini:
sumber
Ketika saya menulis posting, saya mendapat kesan
_
bahwa satu-satunya cara untuk membuat fungsi panah tanpa()
, yang membuat saya percaya bahwa penggunaan_
dapat memiliki beberapa keuntungan kecil, tetapi saya salah. @Halt telah mengonfirmasi di komentar bahwa ia berperilaku seperti variabel lain, ini bukan konstruksi bahasa khusus.Saya ingin menyebutkan satu hal lagi yang saya sadari tentang fungsi panah garis bawah ini saat menguji diri saya sendiri yang tidak saya temukan disebutkan di mana pun. Anda dapat menggunakan garis bawah dalam fungsi sebagai parameter , meskipun ini mungkin bukan penggunaan yang dimaksudkan karena seharusnya mewakili parameter yang tidak digunakan. Untuk kejelasan, saya tidak akan benar-benar merekomendasikan menggunakannya dengan cara ini.
tetapi akan berguna untuk mengetahui hal-hal seperti codegolf , tantangan di mana Anda menulis kode terpendek(ternyata Anda bisa menggunakan karakter apa saja tanpa()
). Saya bisa membayangkan beberapa kasus penggunaan nyata di mana perpustakaan menggunakan ini dan Anda perlu menggunakannya bahkan jika mereka tidak bermaksud untuk fungsi itu.Contoh:
Diuji dengan konsol Chrome, Versi 76.0.3809.132 (Bentukan Resmi) (64-bit)
sumber
()
sebelum saya membuat posting ini, saya pikir_
itu satu-satunya cara, itulah sebabnya saya memutuskan untuk menunjukkan ini. Dengan pemikiran ini ternyata tidak ada yang istimewa untuk digunakan bahkan untuk bermain golf, karena Anda bisa saja menggunakan karakter biasa. Lebih baik digunakan hanya untuk mengikuti konvensi, seperti yang Anda katakan.