Tampaknya ada keengganan besar untuk membuat fungsi di JS. Keengganan ini menyebabkan orang mencoba untuk menjadi pintar dan menggunakan trik konyol hanya untuk menjaga barang-barang dalam satu baris seperti panggilan fungsi. Tentu saja nama fungsi dalam panggilan juga berfungsi sebagai dokumentasi tambahan. Kita tidak dapat melampirkan komentar pada ekspresi yang rumit karena dengan begitu akan mengalahkan maksud melakukannya sehingga kita menyebutnya "idiom" dan tiba-tiba itu bisa dimengerti.
Javascript sangat mudah diakses, kebanyakan orang tidak makan spesifikasi untuk sarapan seperti kami. Jadi mereka tidak akan pernah mengerti apa asumsi tersembunyi dan kasus tepi idiom.
x = x || 'default_value';
Rata-rata joe tidak akan mengerti ini atau telah menghafal bahwa itu adalah ungkapan untuk nilai default. Keduanya berbahaya, bahkan yang terakhir bahkan lebih berbahaya. Dia tidak akan mengerti asumsi dan kasus tepi di sini. Dia tidak akan peduli untuk membaca spesifikasi dan memahaminya.
Ketika saya melihat kode yang saya lihat "apakah itu null
atau undefined
, kemudian set ke nilai default ini. Meskipun akan juga secara implisit mengobati +0
, -0
, NaN
, false
, dan""
nilai-nilai tidak cocok. Saya harus ingat bahwa 3 bulan dari sekarang ketika kebutuhan yang untuk berubah. Saya mungkin akan melupakannya. "
Asumsi implisit sangat mungkin menyebabkan bug di masa depan dan ketika basis kode Anda penuh dengan trik seperti ini maka tidak ada kemungkinan Anda menyimpan semuanya di kepala Anda setiap kali Anda memikirkan apa yang akan mempengaruhi modifikasi. Dan ini untuk "pro JS", rata-rata joe akan menulis bug bahkan jika persyaratan untuk menerima nilai palsu untuk memulai.
Cuplikan baru Anda memiliki sintaks yang lebih akrab tetapi masih memiliki masalah di atas.
Anda bisa pergi dengan:
function f(x) {
x = valueOrDefault(x, "default_value");
}
Sekarang Anda dapat memiliki logika yang sangat kompleks untuk menangani kasus tepi dan kode klien masih terlihat cantik dan mudah dibaca.
Sekarang, bagaimana Anda membedakan antara fitur bahasa canggih seperti melewatkan fungsi sebagai argumen atau trik pintar || "default"
?
Trik cerdas selalu beroperasi di bawah beberapa asumsi tersembunyi yang dapat diabaikan ketika kode awalnya dibuat. Saya tidak akan pernah harus mengubah IIFE ke sesuatu yang lain karena persyaratan berubah, itu akan selalu ada. Mungkin pada tahun 2020 ketika saya bisa menggunakan modul yang sebenarnya tapi ya.
| 0
atau versi pemujaan kargo yang ~~num
digunakan untuk lantai mengasumsikan batas integer positif dan bertanda 32-bit.
|| "default"
menganggap semua nilai falsy sama dengan tidak melewatkan argumen sama sekali.
Dan seterusnya.