Pure functions trong JavaScript

Pure function là gì và tại sao nên sử dụng nó trong JavaScript?

Hàm thuần khiết “Pure” function là gì?

Một hàm thuần khiết không phụ thuộc và không bị thay đổi trạng thái vào các biến bên ngoài phạm vi hoạt động của nó.

Điều đó cũng có nghĩa là, một hàm thuần khiết luôn luôn trả về kết quả giống nhau khi tham số truyền vào giống nhau. Nó thực thi không phụ thuộc vào trạng thái của hệ thống.

Pure functions là một nguyên tắc trong functional programing.

Ví dụ:

Chúng ta đơn giản chỉnh lại tham số của hàm và chỉ thao tác với tham số đó, vậy nó sẽ không chỉnh sửa bất kỳ thứ gì bên ngoài scope.

Ở đây thì b không nằm trong scope của impureFuntion.

Thực tế nó là gì?

Cùng nghiên cứu đoạn mã dưới đây:

  • Ở trên chúng ta có 3 functions: addQuantityText(), formatQuantityText() and setQuantityTextColor() và tất cả chúng đều là impure.

  • Trong đoạn mã trên, addQuantityText() là phương thức sử dụng khi bạn muốn hiển thị số các phần tử trong boxContrainer. Điều gì xảy ra nếu biến $$quantity thay đổi.

  • Ở hàm formatQuantityText chúng ta truyền $$quantity vào hàm setQuantityTextColor nó đã thay đổi một biến mà bên ngoài scope của nó, và việc thay đổi cách biến trạng thái $$boxContainer đặt ở nhiều chỗ sẽ gây việc debug sau này rất khó khăn.

Dưới đây chúng ta sẽ sửa lại như sau: 

 

Những điều thay đổi:

  • Hàm getQuantityTextColor() thay thế cho setQuantityTextColor()

  • Phương thức này sẽ trả về màu chứ nó sẽ không gán giá trị thẳng vào biến nữa.

  • Thao tác hoàn toàn trong scope của nó.

  • Tách tiệc tạo $$quantity trong formatQuantityText() nó vẫn hoạt đụng đúng scope và trả về giá trị.

  • Tất cả việc thay đổi biến trạng thái được thao tác trong addQuantityText với đúng tên của nó, ở đây chúng ta đã cố gắng tạo ra tối đa và thao tác các pure methods .

Lợi ích của pure functions:

Nó không thay đổi trạng thái mà nằm bên ngoài scope của nó. Vì vậy bạn chỉ cần để ý giá trị khi gọi pure function trả về là gì.

Điều đó có nghĩa là bạn lúc nào cũng chỉ cần quan tâm đến input và output ra là gì. Nhưng với một chương trình thì việc có những hàm impure là không thể tránh khỏi nên chúng ta nên cố gắng hạn chế việc tạo ra các inpure functions ít nhất có thể vì bạn sẽ chắc chắn dễ dàng bảo trì dự án hơn.

Tóm tắt:

  • Pure function chỉ thao tác trên tham số truyền vào

  • Ít nhất 1 tham số

  • Luôn trả về giá trị

  • Trả về giá trị không đổi khi tham số không đổi

  • Không có side effects(tác dụng phụ)

ITZone via Techmaster

Chia sẻ bài viết ngay