Fungsi Currying dalam JavaScript

ambil wadah, tambahkan air, tambahkan beberapa baris kode, tambahkan beberapa daun kari, dan masala (sesuai selera), masak dengan api kecil selama 25 menit, dan inilah fungsi curring, siap disajikan dalam produksi . Hanya bercanda boies and gols.
Halooo, pengembang JS. Saya kembali dengan topik hangat "Function Currying"
Cerita ini mencakup:
- apa itu kari, bagaimana cara kerjanya, dan mengapa digunakan.
Cerita dimulai di sini
Apa itu fungsi kari?
Currying adalah mengubah fungsi yang membutuhkan banyak argumen [contoh: functionName(a, b,c)] menjadi beberapa fungsi yang mengambil satu argumen secara berurutan.
oke oke.., saya tahu kedengarannya con-fu-jing (membingungkan), juga reaksi saya sama ketika saya membaca ini untuk pertama kalinya.
ok mari kita pahami dengan mudah, sebuah fungsi (doSum) yang mengambil semua args dalam satu tembakan yaitu doSum(a, b, c) [contoh di bawah: Fungsi penjumlahan normal.

Diubah menjadi beberapa fungsi (addNumbers(a), (b), (c)) yang mengambil satu argumen sekaligus secara berurutan.
Catatan: Fungsionalitas (tujuan) dari kedua fungsi tersebut sama, hanya diganti namanya untuk pemahaman yang lebih baik.

inilah fungsi kari menurut Geeks for Geeks :
Ini adalah teknik dalam pemrograman fungsional, transformasi fungsi beberapa argumen menjadi beberapa fungsi argumen tunggal secara berurutan.
dengan kata sederhana, fungsi alih-alih mengambil semua argumen sekaligus, fungsi mengambil argumen pertama dan mengembalikan fungsi yang mengambil argumen lain, dan kemudian mengembalikan fungsi lain yang mengambil argumen ketiga, dan seterusnya hingga semua argumen habis. diambil (contoh pada gambar bernama: function currying).
Bagaimana Cara Kerja Kari?
curring dalam javascript mungkin agak sulit untuk dipahami karena ini adalah javascript
tapi mari kita coba mengatasinya, di bawah ini adalah contoh fungsi sederhana

di sini fungsi "doSum" menambahkan argumen yang diberikan dan mengembalikan jumlah semua argumen yang diteruskan.
di bawah ini adalah versi kari dari fungsi yang sama (baru diganti namanya, untuk pemahaman yang lebih baik)

output dari fungsi di atas dan di bawah akan sama, 18
addNumbers adalah versi kari dari fungsi doSum di atas, addNumber fungsi induk mengambil argumen yaitu 5 dalam kasus kami, dan mengembalikan fungsi anonim lain yang mengambil argumen lain yaitu 6 dalam kasus kami dan proses berlanjut hingga semua parameter dilewatkan, fungsi anonim terakhir mengembalikan nilai setelah memproses semua input.
kita mengimplementasikan fungsi bersarang pada contoh di atas, jadi setiap fungsi mengambil satu argumen dan mengembalikan fungsi lain hingga semua argumen tidak selesai.
Anda dapat mencari fungsi Anda dengan 2 cara berbeda, menggunakan fungsi ikat dan menggunakan penutupan, mari kita lihat tampilannya
fungsi kari menggunakan fungsi ikat
jika Anda tidak mengetahui apa fungsi pengikat, periksa cerita saya ini .

di sini dalam contoh di atas, kami menggunakan fungsi bind dari javascript, dan menggunakan fungsi bind kami mencari fungsi "onBoardUser".
basicCompanyDetails mirip untuk semua pengguna onboard, jadi kami ingin membuat detail secara default tersedia untuk semua pengguna yang onboard, di sini kami meneruskan argumen "basicCompanyDetails" ke fungsi bind dan membuat instance "onBoardUser", di sini fungsi ikat mengembalikan fungsi yang dapat Anda simpan di suatu tempat di memori dan menjalankannya nanti, di sini kami menyimpan fungsi di addUser dan kami memohon untuk semua pengguna.
ini adalah bagaimana Anda dapat mencari fungsi Anda menggunakan fungsi bind di javascript. lebih banyak contoh pada gambar di bawah ini.

Anda juga dapat meneruskan kedua parameter sambil memanggil metode addUserToSales yang akan menampilkan hasil yang sama.
fungsi kari menggunakan penutupan.
penutupan adalah konsep yang sangat umum tetapi rumit dalam javascript, tetapi tidak banyak dibahas, Anda dapat membacanya tentang apa itu penutupan di sini .
mari kita coba mengimplementasikan function currying menggunakan closure.

dalam contoh di atas, kami telah membuat fungsi "onBoardUser" yang mengambil satu argumen dan mengembalikan fungsi anonim lain yang mengambil argumen lain, meringkas detailnya, dan mengembalikannya.
kami memanggil fungsi "onBoardUser" dengan satu argumen yaitu accountDepartmentDetails dan menyimpannya ke dalam variabel (ingat bahwa onBoardUser mengembalikan fungsi), jadi kami menyimpan fungsi ke dalam variabel addUsertoAccounts dan sekarang variabel tersebut memiliki fungsi yang dapat dipanggil kapan saja dengan argumen yang diminta, jadi kami menjalankan fungsi anonim (dikembalikan oleh onBoardUser) yang disimpan di addUsertoAccounts dengan argumen (detail pengguna yaitu detailOfJohn).
setelah fungsi dipanggil, ia telah menyelesaikan eksekusi pernyataan yang ada di dalamnya dan mencetak hasilnya.

jika fungsi dipanggil setelah beberapa 10k baris kode juga, itu akan mencetak keluaran yang sama, karena ini adalah penutupan, dan mengingat ruang lingkup leksikalnya.
Curring dengan ES6:

ini adalah bagaimana Anda dapat menggunakan fungsi kari dengan penutupan di JS.
tetap saja, Anda mungkin memiliki satu pertanyaan di kepala Anda, Jika kita dapat memberikan banyak argumen ke suatu fungsi, lalu mengapa kita perlu melakukan kari sama sekali?
ini mungkin akan menjawab keraguan itu.
mengapa itu digunakan
mengapa? mengapa? mengapa?
- currying adalah teknik yang membagi fungsi menjadi fungsi yang lebih kecil, masing-masing fungsi individu memiliki pekerjaannya sendiri dan itu membuat fungsi Anda murni dan tidak terlalu rentan terhadap kesalahan dan efek samping.
- contoh: fungsi pertama memvalidasi detail pengguna, yang kedua memvalidasi detail perusahaan, dll.
- itu digunakan dalam pemrograman fungsional untuk menggunakan fungsi tingkat tinggi
- ini membantu Anda menjaga kode tetap bersih dan teratur.
- juga, Anda dapat menggunakan kari sebagai mekanisme yang membantu Anda memeriksa apakah Anda memiliki segalanya sebelum melanjutkan
- contoh: setiap fungsi bersarang tidak akan dieksekusi jika tidak mendapatkan argumen yang diperlukan.