Fungsi Murni dan Efek Samping
Tulis fungsi yang dapat diprediksi dan diuji.
Fungsi Murni dan Efek Samping adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 4 pelajaran total.
Yang Membuat Fungsi Murni
Fungsi murni memiliki dua sifat: dengan masukan yang sama, fungsi tersebut selalu mengembalikan keluaran yang sama dan tidak menimbulkan efek samping yang dapat diamati. Fungsi murni bersifat mudah diprediksi dan mudah diuji.
function add(a, b) {
return a + b;
}
console.log(add(2, 3));
console.log(add(2, 3)); // always 5Keluaran Deterministik
Kemurnian berarti determinisme. Argumen yang sama harus selalu menghasilkan hasil yang sama, tanpa bergantung pada keadaan tersembunyi, waktu, atau keacakan.
function double(n) {
return n * 2;
}
console.log(double(10)); // always 20Apa Itu Efek Samping
Efek samping adalah apa pun yang dilakukan fungsi selain mengembalikan nilai: pencatatan, perubahan keadaan eksternal, penulisan ke penyimpanan, pemanggilan jaringan, atau perubahan pada argumennya.
let total = 0;
function impureAdd(n) {
total += n; // side effect: mutates outer state
return total;
}
console.log(impureAdd(5));
console.log(impureAdd(5)); // 5 then 10, not pureBergantung pada Keadaan Eksternal
Membaca keadaan eksternal yang dapat berubah juga merusak kemurnian, karena keluaran berubah meskipun argumennya tetap sama.
let rate = 1.5;
function priceImpure(x) {
return x * rate; // depends on outside variable
}
console.log(priceImpure(10)); // 15
rate = 2;
console.log(priceImpure(10)); // 20 - different resultMembuatnya Murni
Berikan semua hal yang dibutuhkan fungsi sebagai argumen. Kini hasilnya hanya bergantung pada masukan.
function price(x, rate) {
return x * rate;
}
console.log(price(10, 1.5)); // 15
console.log(price(10, 2)); // 20Mengubah Argumen Membuatnya Tidak Murni
Mengubah objek atau larik yang diteruskan ke fungsi merupakan efek samping yang dapat diamati oleh pemanggil. Fungsi murni tidak mengubah masukannya.
function impurePush(arr, x) {
arr.push(x); // mutates caller array
return arr;
}
const a = [1, 2];
impurePush(a, 3);
console.log(a); // [1, 2, 3] - caller changedMengembalikan Nilai Baru
Versi murni membuat dan mengembalikan nilai baru, bukan mengubah masukan.
function pureAppend(arr, x) {
return [...arr, x];
}
const a = [1, 2];
const b = pureAppend(a, 3);
console.log(a); // [1, 2] unchanged
console.log(b); // [1, 2, 3]Mengapa Kemurnian Membantu
Fungsi murni sangat mudah diuji (tanpa penyiapan dan tiruan), aman untuk disimpan dalam cache (dimemoisasi), serta aman dijalankan dalam urutan apa pun atau secara paralel. Fungsi tersebut membuat penalaran tentang kode menjadi terlokalisasi.
function square(n) { return n * n; }
console.log([1, 2, 3].map(square)); // [1, 4, 9]Mengisolasi Ketidakmurnian
Anda tidak dapat menghindari semua efek samping; aplikasi harus mencatat, mengambil data, dan menampilkan hasil. Tujuannya adalah mendorong efek ke bagian tepi dan menjaga logika inti tetap murni.
function computeTotal(items) {
return items.reduce((s, i) => s + i.price, 0);
}
const total = computeTotal([{ price: 5 }, { price: 7 }]);
console.log(total); // 12 - pure core, log at the edgeTransparansi Referensial
Pemanggilan murni dapat digantikan dengan hasilnya tanpa mengubah perilaku. add(2, 3) dapat dipertukarkan dengan 5 di mana pun. Sifat ini disebut transparansi referensial.
function add(a, b) { return a + b; }
const x = add(2, 3) + add(2, 3);
const y = 5 + 5;
console.log(x === y); // trueMengenali Ketidakmurnian
Perhatikan petunjuk berikut: console, Math.random, Date.now, penugasan ke variabel luar, atau perubahan pada argumen. Semua hal tersebut membuat fungsi menjadi tidak murni.
function pureRoll(seed) {
return (seed * 1103515245 + 12345) % 100;
}
console.log(pureRoll(42)); // deterministic, testablePemeriksaan Singkat
Mengenali fungsi murni.
Ringkasan
Fungsi murni bersifat deterministik dan bebas dari efek samping: tidak ada perubahan eksternal, masukan/keluaran, atau perubahan argumen. Berikan dependensi sebagai argumen dan kembalikan nilai baru, bukan mengubah nilai yang ada. Kemurnian memberikan kemudahan pengujian, memoisasi, transparansi referensial, dan keamanan untuk pemrosesan paralel. Jaga inti kode tetap murni dan dorong efek ke bagian tepi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fungsi Murni dan Efek Samping” gratis?
Ya — teks lengkap “Fungsi Murni dan Efek Samping” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Fungsi Murni dan Efek Samping”?
Tulis fungsi yang dapat diprediksi dan diuji. Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai JavaScript Academy?
Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Fungsi Murni dan Efek Samping” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?
Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Fungsi Murni dan Efek Samping
- Transformasi Data Deklaratif
- Menghindari Mutasi
- Gaya Tanpa Argumen