Reaktif uzantılar - Reactive extensions

ReactiveX
Microsoft Live Labs Volta logo.png
Diğer isimlerReaktif Uzantılar
Orijinal yazar (lar)Microsoft
Geliştirici (ler)ReactiveX katılımcıları
İlk sürüm21 Haziran 2011; 9 yıl önce (2011-06-21)
Depogithub.com/ ReactiveX
YazılmışJava, Scala, C #, C ++, Clojure, JavaScript, Python, Harika, JRuby, ve diğerleri
PlatformÇapraz platform
TürAPI
LisansApache Lisans 2.0,
MIT Lisansı
İnternet sitesireactivex.io

İçinde yazılım programlama, ReactiveX (Ayrıca şöyle bilinir Reaktif Uzantılar) izin veren bir dizi araçtır. zorunlu programlama verilerin olup olmadığına bakılmaksızın veri dizileri üzerinde işlem yapacak diller senkron veya asenkron. Sıradaki her öğe üzerinde çalışan bir dizi sıra operatörü sağlar. Bir uygulamasıdır reaktif programlama ve çoklu uygulamalarda uygulanacak araçlar için bir plan sağlar. Programlama dilleri.

Genel Bakış

ReactiveX bir API için eşzamansız programlama gözlemlenebilir akışlarla.[1]

Eşzamansız programlama, programcıların işlevleri çağırmasına ve daha sonra tamamlandığında, genellikle işleve tamamlandığında çalıştırması için başka bir işlevin adresini vererek, işlevlere "geri arama" yapmasına izin verir. Bu şekilde tasarlanan programlar, birçok iş parçacığının sürekli olarak başlatılıp durdurulmasının ek yükünden kaçınır.

Reaktif Uzantılar bağlamında gözlemlenebilir akışlar (yani gözlemlenebilen akışlar), 3 olay yayan olay yayıcılara benzer: sonraki, hata ve tamamlandı. Bir gözlemlenebilir, bir hata olayı veya tam bir olay ortaya çıkarana kadar sonraki olayları yayar. Ancak, bu noktada, tekrar abone olunmadıkça başka etkinlik yayınlamayacaktır.

Motivasyon

Veri dizileri için şu avantajları birleştirir: yineleyiciler olay tabanlı eşzamansız programlama esnekliği ile. Aynı zamanda basit bir söz olarak çalışır ve kıyamet piramidi bu, birden çok geri arama katmanından kaynaklanır.

Gözlemlenebilirler ve gözlemciler

ReactiveX, gözlemci ve yineleyici desenler ve fonksiyonel programlama.[2]

Bir gözlemci, gözlemlenebilir bir diziye abone olur. Sıra daha sonra öğeleri gözlemciye teker teker, genellikle sağlanan geri arama işlevini çağırarak gönderir. Gözlemci, bir sonrakini işlemeden önce her birini ele alır. Birçok olay eşzamansız olarak gelirse, bunlar bir kuyrukta depolanmalı veya bırakılmalıdır. ReactiveX'te, bir gözlemci hiçbir zaman sırasız bir öğe ile çağrılmaz veya (çok iş parçacıklı bir bağlamda) önceki öğe için geri çağrı dönmeden önce çağrılmaz. Eşzamansız çağrılar, eşzamansız kalır ve bir gözlemlenebilir öğe döndürülerek işlenebilir.

Bu, ölümcül bir hata meydana gelirse, gözlemciye ayrı ayrı bildirimde bulunmasıyla (ikinci bir işlevi çağırarak) yineleyici modeline benzer. Tüm öğeler gönderildiğinde, tamamlanır (ve üçüncü bir işlevi çağırarak gözlemciye bildirimde bulunur). Reactive Extensions API, operatörlerinin çoğunu diğer programlama dillerindeki yineleyici operatörlerinden de ödünç alır.

Reaktif Uzantılar şundan farklıdır: fonksiyonel reaktif programlama Reaktif Uzantılara Giriş'in açıkladığı gibi:

Bazen "işlevsel reaktif programlama" olarak adlandırılır, ancak bu yanlış bir isimdir. ReactiveX işlevsel olabilir ve reaktif olabilir, ancak "işlevsel reaktif programlama" farklı bir hayvandır. Temel farklılıklardan biri, fonksiyonel reaktif programlamanın zamanla sürekli değişen değerler üzerinde çalışması, ReactiveX'in ise zamanla yayılan ayrı değerler üzerinde çalışmasıdır. (Fonksiyonel reaktif programlama hakkında daha kesin bilgi için Conal Elliott'ın çalışmasına bakın.)[2]

Reaktif operatörler

Operatör, bir gözlemlenebilirliği (kaynak) ilk argüman olarak alan ve başka bir gözlemlenebilir (hedef veya dış gözlemlenebilir) döndüren bir işlevdir. Ardından, kaynak gözlemlenebilirin yayınladığı her öğe için, o öğeye bir işlev uygulayacak ve ardından onu Gözlemlenebilir hedefe gönderecektir. Hatta gözlemlenebilir hedefte başka bir Gözlemlenebilir Öğeyi bile yayabilir. Buna içsel gözlemlenebilir denir.

İç gözlemlenebilirleri yayan bir operatör, bir şekilde tüm iç gözlemlenebilirler tarafından yayılan öğeleri birleştiren ve öğeyi dış gözlemlenebilir üzerine yayınlayan başka bir operatör tarafından takip edilebilir. Örnekler şunları içerir:

  • switchAll - yayımlanır yayınlanmaz her yeni iç gözlemlenebilirliğe abone olur ve bir öncekinin aboneliğini iptal eder.
  • mergeAll - yayıldıkça tüm iç gözlemlenebilirlere abone olur ve değerlerini aldığı sırada çıkarır.
  • concatAll - sırayla her bir iç gözlemlenebilir abone olur ve bir sonraki gözlemlenebilir olana abone olmadan önce tamamlanmasını bekler.

Operatörler, belirli kriterlere göre olayları filtreleyen karmaşık veri akışları oluşturmak için birlikte zincirlenebilir. Aynı gözlemlenebilirliğe birden fazla operatör uygulanabilir.

Reaktif Uzantılarda kullanılabilen bazı operatörler, harita, küçültme, gruplama ve zip gibi işlevsel programlama dilini kullanan programcılara aşina olabilir.[3] Reaktif Uzantılarda pek çok başka operatör vardır, ancak belirli bir programlama dili için belirli bir uygulamada bulunan operatörler değişiklik gösterebilir.

Reaktif operatör örnekleri

İşte haritayı kullanma ve operatörleri azaltma örneği. Bir sayı listesinden bir gözlemlenebilir yaratırız. Harita operatörü daha sonra her sayıyı ikiyle çarpacak ve bir gözlemlenebilir döndürür. Azaltma operatörü daha sonra kendisine sağlanan tüm sayıları toplayacaktır (0 değeri başlangıç ​​noktasıdır). Abone arandığında kayıt olur gözlemci operatörler zinciri tarafından üretilen gözlemlenebilirden değerleri gözlemleyecek. Abone olma yöntemiyle, gözlemlenebilirde bir hata yayınlandığında çağrılan bir hata işleme işlevini ve gözlemlenebilir öğe yaymayı bitirdiğinde bir tamamlama işlevini geçebiliriz.

sourceObservable = Rx.Gözlenebilir.itibaren([1, 2, 3, 4, 5]);sourceObservable  .harita(işlevi(numara) { dönüş numara * 2; })  .azaltmak(işlevi(toplam, numara) { dönüş toplam + numara; }, 0)   .abone ol(işlevi(numara){    konsol.günlük(numara);  }, işlevi(hata) {    konsol.hata(hata);  }, işlevi() {    konsol.günlük("bitti");  })

Yukarıdaki örnek, Rx.js uygulaması JavaScript programlama dili için Reaktif Uzantılar.

Tarih

Reaktif Uzantılar (Rx), Bulut Programlanabilirlik Ekibi -de Microsoft 2011 civarında, daha büyük bir çabanın yan ürünü olarak Volta. Başlangıçta, Volta'da katman bölünmesini desteklemek için bir uygulamadaki farklı katmanlardaki olaylar için bir soyutlama sağlaması amaçlanmıştır. Projenin logosu, Volta'ya atıfta bulunan elektrikli bir yılan balığı temsil ediyor. İsimdeki uzantı soneki, Paralel Uzantılar aynı zamanda icat edilen teknoloji; ikisi tamamlayıcı olarak kabul edilir.

Rx'in ilk uygulaması içindi .AĞ ve 21 Haziran 2011'de piyasaya sürüldü. Daha sonra ekip, diğer platformlar için Rx uygulamasına başladı. JavaScript ve C ++. Teknoloji olarak yayınlandı açık kaynak 2012'nin sonlarında, başlangıçta CodePlex. Daha sonra kod şu adrese taşındı: GitHub.

Referanslar

  1. ^ "ReactiveX". reactivex.io. Alındı 2020-02-20.
  2. ^ a b "ReactiveX - Giriş". ReactiveX.io. Alındı 23 Eylül 2018.
  3. ^ "ReactiveX - Operatörler". ReactiveX.io. Alındı 23 Eylül 2018.

Dış bağlantılar