Mở đầu

Chào phần lớn người, hôm nay tôi sẽ ra mắt một chủ đề mới, một phương pháp lập trình mới khá phổ biến vừa mới đây mà phiên bản thân tôi trong quá trình làm việc thấy nó rất là hữu ích, văn minh và clean - Reactive Programing. Trong bài viết này chúng ta sẽ khám phá các có mang cơ phiên bản của Reactive programming.

Bạn đang xem: Reactive programming là gì

*

Reactive programming là gì? lý do nên sử dụng nó?

Reactive programming là gì?

Có khôn xiết nhiều phân tích và lý giải định nghĩa lướt thướt khó hiểu. Wikipedia quá bình thường và lý thuyết, . Stackoverflow tất cả câu trả lời rõ ràng nhưng không phù hợp với người mới bắt đầu.v.v.. Bởi vậy tôi cắt sút lại như sau :

Reactive programming is programming with asynchronous data streamsỞ định nghĩa trên họ cần để ý đến 2 điểm đặc biệt quan trọng Stream & AnsynchronousStream : Khi thực hiện 1 task ngẫu nhiên thường chúng ta chỉ quan tâm đến 3 nhân tố :

Giá trị trả về từ bỏ task kia (Data)Thông báo lỗi (Erro giả dụ có)Thời điểm task finish (Completed)

Khi lập trình đồng nhất (synchronous) việc xác định 3 nguyên tố trên không khó khăn khăn, nhưng lại khi thiết kế bất đồng bộ (asynchronous) việc xác định 3 nguyên tố này là không hề dễ dàng. Do vậy để xử lý vấn đề này ta cần có 1 chính sách giúp xác định được 3 yếu tố trên cả lúc lập trình đồng bộ & sự không tương đồng bộ. Funtion Reactive Programming giải quyết và xử lý vấn đề này bằng phương pháp sử dụng stream để truyền download dữ liệu: nó có thể sẽ emit ra 3 lắp thêm : 1 value, 1 error, 1 completed (tín hiệu hoàn thành 1 task ) theo 1 trình tự thời hạn từ chỗ phát ra (Producer) tới chỗ lắng nghe (Subscriber).

*

Tại sao cần dùng nó?

Nếu chỉ dừng lại ở kia thì FRP cũng không có gì đặc biệt, điều khiến cho sức mạnh của FRP là việc vận dụng functional programming chất nhận được filter (filter, take, scan, …), biến đổi từ stream này qua stream không giống (map, flatMap, reduce), hoặc merge những stream thành một stream new (combine, merge, zip, …) khá dễ dàng mà không làm đổi khác trạng thái của stream ban đầu.Việc sử dụng FRP sẽ nâng cấp được trải nghiệm fan dùng, khi họ muốn áp dụng phản hồi cấp tốc hơn.Lợi ích tiếp sau là giúp hạn chế lưu trữ, thống trị các state trung gian. Trong lấy ví dụ clickStream trên, nếu như như áp dụng cách lập trình sẵn thông thường, thì bắt buộc khai báo tương đối nhiều biến (state) để lưu trữ các bước trung gian. Ví dụ: timer, click count collection, … trong FRP, các bước này là không cần thiết nhờ khả năng biến đổi stream (map, flatMap, reduce, ….).Một ưu thế khác của RP là hỗ trợ cho việc giải pháp xử lý lỗi trong lập trình bất đồng điệu nhẹ nhàng hơn khôn cùng nhiều. Nếu như bạn nào từng handle error khi lập trình sự không tương đồng bộ, multiple thread, thì đang thấy bài toán này không thể dễ dàng. RP giúp bóc tách biệt bài toán xử lý lỗi cùng với logic. Câu hỏi này hỗ trợ cho code trong sáng hơn vô cùng nhiều.

Rx được sinh sản thành trường đoản cú 3 điểm chính

**RX = OBSERVABLE + OBSERVER + SCHEDULERS**Observable : Hiểu đơn giản dễ dàng nó là 1 nhà cung cấp,là nguồn đựng dữ liệu, thường thì nó sẽ cách xử lý và bắt đầu cung cấp dữ liệu cho các compent khác lắng nghe nó. Một Observable hoàn toàn có thể phát ra bất kỳ số lượng thành quả nào (including zero item), hoặc nó tất cả thể hoàn thành với một message thành công hoặc lỗi.

Xem thêm: Cúp Bóng Đá Châu Á 2011 Afc Asian Cup, Cúp Bóng Đá Châu Á 2011

Observers : Observable là nhà cung ứng thì Observer là nơi tiêu thụ dữ liệu trong phòng cung cung cấp Observable emitted. Việc đầu tiên để dấn được dữ liệu từ Observable nó sẽ đk (subscibe) bằng phương pháp sử dụng cách tiến hành subscibeOn(), khi ấy bất cứ khi nào observable phân phát ra dữ liệu thì tất cả các Observers đăng kí vẫn nhận được tài liệu trong onNext() callback, vào hàm này bạn cũng có thể thực hiện các thao tác khác biệt ví dụ so với cú pháp JSON reponse, hoặc update UI. Nếu có 1 error được ném ra từ Observable thì Observer đăng kí sẽ nhận được lỗi trong onError().

Các bước đơn giản và dễ dàng để sử dụng Rx trong ứng dụng:

*

Bước 1 : chế tạo observable emit data

Observable database = Observable //Observable. This will emit the data .just(new String<>"1", "2", "3", "4"); //OperatorỞ đây database là 1 Observable để phát ra dữ liệu. Vào trường hợp này nó phát ra dữ liệu bằng cách sử dụng strings.just() là 1 trong những operator

Bước 2 : chế tác observers để tiêu thụ dữ liệu

Observer observer = new Observer()
Override public void onNext(String s) //... ;Trong đoạn code trên observer nhận tài liệu được phát ra do Observable trong hàm onNext() và thực hiện nó, nếu gồm lỗi sinh hoạt Observable bạn có thể bắt được trong onError() của observer.

Bước 3 : Manage concurrency

database.subscribeOn(Schedulers.newThread()) //Observable runs on new background thread. .observeOn(AndroidSchedulers.mainThread()) //Observer will run on main UI thread. .subscribe(observer); //Subscribe the observerTrong bước ở đầu cuối này, họ sẽ xác định việc Observable và Observer chạy trên thread nào để quản lý.subscribeOn(Schedulers.newThread()) khẳng định database observable chạy trên một background thread bắt đầu được auto tạo ra. Còn lại observeOn(AndroidSchedulers.mainThread()) yêu cầu observer điều khiển xe trên mainthread. Đây là tất cả những gì cơ bạn dạng nhât về Reactive programming.

Kết luận

Qua bài viết này hy vọng tất cả các bạn có cái bao gồm cơ phiên bản về Reactive. Để nắm rõ hơn chúng ta cần bắt tay vào thực hành thực tế sử dụng nó, thanh lịch bài tiếp theo tôi sẽ ra mắt với các bạn làm thể nào sử dụng RxJava và chi tiết operators thường xuyên gặp. Kỹ năng có hạn ý muốn nhận được sự đóng góp góp của các bạn.Cảm ơn mọi tín đồ !