× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Reactive Programming là gì? Đâu là lý do cần học học React Programming

26/11/2021 12:32

Thuật ngữ Reactive Programming (còn gọi là lập trình phản ứng) đã xuất hiện từ những năm 70, 80 trong những tác phẩm về hệ thống song song của Jim Gray và Pat Helland. Những người được cho là có bước tiến đi trước thời đại khi chỉ sau một thập kỷ, mẫu hình lập trình Reactive Programming đã nhanh chóng trở nên phổ biến. Trong bài viết này, cùng xem Reactive Programming là gì và các lý do nên sử dụng mẫu lập trình này.

React Programming

Khái niệm Reactive Programming

Nhìn chung, Reactive Programming là một mẫu hình lập trình khai báo có liên quan đến các luồng dữ liệu và lan truyền của sự thay đổi. Hay nói cách khác, Reactive Programming là lập trình với dòng dữ liệu không đồng bộ. Với mẫu hình này, ta sẽ có thể thể hiện các luồng dữ liệu tĩnh hoặc động, mở đường cho việc tự động truyền các dữ liệu đã thay đổi lưu lượng.

 

Trong khái niệm Reactive Programming, ta cần chú ý đến hai thuật ngữ dòng (stream) chuỗi các giá trị theo thời gian và không đồng bộ (Asynchronous). Khi thực hiện một task, có ba yếu tố được đặt lên hàng đầu, đó là các dữ liệu được trả về, lỗi xảy ra và thời điểm task đó được hoàn thành. Trong lập trình đồng bộ, ta có thể xác định các yếu tố trên một cách dễ dàng, tuy vậy, với lập trình không đồng bộ, lập trình viên sẽ gặp rất nhiều trở ngại khi xác định ba yếu tố trên. Do vậy, Reactive Programming ra đời để giải quyết vấn đề truyền tải các dữ liệu, nó có khả năng phát ra giá trị, lỗi và thông báo khi một task được hoàn thiện.

>>>> Đọc thêm: Đây là mẹo giúp bạn thành thạo lập trình Java - Khám phá ngay


Các khái niệm cần biết trong Reactive Programming

Như đã đề cập trong khái niệm về Reactive Programming, là mẫu lập trình khai báo với dòng dữ liệu không đồng bộ. Nói một cách đơn giản khi có sự thay đổi một một đối tượng bất kỳ có các đối tượng tham chiếu tới, thì các đối tượng tham chiếu đó sẽ đều nhận biết được sự thay đổi. Ví dụ a là tổng giá trị của biến b và c, khi b và c có sự thay đổi, nó sẽ làm thay đổi giá trị của a.

 

Để hiểu sâu hơn về khái niệm này, ta sẽ đào sâu một số thuật ngữ sau. Thứ nhất là Publisher, là đối tượng sẽ có những biến đổi về giá trị. Theo ví dụ trên, b và c được coi là các Publisher. Khái niệm thứ hai là Subscriber, là đối tượng nhận sự thay đổi khi b và c có sự biến đổi về giá trị, trong trường hợp là, a chính là một Subscriber. Phần kết nối giữa Subscriber và Publisher được gọi là Subcribe, được coi là cầu nối để thông báo các thay đổi của biến b và c đến giá trị của biến a.

 

Tại sao cần sử dụng Reactive Programming

Thông thường lập trình phản ứng sẽ giải quyết vấn đề  khi một “getter” bất kỳ gây ra vấn đề khi nó cung cấp giá trị hiện tại mà không báo cáo với bạn các thay đổi. Reactive programming sẽ giải quyết vấn đề này bằng cách gửi các dữ liệu giá trị vào một kênh. Khi đó, bất kỳ phần nào phụ thuộc vào dữ liệu này đều phải đi qua kênh đó, vì vậy bạn sẽ được thông báo khi các thay đổi xảy ra.

Reactive programming sẽ giúp hiển thị các kênh một cách rõ ràng và chỉ ra các ảnh hưởng và sự phụ thuộc của dữ liệu, do đó lập trình viên sẽ dễ dàng nắm được sự thay đổi, dễ bảo trì và đơn giản hóa các dữ liệu khi lập trình ứng dụng.

>>> Đọc thêm: Ref trong Reactjs là gì? Cùng giải mã ngay thông tin về Ref trong Reactjs

Một số lợi ích khác của việc sử dụng Reactive Programming:

  • Đơn giản hóa quá trình để thực hiện công việc không đồng bộ / phân luồng
  • Đơn giản hóa công việc liên quan đến toán tử
  • Dễ dàng soạn các luồng dữ liệu
  • Bạn sẽ có một cơ sở mã rõ ràng hơn, dễ đọc hơn
  • dễ thực hiện áp lực ngược

Kết

Bài viết trên đã giải thích khái niệm reactive programming là gì, các thuật ngữ liên quan và các lý do lập trình viên nên sử dụng Reactive Programming trong lập trình. Với những lợi ích mà lập trình phản ứng có thể mang lại, lập trình viên nên học theo lối tư duy lập trình phản ứng để tối ưu hóa thời gian và công sức lập trình. Khám phá thêm về ngôn ngữ lập trình qua các khóa học lập trình tại Viện CNTT T3H!