Reaktif Programlama Nedir?
Reaktif programlama, asenkron veri akışlarıyla işlemler yapmayı ilke edinen bir programlama paradigmasıdır.
Asenkron Prensip
Reaktif programlamada her şey asenkron olarak, yani eş zamanlı olmadan çalışır. Yani bir işlem adımının yürütülebilmesi için başka işlemlerin sonucu beklenmek zorunda değildir. Çalışma zamanında, asenkron bir işlem yürüten kod satırı çalıştırıldıktan sonra, işlemin bitmesi beklenmeden diğer satırdaki işlemler yürütülebilir. Multithread işlemler yürütebilen sistemlerde asenkron yürütülecek olan işlemler, farklı thread’ler tarafından da yapılabilir.
Neden Asenkron çalışmalara ihtiyaç duyulur?
Programlamada asenkron çalışma ihtiyacı, uygulamaları daha duyarlı hale getirmek amacıyla kullanılır. Asenkron işlemler genellikle uzun zaman alan işlemlerdir. Bu nedenle ana uygulama bir görevi yürütürken, kilitlenme ve donma diye tabir edilen yavaşlamaları kullanıcıya yansıtmadan, sorunsuz bir kullanıcı deneyimi sunmayı sağlar. Asenkron işlemler dış kaynaktan bir veriyi almak olabileceği gibi yerelde uzun hesaplama gerektiren işlemler de olabilir.
Reaktif Programlamanın Püf Noktaları
Reaktif programlamada üç temel yapı taşından bahsedebiliriz.
1- Veri akışları (Data Streams)
Reaktif programlamada veri akışları, işin omurgasını oluşturmaktadır. Veriler bir kaynak tarafından oluşturulup başka bir kaynak tarafından tüketilir. Bütün olaylar, mesajlar, hatalar akışlar tarafından yayılma (emitting) yoluyla bildirilir.
2- Observable Pattern
Reaktif programlamada veri akışları gözlenebilir olarak tasarladığından dolayı, akıştan bir bildirim yapıldığında buna tepki verilebilmektedir. Gözlemlenebilir olan veri akışı nesneleri Observable olarak adlandırılırken, akışta gerçekleşen olaylara tepki veren nesneler Observer olarak adlandırılır.
Observable: Reaktif bir sistemde gözlenebilir olan şey veri akışıdır.
Observer: Observable tarafından yayınlanan veri akışlarını yakalar ve kullanır. Observer nesneleri bunu yapabilmek için Observable nesnesine abone (subscribe) olur.
Gözlemlenebilir bir veri akışını herhangi bir işlemden elde etmek mümkündür. Örneğin HTTP talepleri, form tıklama olayları, bildirimler, değişkenlerde meydana gelen değişiklikler, sensörlerden alınan değerler. Kısacası bir durum değişimi bildiren herhangi bir şey olabilir.
3- Fonksiyonel Programlama (Functional Programming)
Veri akışlarını yönetebilmek için uygulanan yöntem fonksiyonların kullanılmasıdır. Bir veri akışından elde edilen verilerin belli bir dönüşümden geçirilerek kullanılması için bir veya birden fazla fonksiyona ihtiyaç duyulabilir.
ReactiveX (Reactive eXtensions)
Reaktif programlama için kullanılan en popüler API ReaxtiveX ya da kısa adıyla Rx’dir. (“X” harfi Extensions için kullanılan bir kısaltmadır). Bu eklenti, reaktif programlama ilkelerinin bir uygulamasıdır. ReactiveX resmi sitesinde ReaxtiveX’in bir API’den ziyade, diğer programlama dillerine de ilham veren bir devrim, bir fikir ve programlamada bir akım olduğu belirtilmektedir.
ReaxtiveX kütüphanelerini kullanarak, aşağıdaki programlama dillerine reaktif özellikler katılabilmektedir.
Örnek RxJS Kodu
RxJS reaktif programlamanın Javascript programlama diline uyarlanmış kütüphanesidir. Javascript örnek uygulaması için öncelikle RxJS kodlarını içeren paketlerin koda dahil edilmesi gerekmektedir. Kodun en başında import sözcüğü ile başlayan satırlar gerekli paketleri yüklemektedir.
Daha sonra, from sözcüğü ile bir Observable sayı dizisi tanımlanmıştır. pipe() metodu, Observable nesnelere ait bir metottur ve yardımcı operatörleri akışa dahil etmek için kullanılır. Burada filter ve map adında iki operatör sisteme dahil edilmiştir. filter operatörü akıştaki 4’ten küçük sayıları seçerken, map operatörü, kalan sayıların karesini almaktadır.
Örnek kodun adımlarının incelenmesi aşağıdaki gibidir.
Kimler Kullanır?
ReactiveX’i kendi teknolojilerinde kullanan bazı şirketler aşağıda belirtilmiştir.
Sonuç
Bu yazıda reaktif programlamanın ne olduğu ve neden ihtiyaç duyulduğunu, reaktif programlamadaki önemli noktaları incelemiş olduk ve örnek uygulama ile yazımızı sonlandırmış bulunuyoruz.