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.

Tin ngắn hàng ngày dành cho bạn
  • Cuốn sách nào đến cuối cùng cũng nên có cái kết viên mãn, hoặc chí ít sự ra đi của nhân vật nào đó mang lại bình yên cho những người còn lại. Mình đã tin vào điều đó cho đến khi đọc cuốn "Tuổi thơ dữ dội" của nhà văn Phùng Quán.

    Hội tụ đủ yếu tố để hình thành nên các mảnh đời có tuổi thơ dữ dội. Từ hái lá chữa bệnh cho mẹ, vô tình nghe một bản nhạc, hay xuất thân từ gia đình có truyền thống cách mạng... nhưng trái tim cùng chung một chí hướng: Thà chết chứ không làm nô lệ.

    Đọc mới thấy những khó khăn nhọc nhằn, thiếu thốn nhưng các trinh sát không hề nao núng. Tinh thần sắt đá, kiên cường sẵn sàng hy sinh để hoàn thành nhiệm vụ được giao. Những trận đánh nảy lửa, sự hy sinh mất mát, buổi tra tấn tàn bạo và những lần vượt ngục được kể lại rất sống động và hồi hộp từng phút. Cả những kẻ nhẫn tâm bán rẻ đồng bào để đổi lại vinh hoa phú quý. Có những hiểu lầm mà chỉ đến khi chết mới rửa sạch. Có lẽ cái chết không đáng sợ, mà đáng sợ nhất là mang tiếng kẻ bán nước.

    Cuốn sách này hay quá, đọc đến cuối mà hai bọng nước căng lên trên khoé mắt. Tại sao phải cố giữ lại giọt nước mắt mà đáng ra nó nên được giải thoát bởi sự thăng hoa của cảm xúc 🥹?

    » Xem thêm
  • Khi nghiên cứu về một vấn đề gì đó mọi người thường có cách ghi chép lại như thế nào? Kiểu như là tài liệu đã tìm thấy, hình ảnh, liên kết, ghi chú...

    Mình thì rất hay nghiên cứu về một chủ đề nào đó. Ví dụ gặp cái ảnh nào hay thì lưu lại vào máy, tài liệu thì cũng tương tự, liên kết thì lưu vào Bookmarks của trình duyệt... Cơ mà lúc tìm lại thì chẳng biết mọi thứ trước đó lưu ở đâu, tìm thế nào. Thậm chí có khi còn quên hết những gì đã làm trước đó, lục lại thì như mới toanh 😃.

    Nên mình đang ấp ủ kế hoạch xây dựng nên một nơi lưu trữ những gì mà mình tìm hiểu, không chỉ dành riêng cho bản thân mà còn mang hy vọng chia sẻ nó đến với mọi người. Đây như là một nơi chứa các chủ đề nghiên cứu, mỗi chủ đề gồm rất nhiều ghi chú có móc nối đến nhau tạo nên một sổ tay hoàn chỉnh. Dễ dàng theo dõi, dễ dàng viết và dễ tra cứu...

    Mình viết blog, cái khó của viết là lối hành văn và nội dung muốn truyền tải. Hành văn mà dở thì cản trở người đọc, nội dung lắt léo thì coi như mất linh hồn của bài viết. Nhiều người viết rất muốn chèn thêm thông tin ngoài lề vào để củng cố kiến thức nhưng điều đó vô tình lại làm bài viết trở nên dài ngoằng, lan man, không tập trung vào nội dung chính.

    Sổ ghi chú (Notebooks) tạo ra để khắc phục tình trạng này. Không cần phải quá trau chuốt vào viết mà quan tâm nhiều đến quá trình nghiên cứu, thể hiện qua nhiều bài viết ngắn có liên kết với nhau. Ngoài ra còn có thể lưu lại cả tài liệu có liên quan nữa.

    Đấy là dự kiến, mình biết nhiều bạn có cách ghi chép riêng. Vì vậy rất mong nhận được chia sẻ từ mọi người. Cảm ơn.

    » Xem thêm
  • altcha-org/altcha là một dự án mã nguồn mở thay thế giải pháp reCaptcha hay hCaptcha.

    Nghiên cứu mấy dự án này cũng hay ho phết, vì coi như tìm hiểu luôn cách nó hoạt động và ngăn chặn hành vi "spam" ra sao 🤓

    » 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...