- "The missing Standard Library for TypeScript"
- Dirancang agar program sinkron/asinkron yang kompleks dapat dibuat dengan mudah
- Membuat kode lebih composable, reusable, dan testable
- Maximum Type-Safety (termasuk penanganan error)
- Menyediakan beragam library
- Menyediakan clustering & workflow (versi alpha)
- Kompatibilitas yang luas
- Node, Deno, Bun, Cloudflare Workers, Chrome
- React, Solid.JS, Vite, Next.JS, Tauri
- Fitur utama
- Concurrency: melalui model concurrency berbasis Fiber, dapat membangun aplikasi yang sangat scalable dan berlatensi ultra-rendah
- Composability: dapat membangun software yang mudah dirawat, mudah dibaca, dan fleksibel dengan menggunakan komponen kecil yang dapat digunakan ulang
- Resource Safety: dapat mengelola akuisisi dan pelepasan resource dengan aman bahkan saat program gagal
- Type Safety: berfokus pada type inference dan type safety sehingga dapat memanfaatkan sistem tipe TypeScript semaksimal mungkin
- Error Handling: dapat menangani error dengan cara yang terstruktur dan andal menggunakan fitur penanganan error bawaan
- Asynchronicity: dapat menulis kode sehingga terlihat sama baik itu sinkron maupun asinkron
- Observability: dengan kemampuan tracing penuh, eksekusi program dapat dengan mudah di-debug dan dimonitor
Mengapa Effect?
- Pemrograman itu sulit
- Saat membuat library dan aplikasi, banyak alat digunakan untuk mengelola kompleksitas
- Effect menawarkan cara berpikir baru tentang pemrograman TypeScript
- Dengan alat-alat dalam ekosistem Effect, Anda dapat membangun aplikasi dan library yang lebih baik
- Melalui ini, Anda dapat memahami bahasa TypeScript dan sistem tipenya dengan lebih baik serta membuat program lebih andal dan lebih mudah dirawat.
Pola Effect
- Dalam kode TypeScript pada umumnya, diasumsikan bahwa fungsi akan berhasil atau melempar exception
- Contoh: fungsi
divide melempar exception saat membagi dengan 0
- Hanya dengan melihat tipenya, kita tidak bisa tahu bahwa fungsi ini dapat melempar exception
- Masalah ini membesar ketika ada ratusan atau ribuan fungsi dalam codebase
- Mudah lupa menangani exception, dan sulit mengelolanya
- Compiler TypeScript adalah garis pertahanan pertama terhadap bug, error domain, dan kompleksitas umum
Menerapkan pola Effect
- Insight utama dari Effect adalah bahwa sistem tipe dapat digunakan untuk melacak bukan hanya nilai sukses, tetapi juga error dan "context"
- Contoh: versi Effect dari fungsi
divide tidak melempar exception, melainkan meneruskan error ke pemanggil
- Menyediakan kemampuan untuk mengelola error dan nilai sukses
- Melalui pelacakan context, informasi tambahan dapat diberikan ke fungsi tanpa harus meneruskan semua argumen
- Contoh: selama pengujian, implementasi nyata dari layanan eksternal dapat diganti dengan mock object
import { Effect } from "effect"
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>
b === 0
? Effect.fail(new Error("Cannot divide by zero"))
: Effect.succeed(a / b)
Ekosistem Effect
- Insight unik dari Effect yang dipadukan dengan alat-alat lain membentuk ekosistem library yang kaya untuk memudahkan pembuatan aplikasi kompleks
- Hal-hal yang dulu tampak mustahil kini menjadi hal yang biasa
- Ekosistem Effect berkembang pesat, dan dapat dilihat di GitHub Effect
Jangan menciptakan ulang roda
- Dalam kode aplikasi TypeScript, masalah yang sama sering diselesaikan berulang kali
- Interaksi dengan layanan eksternal, file system, dan database adalah masalah umum bagi semua pengembang aplikasi
- Effect menyediakan ekosistem library yang kaya dengan solusi terstandarisasi untuk masalah-masalah ini
- Tanpa perlu memasang banyak dependency, Effect menyelesaikan banyak masalah sekaligus
Menyelesaikan masalah praktis
- Effect terinspirasi dari Scala dan Haskell.
- Namun, tujuan Effect adalah menyediakan toolkit praktis untuk menyelesaikan masalah sehari-hari yang dihadapi saat membangun aplikasi dan library TypeScript
Belajar sambil menikmati prosesnya
- Mempelajari Effect itu menyenangkan
- Banyak pengembang menggunakan Effect di pekerjaan nyata untuk menyelesaikan masalah sebenarnya
- Anda dapat mulai dengan menggunakan sebagian dari ekosistem Effect, lalu memanfaatkan semakin banyak alat secara bertahap
- Pada awalnya konsep-konsep Effect mungkin terasa asing, tetapi jika meluangkan waktu untuk membaca dokumentasi dan memahami konsep inti, itu akan membantu saat nanti menggunakan alat yang lebih canggih
- Komunitas Effect selalu siap membantu pembelajaran dan perkembangan. Lihat Discord atau GitHub
3 komentar
Rasanya arahnya mirip dengan inti yang dimiliki Rust.
Sepertinya perlu dipakai lebih lama lagi untuk benar-benar tahu, tapi dibandingkan dengan fp-ts, ini terasa jauh lebih nyaman digunakan.
fp-ts memutuskan untuk tidak melanjutkan pengembangan 3.0 dan bergabung ke effect.
Jika Anda menggunakan fp-ts, ada baiknya mempertimbangkan effect.
https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts