- "TypeScript için eksik Standard Library"
- Karmaşık senkron/asenkron programları kolayca oluşturmak için tasarlanmış
- Kodu daha Composable, Reusable, Testable hale getirir
- Maksimum Type-Safety (hata işleme dahil)
- Çeşitli kütüphaneler sunar
- Kümeleme ve workflow sağlar (alfa sürüm)
- Geniş uyumluluk
- Node, Deno, Bun, Cloudflare Workers, Chrome
- React, Solid.JS, Vite, Next.JS, Tauri
- Başlıca özellikler
- Eşzamanlılık (Concurrency): Fiber tabanlı eşzamanlılık modeli sayesinde son derece ölçeklenebilir ve ultra düşük gecikmeli uygulamalar geliştirilebilir
- Birleştirilebilirlik (Composability): Küçük ve yeniden kullanılabilir bileşenlerle bakımı kolay, okunabilir ve esnek yazılımlar geliştirilebilir
- Kaynak güvenliği (Resource Safety): Program başarısız olsa bile kaynakların edinimi ve serbest bırakılması güvenli şekilde yönetilebilir
- Tip güvenliği (Type Safety): Tip çıkarımı ve tip güvenliğine odaklanarak TypeScript tip sisteminden azami ölçüde yararlanılabilir
- Hata işleme (Error Handling): Yerleşik hata işleme özellikleriyle hatalar yapılandırılmış ve güvenilir bir şekilde ele alınabilir
- Asenkronluk (Asynchronicity): Kod ister senkron ister asenkron olsun, aynı görünümle yazılabilir
- Gözlemlenebilirlik (Observability): Tam izleme özellikleri sayesinde programın çalışması kolayca debug edilebilir ve izlenebilir
Neden Effect?
- Programlama zordur
- Kütüphane ve uygulama geliştirirken karmaşıklığı yönetmek için çok sayıda araç kullanılır
- Effect, TypeScript programlamaya dair yeni bir düşünme biçimi sunar
- Effect ekosistemindeki araçlarla daha iyi uygulamalar ve kütüphaneler geliştirilebilir
- Bu sayede TypeScript dili ve tip sistemi daha iyi anlaşılabilir, programlar daha güvenilir ve bakımı daha kolay hale getirilebilir
Effect deseni
- Genel TypeScript kodunda bir fonksiyonun ya başarılı olacağı ya da istisna fırlatacağı varsayılır
- Örnek:
divide fonksiyonu 0'a bölünce istisna fırlatır
- Sadece tiplere bakarak bu fonksiyonun istisna fırlatabileceği anlaşılamaz
- Kod tabanında yüzlerce, binlerce fonksiyon olduğunda bu sorun büyür
- İstisna işlemeyi unutmak kolaydır ve bunu yönetmek zordur
- TypeScript derleyicisi; bug'lara, alan hatalarına ve genel karmaşıklığa karşı ilk savunma hattıdır
Effect desenini uygulamak
- Effect'in temel içgörüsü, yalnızca başarı değerlerini değil, hataları ve "context"i takip etmek için de tip sisteminin kullanılabileceğidir
- Örnek:
divide fonksiyonunun Effect sürümü istisna fırlatmak yerine hatayı çağırana iletir
- Hata ve başarı değerlerini yönetmeye yönelik özellikler sunar
- Context takibi sayesinde tüm argümanları aktarmadan fonksiyonlara ek bilgi sağlanabilir
- Örnek: Test sırasında dış servislerin gerçek implementasyonu mock nesnelerle değiştirilebilir
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)
Effect ekosistemi
- Effect'in kendine özgü içgörüleri ile diğer araçların birleşmesi, karmaşık uygulamaları kolayca geliştirmeyi sağlayan zengin bir kütüphane ekosistemi oluşturur
- Geçmişte imkânsız görünen şeyler artık sıradan hale gelir
- Effect ekosistemi hızla büyüyor ve ayrıntılar Effect'in GitHub sayfasında görülebilir
Tekerleği yeniden icat etmeyin
- TypeScript uygulama kodunda aynı problemler çoğu zaman tekrar tekrar çözülür
- Dış servisler, dosya sistemi ve veritabanlarıyla etkileşim tüm uygulama geliştiricilerinin ortak problemidir
- Effect, bu problemlere standartlaştırılmış çözümler sunan zengin bir kütüphane ekosistemi sağlar
- Çok sayıda bağımlılık kurmaya gerek kalmadan Effect birçok problemi tek seferde çözer
Pratik sorun çözümü
- Effect, Scala ve Haskell'den ilham alır
- Ancak Effect'in amacı, TypeScript uygulamaları ve kütüphaneleri geliştirirken karşılaşılan günlük problemleri çözmek için pratik bir araç seti sunmaktır
Eğlenerek öğrenmek
- Effect öğrenmek keyiflidir
- Birçok geliştirici gerçek sorunları çözmek için iş ortamında Effect kullanıyor
- Önce Effect ekosisteminin bir bölümünü kullanıp zamanla daha fazla araçtan yararlanabilirsiniz
- Başta Effect'in kavramları yabancı gelebilir; ancak dokümantasyonu okuyup temel kavramları anlamaya zaman ayırmak, daha sonra daha gelişmiş araçları kullanırken yardımcı olur
- Effect topluluğu öğrenme ve gelişim konusunda her zaman yardımcı olmaya hazırdır. Discord veya GitHub'a göz atın
3 yorum
Rust'ın sahip olduğu temel çekirdekle benzer bir çizgide ilerliyor gibi görünüyor.
Biraz daha kullanmam gerekecek gibi görünüyor ama fp-ts ile kıyaslayınca kullanımı çok daha rahat.
fp-ts, 3.0 geliştirmesini yapmama ve effect'e katılma kararı aldı.
fp-ts kullanıyorsanız effect'i değerlendirmeniz iyi olabilir.
https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts