30 puan yazan xguru 2024-06-17 | 3 yorum | WhatsApp'ta paylaş
  • "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

 
firea32 2024-06-24

Rust'ın sahip olduğu temel çekirdekle benzer bir çizgide ilerliyor gibi görünüyor.

 
toaonly 2024-06-17

Biraz daha kullanmam gerekecek gibi görünüyor ama fp-ts ile kıyaslayınca kullanımı çok daha rahat.

 
seunggi 2024-06-17

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