Menggubah Kesan
Rangkaikan dan gabungkan kesan dengan pipe dan penjana.
Menggubah Kesan ialah pelajaran TypeScript Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran TypeScript Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.
Menggubah Kesan
Kesan ialah nilai, jadi anda membina program dengan menggubahnya. Alat terasnya ialah Effect.pipe, Effect.map, Effect.flatMap dan sintaks berasaskan penjana Effect.gen.
pipe: Menyalurkan melalui Fungsi
pipe menyalurkan kesan melalui satu siri transformasi dari kiri ke kanan, sekali gus mengelakkan sarang yang mendalam.
import { Effect, pipe } from "effect";
const program = pipe(
Effect.succeed(2),
Effect.map((n) => n + 1),
Effect.map((n) => n * 10)
);
// Effect<number, never, never> producing 30map: Mengubah Nilai Kejayaan
Effect.map menggunakan fungsi tulen pada nilai kejayaan, tanpa mengubah saluran ralat dan keperluan.
import { Effect } from "effect";
const doubled = Effect.map(Effect.succeed(21), (n) => n * 2);
// Effect<number, never, never>flatMap: Menyusun Kesan
Apabila langkah seterusnya sendiri merupakan kesan, gunakan flatMap (juga dipanggil chain). Ia menjalankan kesan pertama, kemudian menyalurkan nilainya kepada fungsi yang mengembalikan kesan lain.
import { Effect, pipe } from "effect";
const getId = Effect.succeed(1);
const loadUser = (id: number) => Effect.succeed({ id, name: "Ada" });
const program = pipe(getId, Effect.flatMap(loadUser));
// Effect<{ id: number; name: string }, never, never>map berbanding flatMap
Gunakan map apabila fungsi anda mengembalikan nilai biasa; gunakan flatMap apabila ia mengembalikan kesan. Menggunakan map dengan fungsi yang mengembalikan kesan menyebabkan anda mendapat kesan bersarang.
Saluran Terkumpul
Apabila anda menyusun kesan mengikut urutan, jenis ralatnya bergabung menjadi kesatuan dan keperluannya juga bergabung menjadi kesatuan. Jenis gubahan itu mencerminkan segala perkara yang boleh gagal dan segala perkara yang diperlukan.
// Effect<A, E1, R1> then Effect<B, E2, R2>
// => Effect<B, E1 | E2, R1 | R2>Effect.gen: Sintaks Penjana
Effect.gen membolehkan anda menulis kod kesan berjujukan yang dibaca seperti async/await, dengan menggunakan yield* untuk membuka bungkus setiap kesan.
import { Effect } from "effect";
const program = Effect.gen(function* () {
const id = yield* Effect.succeed(1);
const user = yield* Effect.succeed({ id, name: "Ada" });
return user.name;
});
// Effect<string, never, never>gen berbanding pipe
gen lebih jelas untuk aliran linear yang mempunyai banyak langkah dan pemboleh ubah perantaraan; pipe lebih sesuai untuk rantai transformasi yang pendek. Kedua-duanya boleh saling beroperasi dengan bebas.
Menggabungkan Kesan Bebas
Effect.all menjalankan beberapa kesan dan mengumpulkan hasilnya, sambil mengumpulkan ralat dan keperluan daripada kesemuanya.
import { Effect } from "effect";
const both = Effect.all([Effect.succeed(1), Effect.succeed("x")]);
// Effect<[number, string], never, never>Masih Malas
Semua ini hanya menerangkan program. Tiada apa-apa dilaksanakan sehingga anda menjalankannya di pinggir sistem dengan Effect.runPromise atau Effect.runSync.
import { Effect } from "effect";
// const result = await Effect.runPromise(program);Mengapa Ini Penting
Penggabunganlah yang menjadikan efek praktikal: anda menggabungkan bahagian kecil yang bertip menjadi program besar, sementara pengkompil menjejaki setiap ralat dan kebergantungan. map, flatMap, pipe dan gen ialah kata kerja harian dalam kod Effect.
Semakan Pantas
Semak pemahaman anda tentang penggabungan efek.
Ringkasan
Anda menggabungkan efek dengan map (mengubah nilai yang berjaya), flatMap (menyusun langkah yang mengembalikan efek), pipe (mengalirkan nilai melalui perubahan) dan Effect.gen (sintaks penjana seperti menunggu). Saluran ralat dan keperluan terkumpul sebagai kesatuan, dan tiada apa-apa dijalankan sehingga anda melaksanakannya di hujung.
Pelajari TypeScript 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
- 101
- Pelajaran
- 352
Soalan Lazim
Adakah pelajaran “Menggubah Kesan” percuma?
Ya — teks penuh “Menggubah Kesan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus TypeScript Academy, tingkat taraf kepada CoddyKit PRO. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menggubah Kesan”?
Rangkaikan dan gabungkan kesan dengan pipe dan penjana. Anda berlatih TypeScript Academy 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 TypeScript Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran TypeScript Academy 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 3 daripada 4.
Berapa lamakah pelajaran “Menggubah Kesan” 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 TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy 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.