Gaya Tanpa Titik
Gubah fungsi tanpa menamakan argumen.
Gaya Tanpa Titik ialah pelajaran Akademi JavaScript percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi JavaScript, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi JavaScript merangkumi sejumlah 4 pelajaran.
Apakah gaya tanpa argumen
Gaya tanpa argumen (atau tersirat) mentakrifkan fungsi dengan menggabungkan fungsi lain, tanpa menyebut argumennya. Argumen itu ialah titik tersirat yang dihantar sepanjang proses.
function double(n) { return n * 2; }
const nums = [1, 2, 3];
// pointed: argument named explicitly
console.log(nums.map((n) => double(n))); // [2, 4, 6]
// point-free: no named argument
console.log(nums.map(double)); // [2, 4, 6]Menghantar fungsi secara terus
Apabila fungsi panggil balik hanya meneruskan argumennya kepada fungsi lain, anda boleh menghantar fungsi itu mengikut nama dan bukannya membungkusnya.
const len = (s) => s.length;
const words = ["a", "bb", "ccc"];
console.log(words.map((w) => w.length)); // pointed: [1, 2, 3]
console.log(words.map(len)); // point-free: [1, 2, 3]Penggubahan fungsi
Kod tanpa argumen banyak bergantung pada penggubahan: membina fungsi baharu dengan memasukkan keluaran satu fungsi ke dalam fungsi seterusnya.
const compose = (f, g) => (x) => f(g(x));
const inc = (n) => n + 1;
const double = (n) => n * 2;
const incThenDouble = compose(double, inc);
console.log(incThenDouble(3)); // (3+1)*2 = 8Pembantu pipe
pipe membaca dari kiri ke kanan, yang dianggap lebih jelas oleh ramai orang berbanding compose. Ia menggunakan fungsi mengikut susunan.
const pipe = (...fns) => (x) => fns.reduce((acc, f) => f(acc), x);
const inc = (n) => n + 1;
const double = (n) => n * 2;
const f = pipe(inc, double);
console.log(f(3)); // 8Membina saluran pemprosesan
Dengan pipe, anda boleh menyatakan transformasi berbilang langkah sebagai fungsi bernama tanpa menamakan data walau sekali.
const pipe = (...fns) => (x) => fns.reduce((a, f) => f(a), x);
const trim = (s) => s.trim();
const lower = (s) => s.toLowerCase();
const clean = pipe(trim, lower);
console.log(clean(" HELLO ")); // "hello"Currying membolehkan gaya tanpa argumen
Currying menukar fungsi berbilang argumen menjadi rangkaian fungsi satu argumen. Hasilnya ialah fungsi satu argumen yang sedia digubah.
const multiply = (a) => (b) => a * b;
const triple = multiply(3);
console.log([1, 2, 3].map(triple)); // [3, 6, 9]Penggunaan separa
Menetapkan sesetengah argumen terlebih dahulu menghasilkan fungsi khusus yang boleh dihantar secara terus, iaitu satu lagi cara menghasilkan kod tanpa argumen.
const add = (a, b) => a + b;
const add10 = add.bind(null, 10);
console.log([1, 2, 3].map(add10)); // [11, 12, 13]Menggubah predikat
Anda boleh membina pembantu benar/palsu daripada satu sama lain untuk menghasilkan penapis tanpa argumen yang kemas, tanpa kekusutan anak panah sebaris.
const isEven = (n) => n % 2 === 0;
const negate = (fn) => (x) => !fn(x);
const isOdd = negate(isEven);
console.log([1, 2, 3, 4].filter(isOdd)); // [1, 3]Pertukaran dari segi kebolehbacaan
Gaya tanpa argumen boleh kelihatan elegan tetapi, jika digunakan secara berlebihan, menjadi sukar difahami. Gunakannya apabila ia menjelaskan tujuan (map(double)) dan kekalkan bentuk berargumen apabila penamaan argumen membantu pemahaman.
const names = ["ada", "bob"];
console.log(names.map((n) => n.toUpperCase())); // ["ADA","BOB"]Perangkap rujukan kaedah
Menghantar kaedah mengikut nama boleh menyebabkan this hilang. Bungkus atau bind kaedah itu apabila fungsi bergantung pada konteks objek.
const calc = {
factor: 2,
scale(n) { return n * this.factor; }
};
console.log([1, 2].map(calc.scale.bind(calc))); // [2, 4]Menggubah transformasi sebenar
Kesimpulannya: fungsi kecil yang bernama dan digubah menjadi saluran pemprosesan menghasilkan aliran data yang deklaratif, boleh diuji dan tanpa argumen.
const pipe = (...fns) => (x) => fns.reduce((a, f) => f(a), x);
const toNums = (arr) => arr.map(Number);
const onlyPos = (arr) => arr.filter((n) => n > 0);
const sum = (arr) => arr.reduce((a, n) => a + n, 0);
const process = pipe(toNums, onlyPos, sum);
console.log(process(["3", "-1", "4"])); // 7Semakan pantas
Gaya tanpa argumen.
Ringkasan
Gaya tanpa argumen membina fungsi dengan menggubah fungsi lain tanpa menamakan argumen. Hantar fungsi mengikut rujukan (map(double)), gubah dengan compose/pipe dan gunakan currying atau penggunaan separa untuk mencipta fungsi satu argumen. Berhati-hati terhadap this yang hilang pada rujukan kaedah dan kekalkan bentuk berargumen apabila cara itu lebih jelas.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 59
- Pelajaran
- 200
Soalan Lazim
Adakah pelajaran “Gaya Tanpa Titik” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Akademi JavaScript, termasuk “Gaya Tanpa Titik”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Akademi JavaScript merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Gaya Tanpa Titik”?
Gubah fungsi tanpa menamakan argumen. Anda berlatih Akademi JavaScript menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi JavaScript?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi JavaScript di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Gaya Tanpa Titik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi JavaScript ini?
Ya. Setiap pelajaran Akademi JavaScript menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.