Reactive Programming – 3 – Functional Reactive Programming “FRP”
Functional Programlama ile Reactive Programlama aynı şeyler değillerdir. Sürekli bir arada kullanıldıklarından zaman zaman aynıymış gibi tanımlandıklarını görmekteyiz. Birbirlerini tanımlamazlar ancak birbirlerini tamamladıklarını rahatlıkla söyleyebiliriz.
demiştik. Konuyu hiç incelememiş ya da takip etmemiş olup merak edenler aşağıdaki adreslerdeki önceki yazılarımıza bir göz atabilirler. Bunun dışında fonksiyonel programlama mantığını araştırabilirsiniz. Reactive Programming yazı dizisinde Functional Programming konusunda çok fazla atıfta bulunacağız. Yeri geldiğinde kimini açıklayacağız kimini atlayacağız.
Bu makalede Fonksiyonel Programlama ile Reaktif programlama arasındaki farkları sıralayarak Fonksiyonel Reaktif Programlamayı tanımlamaya çalışalım.
Functional Programming
Yazılım meraklılarının bir çoğunun da bildiği üzere fonksiyonel programlama yazılım alt birimlerini tasarlarken ya da geliştirirken onları birer fonksiyon olarak ele alan bir paradigmadır. Günümüzde imperative olarak tanımlanan bir çok dilin de içerisinde fonksiyonel programlamaya yer verdiğine yani izin verdiğine şahit olmaktayız. Gelecekte bu konum daha da güçlenecek gibi duruyor.
Kısaca bir kaç madde ile fonksiyonel programlamayı ele alalım ve Fonksiyonel Reaktif Programlamaya girelim.
En nihayetinde tüm yazılım paradigmaları birbirlerinin alternatifi olarak ortaya çıkmış olsalar da günümüzde birçok senaryoda birbirlerini tamamladıkları görülmektedir.
Input/Output
Fonksiyonel Programlamada yazılım alt birimleri (metot vb) matematiksel fonksiyon gibi düşünüldüklerinden kesin girdi ve çıktıya sahiptirler. Yani girilen değerlere bağlı olarak kesin çıktılar üretirler. Karmaşık olmayan durumlar için bu iyi bir özelliktir ve kodun okunmasını ve takip edilmesini kolaylaştırır. Uygulama karmaşık bir olay dizisini ele aldığında (stream of events) ise geliştirici daha dikkatli olmalıdır. Olaylar olaylar demeden önce uygulamada neler yaşandığını tartmalı ve sonuç olarak uygulamanın neler üreteceğini iyi hesaplamalıdır.
States
Hepimizin bildiği bir mutable / immutable geliştirme durumları var. Bu durumlar özellikle multi-thread uygulamalarda hayat kurtarabilirken kendi bacağımıza sıkmamıza da sebep olabiliyor. Doğası gereği fonksiyonel programalamada herhangi bir fonksiyona aynı değer girildiğinde daima aynı çıktıyı üretecektir. Bu davranış birçok problemi çözmektedir. Böylece beklenen sonuçları üreten rahatça test edilebilen uygulamalar üretilebilir. (dream world)
Ancak gerçek dünya rüyalar aleminden farlı çalışmaktadır. Gerçek dünya bizleri başka şekilde davranmaya zorlayabilir. Ya fonksiyonun / uygulamanın ürettiği sonuçların değişmesi gerekiyorsa. Ya beklenmeyen bir dış etken devreye girdiyse / girecekse… Daha önceki yazılardan hatırlayacaksınız. (side effects)
Reactive Programming
Reaktif davranışlar tam da bu noktada devreye girerek uygulamayı gerçek dünyaya döndürecektir. Yani değişmesi gereken noktaları Reactive Programming ele alacak ve düzenleyecektir. Değiştirilebilir durumları dikkatlice ve akllıca ele almak gerekmektedir. (Hepsine zamanla geleceğiz, önce FRP çerçevesini bir çizelim.)
Reaktif Programlama veri akışlarını ve olayları gözlemlemeyi temel alan bir paradigmadır. Bir değişikliğin veri akışındaki (data flows) yayılımı ve/veya etkisi üzerine kurulmuştur.
Data-Flows
Büyükmüş küçükmüş ne farkeder, datayı işlemek ruhumuzda var, demiştik. Evet veriyi işlemek önemlidir ancak maliyeti de yüksektir. Bu nedenle birden çok paradigmayı bir arada kullanmanın yollarını aramaktayız. Doğru mimariye sahip olmayan bir uygulama veriyi hiçbir zaman istediğimiz gibi işleyemeyecektir. Ya performans sorunlarımız olacak ya da yanlış sonuçlarımız. Bu nedenle kullandığımız alt yapı ya da paradigma ne olursa olsun tasarım ve alınan kararlar çok önemlidir. Hele ki mixed (FRP) diyebileceğimiz birden çok paradigmanın kullanıldığı mimarilerde.
Functional Reactive Programming – FRP
FRP’de:
- Fonksiyonel Programlama sayesinde tekrar tekrar kullanabileceğimiz fonksiyonlara
- Reaktif Programlama sayesinde sonuçlara etki etme, davranışları etkileme yani verileri değiştirme / işleme yeteneğine sahibiz
Özetle: Fonksiyonel Reaktif Programlama ile efektif ve performans etkisi yüksek fonksiyonları kullanarak verilerin yayılımını oldukça verimli bir şekilde kullanabileceğiz. Bunun yanında kodun tekrar tekrar kullanımın vereceği esneklik ve kod kalitesindeki artış hiç de küçümsenmeyecek düzeyde olacaktır.
FRP: aşırı yük yoğunluğunda ve asenkron çalışması gereken uygulamalar için şu an elimizdeki en iyi paradigma gibi durmaktadır. Uygulamalarımızın maximum verimde çalışması için öncelikle paradigmaya ve paradigma bileşenlerine hakim olmalıyız. Bu bağlamdan bir sonraki konumuz Reaktif Programlamada Stream’ler ve Asenkron davranışlar olacaktır. Stream ve Asenkron davranışlar ile konunun çok daha netleşeceğini düşünüyorum.