Lập trình phản ứng

Lập trình phản ứng là một mô hình lập trình xử lý các luồng dữ liệu và sự lan truyền của sự thay đổi. Có nghĩa là khi một luồng dữ liệu được phát ra bởi một thành phần, sự thay đổi sẽ được truyền đến các thành phần khác bằng thư viện lập trình phản ứng. Sự lan truyền của sự thay đổi sẽ tiếp tục cho đến khi nó đến người nhận cuối cùng. Sự khác biệt giữa lập trình hướng sự kiện và lập trình phản ứng là lập trình hướng sự kiện xoay quanh các sự kiện và lập trình phản ứng xoay quanh dữ liệu.

ReactiveX hoặc RX để lập trình phản ứng

ReactiveX hoặc Raective Extension là cách triển khai nổi tiếng nhất của lập trình phản ứng. Hoạt động của ReactiveX phụ thuộc vào hai lớp sau:

Lớp quan sát được

Lớp này là nguồn của luồng dữ liệu hoặc sự kiện và nó đóng gói dữ liệu đến để dữ liệu có thể được truyền từ luồng này sang luồng khác. Nó sẽ không cung cấp dữ liệu cho đến khi một số người quan sát đăng ký vào nó.

Lớp quan sát viên

Lớp này sử dụng luồng dữ liệu do observable. Có thể có nhiều người quan sát với người quan sát được và mỗi người quan sát sẽ nhận được từng mục dữ liệu được phát ra. Người quan sát có thể nhận được ba loại sự kiện bằng cách đăng ký vào có thể quan sát -

  • on_next() event - Nó ngụ ý rằng có một phần tử trong luồng dữ liệu.

  • on_completed() event - Nó ngụ ý kết thúc phát thải và không có mặt hàng nào nữa.

  • on_error() event - Nó cũng ngụ ý kết thúc phát xạ nhưng trong trường hợp khi một lỗi được tạo ra bởi observable.

RxPY - Mô-đun Python cho lập trình phản ứng

RxPY là một mô-đun Python có thể được sử dụng để lập trình phản ứng. Chúng tôi cần đảm bảo rằng mô-đun đã được cài đặt. Lệnh sau có thể được sử dụng để cài đặt mô-đun RxPY:

pip install RxPY

Thí dụ

Sau đây là một tập lệnh Python, sử dụng RxPY mô-đun và các lớp của nó ObservableObserve forlập trình phản ứng. Về cơ bản có hai lớp -

  • get_strings() - để lấy dây từ người quan sát.

  • PrintObserver()- để in các chuỗi từ trình quan sát. Nó sử dụng cả ba sự kiện của lớp quan sát viên. Nó cũng sử dụng lớp subscribe ().

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())

Đầu ra

Received Ram
Received Mohan
Received Shyam
Finished

Thư viện PyF Chức năng để lập trình phản ứng

PyFunctionallà một thư viện Python khác có thể được sử dụng để lập trình phản ứng. Nó cho phép chúng tôi tạo các chương trình chức năng bằng ngôn ngữ lập trình Python. Nó rất hữu ích vì nó cho phép chúng ta tạo đường ống dữ liệu bằng cách sử dụng các toán tử chức năng được xâu chuỗi.

Sự khác biệt giữa RxPY và PyF Chức năng

Cả hai thư viện đều được sử dụng để lập trình phản ứng và xử lý luồng theo cách tương tự nhưng sự khác biệt chính giữa cả hai thư viện phụ thuộc vào việc xử lý dữ liệu. RxPY xử lý dữ liệu và sự kiện trong hệ thống trong khi PyFunctional tập trung vào việc chuyển đổi dữ liệu bằng cách sử dụng các mô hình lập trình chức năng.

Cài đặt mô-đun PyF Chức năng

Chúng ta cần cài đặt mô-đun này trước khi sử dụng nó. Nó có thể được cài đặt với sự trợ giúp của lệnh pip như sau:

pip install pyfunctional

Thí dụ

Ví dụ sau sử dụng the PyFunctional mô-đun và nó seqlớp đóng vai trò là đối tượng luồng mà chúng ta có thể lặp lại và thao tác. Trong chương trình này, nó ánh xạ chuỗi bằng cách sử dụng hàm lamda nhân đôi mọi giá trị, sau đó lọc giá trị trong đó x lớn hơn 4 và cuối cùng nó giảm chuỗi thành tổng của tất cả các giá trị còn lại.

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))

Đầu ra

Result: 6