Higher-order functions (HOF) là gì? Lợi ích mà nó mang lại khi sử dụng trong dự án của bạn.

Higher-order functions (HOF) là gì? Lợi ích mà nó mang lại khi sử dụng trong dự án của bạn.

Những mẩu tin ngắn hàng ngày dành cho bạn
  • bolt.new bá đạo quá mọi người ạ, cân tất cả các thể loại Front-end luôn. Chả là mình bí ý tưởng, lên đó mô tả lại thật chi tiết về cái giao diện mà mình muốn, càng chi tiết càng tốt, thế là nó vẽ ra luôn mới sợ chứ. Tuy không hoàn hảo lắm nhưng rất giống với tưởng tượng trong đầu mình nghĩ ra, sửa lại cũng dễ. Mặc định con này tạo mã cho React hay sao ấy, nên là nếu không muốn thì bảo nó tạo mã cho nền tảng mà bạn đang sử dụng là được.

    Điểm trừ là mỗi lời nhắc tiếp theo thì nó sẽ thay thế toàn bộ mã cũ -> tốn tokens. Chắc chỉ yêu cầu vài lần là hết lượng tokens miễn phí trong ngày à. Điểm cộng là họ đang có chương trình tặng 2 triệu tokens miễn phí cho mọi người đấy. Vào lấy ngay thôi 🥳

    » Xem thêm
  • Khi làm một cái gì đó mới, kiểu như ứng dụng mới hay web mới, thường thì mình sẽ hình dung ra các khối và bố cục của các thành phần trông như nào. Trong đó vị trí của logo cực kỳ quan trọng và logoipsum là trang web cung cấp logo miễn phí, mẫu mã đa dạng, rất phù hợp để đặt trước vào trong ứng dụng khi chưa thiết kế được logo chính thức 🥳

    » Xem thêm
  • deepseek chơi lớn. Mô hình ngôn ngữ lớn, mã nguồn mở của các pháp sư Trung Hoa này vừa cho mọi người dùng miễn phí bản trên web (giống như ChatGPT). Ngoài ra giá gọi API cũng đang được giảm giá phải nói là rất rẻ, trong khi điểm hiệu năng tỏ ra vượt trội so với những cái tên đình đám như là Claude-3.5, GPT-4o... 🙏

    Lại có đồ chơi mới 🤔!

    » Xem thêm

Vấn đề

Nhớ lại trước đây, khi tôi đọc được bài viết về Higher-order functions thì nó đã gây ra một sự hoang mang nhất định. Do là mới vào nghề, kinh nghiệm chưa có nên đọc lý thuyết khá là khó hiểu. Hồi đó thì cũng đọc cho biết chứ chưa hình dung được tính ứng dụng gì nhiều. Mãi sau mới ngớ ra - ớ cái này xưa nay mình vẫn đang dùng thường xuyên mà!

Bài viết về Higher-order functions thì cũng rất là nhiều trên mạng rồi, bạn đọc chỉ cần tìm trên Google là thấy. Tuy nhiên, vì HOF là một khái niệm quan trọng và có tính ứng dụng cao nên tôi xin phép được viết một bài theo quan điểm cá nhân. Không nói nhiều nữa, bắt đầu thôi.

HOF là gì?

Higher-order functions trong JavaScript là các hàm có khả năng nhận đầu vào là một hoặc nhiều hàm khác hoặc trả về một hàm khác.

Ví dụ, một hàm có thể được truyền vào như một đối số của một hàm khác, hoặc một hàm có thể trả về một hàm khác để sử dụng trong mã của chúng ta. Điều này cho phép chúng ta tạo ra các hàm linh hoạt và tái sử dụng được.

Trong JavaScript, các hàm như map, filter, reduce... là ví dụ tiêu biểu cho HOF. Chúng đều là hàm nhận đối số là một hàm khác và áp dụng hàm đó lên một mảng hoặc các giá trị khác để thực hiện phép biến đổi nhất định.

Cách sử dụng

Bạn có thể ứng dụng HOF để tạo ra các hàm sử dụng linh hoạt cho riêng mình hoặc tạo ra hàm có thể tái sử dụng nhiều lần.

Một trong những trường hợp phổ biến sử dụng HOF là trong các hàm map, filter, reduce. Nếu bạn chưa biết công dụng của 3 hàm này thì tôi đã có một bài viết chi tiết tại Tại sao bạn nên sử dụng thành thạo bộ ba map, filter và reduce trong Javascript?.

Quay lại vấn đề, giả sử chúng ta có một mảng và cần áp dụng một phép toán vào tất cả phần tử trong đó thì chúng ta sử dụng map.

const arr = [1, 2, 3];
const arr2 = arr.map(function (item) {
  return item + 1;
});

map là một HOF vì nó nhận tham số là một hàm. Vì tham số là một hàm, chúng ta có thể viết lại đoạn mã trên một cách có tính tái sử dụng như sau:

const addOne = a => a + 1;

const arr = [1, 2, 3];
const arr2 = arr.map(addOne);

addOne là một hàm nhận vào một số a và trả ra a + 1. Vì thế sau này chúng ta có thể sử dụng addOne ở trong nhiều hàm map khác mà không phải mất công viết lại logic cộng.

Lợi ích của HOF

HOF mang lại khá nhiều lợi ích trong lập trình:

  • Tính tái sử dụng: HOF cho phép tạo ra các hàm linh hoạt và có tính tái sử dụng để giải quyết nhiều vấn đề khác nhau mà không cần phải viết lại cùng một đoạn code nhiều lần. Đồng thời, giảm sử lặp lại của mã.

  • Tách biệt dữ liệu và logic, đơn giản hóa việc viết mã: HOF cho phép tách biệt giữa dữ liệu và logic, giúp cho mã trở nên dễ đọc và dễ bảo trì hơn. Như ví dụ trên, thay vì đoán xem map đang làm nhiệm vụ gì thì chỉ cần nhìn vào tên hàm addOne thì đã có thể đoán ra một phần.

  • Nhiều hàm HOF được tạo ra để hỗ trợ lập trình. Ví dụ như các hàm map, filter... và rất nhiều hàm khác. Mục đích tạo ra chúng để giảm thời gian viết mã, vì nếu không có chúng thì bạn sẽ phải viết nhiều mã hơn để đạt cùng mục đích. Ngoài ra, còn nhiều hàm trong xử lý bất đồng bộ như Promise, async/await và các thư viện ứng dụng HOF để tạo ra hàm xử lý linh hoạt cho lập trình viên.

Bên cạnh những lợi ích, HOF có thể gây khó hiểu và khó tiếp cận cho người mới học JavaScript, vấn đề này có thể khắc phục theo thời gian. Ngoài ra, sử dụng quá nhiều hàm HOF có thể tạo ra một sự phức tạp nhất định trong đọc - hiểu mã, tiêu tốn tài nguyên hệ thống (mỗi hàm là một đối tượng được tạo ra), hoặc cho việc bảo trì sau này. Tuy nhiên, các điểm yếu này hoàn toàn có thể khắc phục được qua thời gian và kinh nghiệm của người lập trình.

Tổng kết

Higher-order functions (HOF) là các hàm có khả năng nhận đầu vào là các hàm hoặc đầu ra là một hàm. HOF được sử dụng rất nhiều trong lập trình JavaScript vì lợi ích mà nó mang lại. Tuy nhiên nó cũng gây ra nhiều vấn đề như hơi khó hiểu đối với người mới và khả năng bảo trì sau này.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...
Bấm hoặc cuộn mạnh để sang bài mới