Fonksiyonlarla Değerlerin Akışına Odaklanan Programlama Yaklaşımı
Fonksiyonlarla Değerlerin Akışına Fonksiyonlarla Değerlerin Akışına kapsamında, Aniden aşağıdaki değerlerden kontrol akışını takip etmeye geçmemi sağlayan kodu okumaktan hiç hoşlanmadım. Yarı yolda bir değişken atanır. Bir fonksiyon yarı yolda geri döner. Bir if yolu yeniden yönlendirir.…

Fonksiyonlarla Değerlerin Akışına
Fonksiyonlarla Değerlerin Akışına kapsamında, Aniden aşağıdaki değerlerden kontrol akışını takip etmeye geçmemi sağlayan kodu okumaktan hiç hoşlanmadım. Yarı yolda bir değişken atanır. Bir fonksiyon yarı yolda geri döner. Bir if yolu yeniden yönlendirir. Daha sonra değer başka bir isim alır. Bunların hiçbirini anlamak zor değil.
Fonksiyonlarla Değerlerin Akışına kapsamında, Ama yorulduğumda en sonunda şu soruyu soruyorum: “Peki bu değer nereden geldi ve nereye gidiyor?” Kodun, bir değerin programda ilerledikçe nasıl değiştiğini göstermesinin daha kolay olup olmayacağını merak etmeye başladım. TypeScript zaten böyle hissedebilir Örneğin, bir diziyi filtrelemek, eşlemek ve azaltmak: const total = [1, 2, 3, 4, 5, 6] .filtre(çift) .map(çift) .reduce(add, 0) Bunu çok beğendim.
Fonksiyonlarla Değerlerin Akışına kapsamında, Dönüşümler sırayla görülebilir. Ancak değer artık bir Dizi olmadığında veya sıradan işlevlerin zincire girmesi gerektiğinde, yöntem zincirleme evrensel bir model olmaktan çıkar. Bu yüzden bir boru yardımcısı ekliyoruz veya bir kütüphane kuruyoruz. Daha sonra öğrenilecek kütüphaneye özgü başka bir kural daha var. Bu, F-Box’u inşa ederken sürekli düşündüğüm şeylerden biriydi.
Tasarım ve teknik ayrıntılar
Eski F-Box projeleri hala burada: https://github.com/KentaroMorishita/f-box-core https://github.com/KentaroMorishita/f-box-react Seseragi’de değerin akmaya devam etmesini istedim Mevcut Tur şunun gibi bir örnek içeriyor: import as “std/array” fn even value’dan diziler olarak: Int -> Bool = değer % 2 == 0 fn dou ble değeri: Int -> Int = değer 2 toplam = [1, 2, 3, 4, 5, 6] |> diziler.filtre bile |> çift harita |> azalt 0 (+) pub efekti fn main = println $ `boru hattı toplamı: ${total}` Temelde bu kadar.
Değer soldan sağa doğru hareket eder. Filtreleyin, haritalayın, azaltın. Bu Array’e özgü bir sihir değil. |> verinin yönünün okunmasını kolaylaştıracak şekilde yazılmış sıradan bir fonksiyon uygulamasıdır. Fonksiyonlar küçük kalırsa aynı şekil devam edebilir. $’ı da aynı sebepten dolayı seviyorum. Seseragi’de sürekli kullandığım bir diğer operatör ise $.

pub etkisi fn ana = println $ `pipeline total: ${total}` Burada saklanan büyük bir teorik iddia yok. Çoğu zaman daha az parantez istiyorum. Bunun yerine: println(foo(bar(baz(x)))) Okumayı tercih ederim: println $ foo $ bar $ baz x Gözlerim bunu daha kolay buluyor. Belki bu yaşa bağlı bir özellik isteğidir. Ancak Seseragi, teorik olarak küçük ve pratik olarak her gün görülebilen şeylere çok dikkat ediyor.
Bugünden bakınca ne kadar güvenilir?
Sıradan kodları etkileyici kılmaktan ziyade sıradan kodları hoş hale getirmeye daha çok önem veriyorum. İnsanlar “Bir programlama dili yaptım” ifadesini duyduklarında, egzotik tipte bir sistem veya daha önce kimsenin görmediği bir sözdizimi beklemek doğaldır. Seseragi’de listelendiğinde korkutucu görünen şeyler var: tür sınıfları, Efekt, Sinyal vb. Ama beni en mutlu eden bazı kısımlar çok daha sıkıcı.
Bir fonksiyon yazın. Ona bir değer verin. S sonucu bir sonraki fonksiyona sonlandırın. Sıradan işlemleri sıradan ve hoş hissettirin. Eğer bu temel rahatsız ediciyse, bunun üzerine karmaşık soyutlamalar eklemek muhtemelen dilin kullanımını eğlenceli hale getirmeyecektir.
Onunla oynayın https://seseragi.vercel.app/ Örneği yukarıya yapıştırın ve şunun gibi şeyler deneyin: eşit değeri > 3 olarak değiştirin, değeri iki katına çıkarın, bunun yerine başka bir harita ekleyin boru hattını iki kez kırın boru hattını kaldırın ve iç içe işlev uygulaması olarak yeniden yazın Bu sonuncusu bir özellik testi değildir. Bu bir tercih testi.
Okuyucu için pratik anlamı
Ancak dil tasarımı sonuçta kısmen buna benzer tercihlerin birikimidir.
İlgili yazılar
- UI Geliştirmede Programlama Dili Değiştirmek Zorunda mıyım?
- Linux Masaüstünüzü Her Cihazda Taşınabilir Hale Getirme Yöntemleri
Ek okuma: MDN Web Docs
Editörün Notu
Fonksiyonların değer akışını net şekilde takip etmesi, kodun okunabilirliğini ve bakımını kolaylaştırır; bu yaklaşımı benimseyerek karmaşık işlemleri daha anlaşılır ve hatasız şekilde yönetebilirsiniz.
