/ / Các hàm thuần túy trong JavaScript và cách tạo chúng

Các hàm thuần túy trong JavaScript và cách tạo chúng

javascript featured

Các hàm thuần túy là các hàm không tạo ra tác dụng phụ và khi được gọi với cùng tham số đầu vào, sẽ luôn trả về cùng một đầu ra.


Bạn có thể sử dụng các hàm thuần túy để đảm bảo mã của bạn sạch sẽ, có thể bảo trì và kiểm tra được. Các chức năng này là lý tưởng cho các tác vụ này vì chúng có thể dự đoán được và không sửa đổi các trạng thái bên ngoài.

Chúng cũng dễ gỡ lỗi hơn, khiến chúng trở nên hữu ích trong việc phát triển các hệ thống phần mềm phức tạp. Tại đây, bạn sẽ khám phá các hàm thuần túy trong JavaScript, các đặc điểm và ưu điểm của chúng.


Đặc điểm của một chức năng thuần túy

Để một chức năng trở nên “thuần khiết”, nó phải đáp ứng một số yêu cầu.

Giá trị trả về không đổi

Một hàm thuần túy phải luôn trả về cùng một giá trị với cùng một đầu vào, bất kể số lần nó được gọi.

Ví dụ, hãy xem xét chức năng dưới đây:

 function multiply(a, b) {
  return a * b;
}

Các nhân hàm trong ví dụ trên sẽ luôn trả về tích của hai đối số của nó. Với cùng một bộ đối số, nó có giá trị trả về không đổi.

Gọi hàm này nhiều lần với các đối số giống nhau sẽ cho kết quả giống nhau mỗi lần. Ví dụ:

 multiply(2, 3); 
multiply(2, 3);
multiply(2, 3);

Ngoài ra, hãy xem xét ví dụ dưới đây:

 function multiplyRandomNumber(num) {
  return num * Math.floor(Math.random() * 10);
}

multiplyRandomNumber(5);
multiplyRandomNumber(5);
multiplyRandomNumber(5);

Các nhân số ngẫu nhiên chức năng trên sẽ trả về các kết quả khác nhau mỗi khi bạn gọi nó, làm cho nó không trong sạch. Kết quả của chức năng này là không thể đoán trước, vì vậy việc kiểm tra các thành phần dựa vào nó là khó khăn.

Không có tác dụng phụ

Một chức năng thuần túy không được tạo ra bất kỳ tác dụng phụ nào. Tác dụng phụ đề cập đến bất kỳ sửa đổi nào về trạng thái hoặc hành vi bên ngoài phạm vi của chức năng, chẳng hạn như sửa đổi các biến toàn cục, đầu ra của bảng điều khiển, yêu cầu mạng hoặc thao tác DOM.

Khi một chức năng thuần túy có tác dụng phụ, nó không còn thuần túy vì nó ảnh hưởng đến trạng thái bên ngoài và vi phạm nguyên tắc không có tác dụng phụ có thể quan sát được. Do đó, các hàm thuần túy tránh tác dụng phụ để đảm bảo rằng chúng không làm thay đổi trạng thái của chương trình.

Chẳng hạn, hãy xem xét ví dụ dưới đây:

 let count = 0;

function increment() {
  count++;
  console.log(count);
}

increment();
increment();
increment();

Các tăng chức năng trong ví dụ này có tác dụng phụ là sửa đổi đếm biến bên ngoài phạm vi của nó. Nó cũng đăng nhập vào bảng điều khiển.

Chức năng này không thuần túy vì nó có tác dụng phụ, điều này có thể khiến việc dự đoán đầu ra và thử nghiệm của nó trở nên khó khăn hơn. Để làm cho nó thuần túy, bạn có thể sửa đổi nó để đưa vào đếm biến làm đối số và trả về giá trị gia tăng mà không sửa đổi bất kỳ trạng thái bên ngoài nào.

Như vậy:

 function increment(count) {
  return count + 1;
}

increment(1);
increment(1);
increment(1);

Phiên bản của tăng hàm trong ví dụ trên không có tác dụng phụ vì nó không sửa đổi bất kỳ biến bên ngoài nào hoặc ghi lại bất kỳ giá trị nào. Ngoài ra, bất kể bạn gọi nó bao nhiêu lần, nó sẽ trả về cùng một giá trị cho cùng một đầu vào. Do đó, nó là một chức năng thuần túy.

Các đặc điểm khác

Ngoài việc có một giá trị trả về không đổi và không tạo ra bất kỳ tác dụng phụ nào, bạn nên tuân thủ các quy tắc sau khi tạo một hàm JavaScript mà bạn muốn là thuần túy:

  • Hàm của bạn không được sửa đổi bất kỳ đối số nào của nó. Thay vào đó, nếu bất kỳ thao tác nào yêu cầu thay đổi, hãy tạo một bản sao của đối số và thay đổi bản sao đó.
  • Hàm của bạn phải luôn có giá trị trả về. Nếu chức năng của bạn không có giá trị trả về hoặc bất kỳ tác dụng phụ nào, thì nó không thể làm được gì!
  • Chức năng của bạn không được phụ thuộc vào bất kỳ trạng thái bên ngoài nào.

Ưu điểm của chức năng thuần túy

Các chức năng thuần túy có một số lợi ích nhất định so với các chức năng không thuần túy, một số trong đó bao gồm những điều sau đây.

khả năng kiểm tra

Các hàm thuần túy rất dễ kiểm tra vì hành vi đầu vào/đầu ra của chúng được xác định rõ. Ngoài ra, các chức năng thuần túy không phụ thuộc vào trạng thái bên ngoài hoặc tác dụng phụ. Do đó, bạn có thể kiểm tra chúng một cách riêng biệt mà không phải lo lắng về bất kỳ sự phụ thuộc hoặc tương tác nào với các phần khác của chương trình.

Ngược lại, việc kiểm tra các chức năng không trong sạch phụ thuộc vào trạng thái bên ngoài hoặc tạo ra các tác dụng phụ có thể khó khăn hơn vì hành vi của chúng có thể phụ thuộc vào trạng thái của chương trình hoặc các yếu tố bên ngoài khác. Điều này có thể khiến việc tạo các trường hợp thử nghiệm toàn diện và đảm bảo rằng chức năng hoạt động chính xác trong mọi tình huống trở nên khó khăn hơn.

ghi nhớ

Bởi vì các hàm thuần túy luôn tạo ra cùng một đầu ra cho cùng một đầu vào và không tạo ra hiệu ứng phụ, bạn có thể dễ dàng ghi nhớ chúng.

Bằng cách dựa vào các thuộc tính này và sử dụng tính năng ghi nhớ, bạn có thể lưu trữ kết quả của một lệnh gọi hàm thuần túy cho một đầu vào cụ thể. Sau đó, chức năng của bạn có thể trả về kết quả được lưu trong bộ nhớ cache vào lần tiếp theo khi nó được gọi với cùng một đầu vào.

Việc ghi nhớ các hàm thuần túy có thể cải thiện hiệu suất của chương trình, đặc biệt đối với các phép tính tốn kém liên tục xử lý cùng một đầu vào mà không phải lo lắng về sự can thiệp vào trạng thái của chương trình.

Ngược lại, các hàm không thuần túy có thể tạo ra các kết quả khác nhau cho cùng một đầu vào, tùy thuộc vào trạng thái của chương trình hoặc các yếu tố bên ngoài. Điều này khiến chúng khó ghi nhớ vì kết quả được lưu trong bộ nhớ cache có thể không còn hợp lệ nếu các thành phần phụ thuộc của hàm hoặc trạng thái bên ngoài thay đổi giữa các lần gọi.

đồng thời

Vì các hàm thuần túy không sửa đổi bất kỳ trạng thái bên ngoài nào hoặc tạo ra bất kỳ tác dụng phụ nào, nên chúng an toàn cho luồng. Bạn có thể chạy chúng đồng thời mà không phải lo lắng về điều kiện cuộc đua hoặc sự cố đồng bộ hóa.

Ngược lại, các hàm không thuần túy có thể khó thực thi đồng thời vì chúng có thể can thiệp lẫn nhau hoặc tạo ra hành vi không mong muốn khi được thực thi song song. Ví dụ: nếu hai luồng truy cập và sửa đổi cùng một biến toàn cục, chúng có thể ghi đè lên các thay đổi của nhau hoặc tạo ra kết quả không nhất quán.

Hàm thuần túy so với hàm không thuần túy

Bạn có thể viết chương trình bằng cách sử dụng kết hợp các hàm thuần túy và không thuần túy, vì mỗi loại đều có công dụng của nó.

Các hàm thuần túy dễ dàng tối ưu hóa, kiểm tra và song song hóa, giúp chúng phù hợp với các trường hợp sử dụng như lập trình chức năng, lưu vào bộ nhớ đệm, thử nghiệm, lập trình song song và các tác vụ xử lý dữ liệu.

Tuy nhiên, các hàm không tinh khiết đặt ra những thách thức trong thử nghiệm và đồng thời nhưng lại hữu ích khi làm việc với cấu trúc dữ liệu có thể thay đổi hoặc tương tác với các hệ thống và tài nguyên bên ngoài.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *