Anda: “Hei, saya terus mendengar tentang pengaturcaraan berfungsi. Bunyinya bagus, tetapi apakah sebenarnya, dan bagaimana ia berbeza daripada apa yang saya sudah lakukan dalam JavaScript?”
Saya: Soalan yang bagus! Mari kita pecahkan langkah demi langkah dan bandingkan pengaturcaraan berfungsi (FP) dengan cara penting pengekodan tradisional.
Dalam pengaturcaraan imperatif, anda menulis arahan langkah demi langkah tentang cara melakukan sesuatu. Ini semua tentang urutan tugas—mengemas kini pembolehubah, menggunakan gelung dan mengubah suai keadaan secara langsung.
Dalam pengaturcaraan berfungsi, anda menumpukan pada apa yang anda mahu lakukan. Anda menggunakan fungsi tulen, mengelakkan mutasi langsung dan memanfaatkan alat pengisytiharan seperti peta, penapis dan pengurangan.
Mari kita lihat ini dengan contoh bersebelahan menggunakan senario CRUD (Buat, Baca, Kemas Kini, Padam) untuk mengurus senarai pengguna.
Berikut ialah contoh penting di mana kita mengubah tatasusunan asal:
let users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; function addUser(users, newUser) { users.push(newUser); // Directly modifies the array } addUser(users, { id: 3, name: 'Charlie' }); console.log(users);
Isu:
Berikut ialah pendekatan berfungsi, di mana kita mengembalikan tatasusunan baharu dan bukannya mengubahnya:
const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; const addUser = (users, newUser) => [...users, newUser]; // Returns a new array const newUsers = addUser(users, { id: 3, name: 'Charlie' }); console.log('Original:', users); console.log('New:', newUsers);
Faedah:
Berikut ialah contoh di mana kita menukar objek secara langsung di dalam tatasusunan:
let users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; function updateUser(users, id, newName) { for (let i = 0; i < users.length; i++) { if (users[i].id === id) { users[i].name = newName; // Directly mutates the object break; } } } updateUser(users, 1, 'Alicia'); console.log(users);
Isu:
Begini cara kami melakukannya secara berfungsi menggunakan peta dan kebolehubah:
const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; const updateUser = (users, id, newName) => users.map(user => user.id === id ? { ...user, name: newName } : user ); const updatedUsers = updateUser(users, 1, 'Alicia'); console.log('Original:', users); console.log('Updated:', updatedUsers);
Faedah:
Berikut ialah versi penting menggunakan gelung dan pengubahsuaian langsung:
let users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; function addUser(users, newUser) { users.push(newUser); // Directly modifies the array } addUser(users, { id: 3, name: 'Charlie' }); console.log(users);
Isu:
Menggunakan penapis, kami boleh menyatakan niat secara deklaratif:
const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; const addUser = (users, newUser) => [...users, newUser]; // Returns a new array const newUsers = addUser(users, { id: 3, name: 'Charlie' }); console.log('Original:', users); console.log('New:', newUsers);
Faedah:
Aspect | Imperative | Functional |
---|---|---|
Data Mutation | Mutates the original data (e.g., push, splice) | Avoids mutation; creates new data structures |
Readability | Step-by-step, more verbose | Declarative and concise |
Side Effects | More prone to unexpected side effects | Pure functions eliminate side effects |
Focus | How to achieve a task (manual looping) | What to achieve (use higher-order functions) |
Tools Used | Loops, conditionals | map, filter, reduce, spread operator |
? Mengapa Memilih Pengaturcaraan Fungsian?
Kod anda menjadi lebih mudah untukmenaakul dan menguji. Mengelakkan kesan sampingan menjadikan pepijat kurang berkemungkinan. Ia lebih ringkas
dandeklaratif, mengurangkan beban mental.
Atas ialah kandungan terperinci Apakah itu Pengaturcaraan Fungsian, dan Bagaimana Anda Boleh Melakukannya dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!