30 poin oleh xguru 2024-06-17 | 3 komentar | Bagikan ke WhatsApp
  • "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

 
firea32 2024-06-24

Rasanya arahnya mirip dengan inti yang dimiliki Rust.

 
toaonly 2024-06-17

Sepertinya perlu dipakai lebih lama lagi untuk benar-benar tahu, tapi dibandingkan dengan fp-ts, ini terasa jauh lebih nyaman digunakan.

 
seunggi 2024-06-17

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