First-class function hiểu trong 1 phút, đừng hỏi lại!

Nội dung bài viết

Ở bài trước chúng ta đã nói về Immutability JS là gì?, kèm theo đó là những khái niệm về lập trình thủ tục, lập trình khai báo. Anh em đang mông lung thì có thể đọc qua để hiểu hơn.

First-class function là gì

First-class function hay còn gọi là chức năng hạng nhất, dịch ra như vậy cho nó đúng việc dịch thuật thôi chứ chẳng có ý nghĩa gì cả. Đừng cố hiểu kỹ, vì bạn ngày nào chả thực hiện việc đó. 3 đặc điểm cần nhớ khi nói đến First class function đó chính là:

  • Gán một biến cho một hàm
  • Sử dụng một hàm làm argument
  • Return về một function

Xem thêm: Series Functional Programming

Gán một biến cho một hàm

Ví dụ thế này:

  // Gán một hàm ẩn danh cho một biến
  const fn = function() {
    console.log("alo");
  }
  fn(); // fn_bar

  // Gán một hàm có tên cho một biến
  const fn2 = function name() {
    console.log("Anonystick");
  }
  fn2(); // fn2_bar

Nhìn sơ qua là hiểu rồi. Theo ví dụ trên thì ta có thể khẳng định đó là một biến có thể gán cho một function.

Truyền một hàm dưới dạng tham số

Tiêu đề có thể gây hoang mang, nhưng nói đến callback là gì? Anh em lại cảm thấy yên tâm. Vâng nó chính là callback đấy:

Ví dụ:

function callback() {
    return "Hello, ";
  }
  function sayHi(callback, name) {
    console.log(callback() + name);
  }
  //  Chuyển hàm `callback` qua `sayHi`  làm tham số.
  sayHi(callback, "anonystick!"); // Hello, anonystick!

Trường hợp này thì quá rõ ràng, thời xa xưa anh em toàn xài callback đến khi nào chết thì thôi. Giờ từ khi những tính năng tốt nhất của ECMAScript giới thiệu thì, mình chuyển sang async/await sử dụng nên cũng ít xài callback.

Trả về một function

Thay vì bình thường return về một giá trị nào đó? thì sử dụng chức năng hạng nhất có thể trả về một function, xem ví dụ sau đây:

 function sayHi() {
    //  Trả về một hàm ẩn danh
    return function () {
      console.log("Hi~");
    };
  }
  //  Hoặc có thể sử dụng
  const foo = sayHi();
  foo(); // Hi~

  // Hoặc
  sayHi()(); // Hi~

NHìn vào anh em có nhớ đến chức năng gì không? Nó giống như khái niệm Closure là gì? mà các anh phỏng vấn hay hỏi đó. Vâng chả khác gì là mấy.

Ngoài ra nếu như bạn nào được nghe về higher-order functions thì đó cũng là một ví dụ phổ biến nhất bạn có thể hiểu.

Để hiểu rõ hơn về Lập trình hàm anh xem cố gắng xem lại những bài trước kia hén.

Có thể bạn đã bị missing