Reaktif Programlama

Reaktif programlama, veri akışları ve değişimin yayılmasıyla ilgilenen bir programlama paradigmasıdır. Bu, bir bileşen tarafından bir veri akışı yayınlandığında, değişikliğin reaktif programlama kitaplığı tarafından diğer bileşenlere yayılacağı anlamına gelir. Değişimin yayılması, nihai alıcıya ulaşana kadar devam edecektir. Olay güdümlü ve reaktif programlama arasındaki fark, olay güdümlü programlamanın olaylar etrafında dönmesi ve reaktif programlamanın veri etrafında dönmesidir.

Reaktif programlama için ReactiveX veya RX

ReactiveX veya Raective Extension, reaktif programlamanın en ünlü uygulamasıdır. ReactiveX'in çalışması aşağıdaki iki sınıfa bağlıdır -

Gözlenebilir sınıf

Bu sınıf, veri akışı veya olayların kaynağıdır ve gelen verileri paketler, böylece veriler bir iş parçacığından diğerine aktarılabilir. Bazı gözlemciler abone olana kadar veri vermeyecektir.

Gözlemci sınıfı

Bu sınıf, tarafından yayılan veri akışını tüketir. observable. Gözlemlenebilir olan birden fazla gözlemci olabilir ve her gözlemci yayılan her veri öğesini alacaktır. Gözlemci, gözlemlenebilir olana abone olarak üç tür olay alabilir -

  • on_next() event - Veri akışında bir öğe olduğu anlamına gelir.

  • on_completed() event - Emisyonun sona erdiğini ve daha fazla ürün gelmediğini ifade eder.

  • on_error() event - Aynı zamanda emisyonun sona ermesi anlamına da gelir, ancak bir hata atıldığında observable.

RxPY - Reaktif Programlama için Python Modülü

RxPY, reaktif programlama için kullanılabilen bir Python modülüdür. Modülün kurulu olduğundan emin olmamız gerekiyor. RxPY modülünü kurmak için aşağıdaki komut kullanılabilir -

pip install RxPY

Misal

Aşağıdakiler bir Python betiğidir. RxPY modül ve sınıfları Observable ve Observe forreaktif programlama. Temelde iki sınıf vardır -

  • get_strings() - dizeleri gözlemciden almak için.

  • PrintObserver()- gözlemciden dizeleri yazdırmak için. Gözlemci sınıfının üç olayını da kullanır. Ayrıca subscribe () sınıfını kullanır.

from rx import Observable, Observer
def get_strings(observer):
   observer.on_next("Ram")
   observer.on_next("Mohan")
   observer.on_next("Shyam")
      observer.on_completed()
class PrintObserver(Observer):
   def on_next(self, value):
      print("Received {0}".format(value))
   def on_completed(self):
   print("Finished")
   def on_error(self, error):
      print("Error: {0}".format(error))
source = Observable.create(get_strings)
source.subscribe(PrintObserver())

Çıktı

Received Ram
Received Mohan
Received Shyam
Finished

Reaktif programlama için PyFunctional kitaplığı

PyFunctionalreaktif programlama için kullanılabilecek başka bir Python kitaplığıdır. Python programlama dilini kullanarak işlevsel programlar oluşturmamızı sağlar. Kullanışlı, çünkü zincirleme işlevsel operatörler kullanarak veri hatları oluşturmamıza izin veriyor.

RxPY ve PyFunctional arasındaki fark

Her iki kitaplık da reaktif programlama için kullanılır ve akışı benzer şekilde işler, ancak ikisi arasındaki temel fark verilerin işlenmesine bağlıdır. RxPY sistemdeki verileri ve olayları yönetirken PyFunctional işlevsel programlama paradigmalarını kullanarak verilerin dönüştürülmesine odaklanmıştır.

PyFunctional Modülünün Kurulması

Kullanmadan önce bu modülü kurmamız gerekiyor. Aşağıdaki gibi pip komutu yardımı ile kurulabilir -

pip install pyfunctional

Misal

Aşağıdaki örnek kullanımlar the PyFunctional modülü ve onun seqYineleyebileceğimiz ve işleyebileceğimiz akış nesnesi olarak hareket eden sınıf. Bu programda, her değeri ikiye katlayan lamda işlevini kullanarak diziyi eşler, ardından x'in 4'ten büyük olduğu değeri filtreler ve son olarak diziyi kalan tüm değerlerin toplamına indirger.

from functional import seq

result = seq(1,2,3).map(lambda x: x*2).filter(lambda x: x > 4).reduce(lambda x, y: x + y)

print ("Result: {}".format(result))

Çıktı

Result: 6