Apa Fungsi Panah Yang Benar-Benar Dibutuhkan dalam JavaScript

Halo, Habr! Untuk perhatian Anda, saya persembahkan terjemahan dari artikel "Alasan sebenarnya mengapa JavaScript memiliki fungsi panah" oleh Martin Novák.





* Frase meme dari game Skyrim



Jika Anda masih tidak menggunakan fungsi panah, maka jangan salahkan diri Anda sendiri - itu tugas orang tua Anda; sebaliknya, pikirkan tentang manfaat yang dapat Anda peroleh dari menggunakannya sebagai siswa yang rajin. Hari ini semua kode saya ditulis menggunakan fungsi panah.



Ini adalah contoh kode yang sama, yang juga ditulis dalam gaya tradisional:



const arrowFunction = (arg1, arg2) => arg1 + arg 2;

const traditionalFunction = function(arg1, arg2) {
  return arg1 + arg2;
};


Anda mungkin memperhatikan bahwa kodenya jauh lebih pendek saat ditulis menggunakan fungsi panah. Semua yang ditulis sebelum panah adalah argumen, setelah panah adalah hasil yang dikembalikan.

Jika Anda membutuhkan fungsi yang berisi banyak tindakan, Anda dapat menulisnya seperti ini:



const arrowFunction = (arg1, arg2) => {
  const result = arg1 + arg2;
  return result;
};


Fungsi panah juga sering disebut sebagai fungsi lambda, dan digunakan tidak hanya di JavaScript. Python adalah contoh bagus di mana fungsi lambda juga dapat ditemukan.



Di Python, sintaksnya adalah sebagai berikut:



lambdaFunction = lambda a, b : a + b


Menyederhanakan



Menggunakan fungsi panah memotivasi Anda untuk menyederhanakan kode Anda sesuai dengan prinsip KISS (Keep-it-simple-fool) dan prinsip tanggung jawab tunggal (setiap fungsi bertanggung jawab hanya untuk satu tindakan tertentu).



Secara umum, saya menulisnya tanpa tanda kurung kurawal {}. Jika suatu fungsi sulit dibaca atau Anda perlu menggunakan beberapa ekspresi di dalamnya, saya menyarankan Anda untuk memecahnya menjadi beberapa yang lebih kecil.

Kode ini lebih mudah ditulis, digunakan kembali, dan diuji. Selain itu, fungsi dapat diberi nama yang lebih deskriptif untuk secara akurat mewakili pekerjaan yang mereka lakukan.



Fungsi kelas satu



JavaScript memiliki fungsi kelas satu. Ini adalah fungsi yang digunakan seperti variabel biasa. Mereka dapat bertindak sebagai argumen untuk fungsi lain atau mengembalikannya sebagai hasilnya. Contoh yang kemungkinan besar Anda kenal:



document.querySelector('#myButton').addEventListner('click', function() {
  alert('click happened');
});


Tampil di sini adalah fungsi anonim yang diteruskan sebagai argumen ke addEventListener. Teknik ini sering digunakan di Javascript untuk callback.



Contoh pengembalian suatu fungsi berbeda - ditunjukkan di bawah ini:



const myFirstClassFunction = function(a) {
  return function(b) {
    return a + b;
  };
};

myFirstClassFunction(1)(2); // => 3


Namun, dengan fungsi panah, semuanya terlihat jauh lebih bersih:



const myFirstClassArrow = a => b => a + b;

myFirstClassArrow(1)(2); // => 3


Semuanya sederhana di sini: yang ditulis sebelum panah terakhir adalah argumen, dan setelah itu adalah perhitungan. Sebenarnya, kami bekerja dengan beberapa fungsi, dan kami juga dapat menggunakan banyak panggilan fn (call1) (call2);



Aplikasi parsial



Anda dapat mulai menggunakan fungsi panah untuk membuat, seperti bata Lego, fungsi yang dapat diterapkan sebagian. Ini akan memungkinkan Anda untuk membuat fungsi khusus dengan meneruskan argumen tertentu padanya. Mari kita uraikan dalam contoh di bawah ini:



const add = a => b => a + b;

const increaseCounter = counter => add(1)(counter);
increaseCounter(5); // => 6

const pointFreeIncreaseCounter = add(1);
pointFreeIncreaseCounter(5); // => 6


Ini mirip dengan menggunakan fungsi dengan variabel default, tetapi aplikasi parsial memberikan lebih banyak fleksibilitas.



Fungsi ini disebut kari. Mereka adalah urutan fungsi unary dan monad yang umum dalam pemrograman fungsional.



Pemrograman fungsional



Seperti yang mungkin sudah Anda duga, alasan utama fungsi panah adalah pemrograman fungsional. Ini adalah paradigma gaya deklaratif berdasarkan komposisi fungsi sederhana.



Pemrograman fungsional adalah alternatif dari OOP yang disukai oleh banyak pengembang (termasuk penulis artikel). Anda dapat berdebat untuk gaya apa pun, tetapi menurut saya pemrograman fungsional itu keren dan itu akan membuat Anda tidak nyaman hanya dengan berpikir bahwa Anda pernah berpikir secara berbeda.



Fungsi murni hanya mengandalkan masukan dan selalu mengembalikan beberapa nilai. Mereka tidak pernah mengubah (mutasi) variabel lain dan tidak bergantung pada data eksternal di luar nilai input. Ini mengarah pada transparansi referensial, yang membuat pemrograman lebih mudah.



Dan ya, selalu mungkin untuk menulis kode dalam jumlah besar tanpa mengubah satu variabel pun.



Seperti yang mungkin telah Anda perhatikan, fungsi panah dirancang untuk mengubah data antara input dan output. Mereka bahkan tidak perlu mengembalikan ekspresi steno tanpa tanda kurung kurawal.



Fungsi panah - kesimpulan



Fungsi panah membuat sintaks Anda lebih pendek, mengurangi waktu untuk menulis, membaca, dan menguji kode Anda, dan menyederhanakannya. Pikirkanlah, karena kemungkinan besar Anda adalah pengembang tingkat lanjut, dan menerapkan kiat-kiat ini akan membuat Anda lebih maju dan meningkatkan relevansi Anda. Pemrograman fungsional sangat keren. Ini mengubah Anda menjadi seorang seniman yang membuat fungsi pendek yang elegan dari kode.



Contoh fungsional nyata



Untuk memahami apa yang tersembunyi di lubang kelinci, mari kita lihat contoh penggunaan perpustakaan sumber terbuka @ 7urtle / lambda



import {trim, upperCaseOf, lengthOf, lastLetterOf, includes, compose} from '@7urtle/lambda';

const endsWithPunctuation = input =>
  includes(lastLetterOf(input))('.?,!');

const replacePunctuationWithExclamation = input =>
  substr(lengthOf(input) - 1)(0)(input) + '!';

const addExclamationMark = input =>
  endsWithPunctuation(input)
    ? replacePunctuationWithExclamation(input)
    : input + '!';

const shout = compose(addExclamationMark, upperCaseOf, trim);

shout(" Don't forget to feed the turtle.");
// =>    !


Menggunakan fungsi panah dan mempelajari pemrograman fungsional sangat membuat ketagihan. Ini memungkinkan Anda untuk menulis kode yang lebih pendek dengan kinerja yang lebih baik dan dapat digunakan kembali.



JavaScript bisa menjadi rumit karena ketidakkonsistenannya antara penggunaan sintaks mirip C dan kekhasan pemrograman fungsional. Untuk membantu orang lebih memahami dan menyediakan akses ke materi pembelajaran, saya mengembangkan perpustakaan @ 7urtle / lambda. Anda dapat menguasai pemrograman fungsional dengan kecepatan Anda sendiri dan www.7urtle.com akan membantu Anda mempelajari paradigma ini dengan menyediakan semua alat yang Anda butuhkan.



All Articles