Currying là gì?

Currying là quá trình chuyển đổi một hàm nhận nhiều tham số thành một chuỗi các hàm mà mỗi hàm chỉ nhận một tham số. Tức là, thay vì gọi một hàm với một danh sách các tham số, bạn gọi nó với một tham số tại một thời điểm.

Ví dụ cơ bản

Xét hàm cộng hai số sau đây:

function sum(a, b) {
    return a + b;
}

Với currying, hàm trên có thể được viết lại thành:

function curriedSum(a) {
    return function(b) {
        return a + b;
    };
}

Bạn có thể sử dụng hàm này như sau:

const add5 = curriedSum(5);
console.log(add5(10)); // Kết quả: 15

Ưu điểm của Currying

Tính tái sử dụng

Currying cho phép bạn tạo ra các biến thể của hàm ban đầu mà không cần phải viết lại logic từ đầu.

Chống trùng lặp mã

Currying giúp giảm thiểu sự trùng lặp mã bằng cách tách biệt các tham số cố định và biến đổi.

Độ đọc mã

Khi các hàm được phân chia thành các phần nhỏ hơn, mã nguồn trở nên dễ đọc và dễ hiểu hơn.

Ví dụ nâng cao

Dưới đây là một ví dụ nâng cao về Currying trong JavaScript:

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

const multiplyBy2 = multiply(2);
const multiplyBy2And3 = multiplyBy2(3);
console.log(multiplyBy2And3(4)); // Kết quả: 24

Ví dụ trên cho thấy cách mà currying cho phép bạn xây dựng các hàm phức tạp từ các hàm đơn giản.

Tổng kết

Currying là một khái niệm mạnh mẽ trong lập trình hàm, giúp viết mã ngắn gọn, dễ bảo trì. Hiểu rõ về currying và biết cách áp dụng nó sẽ làm cho bạn trở thành một lập trình viên JavaScript giỏi hơn.

Hy vọng bài viết này đã cung cấp cho bạn một cái nhìn tổng quát và chi tiết về Currying trong JavaScript. Hãy thử áp dụng kỹ thuật này vào dự án của bạn để thấy được sức mạnh của nó!