Currying là một kỹ thuật trong lập trình hàm, cho phép bạn chuyển đổi một hàm với nhiều tham số thành một chuỗi các hàm đơn, mỗi hàm nhận một tham số duy nhất. Kỹ thuật này không chỉ giúp cải thiện khả năng tái sử dụng mã mà còn làm cho việc quản lý các tham số trở nên dễ dàng và linh hoạt hơn.
Khi một hàm được curry, nó sẽ trả về một hàm mới. Hàm mới này sẽ nhận một tham số và trả về một hàm khác, và quá trình này sẽ tiếp tục cho đến khi tất cả các tham số cần thiết được cung cấp.
Cú pháp cơ bản:
function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func(...args); } return function(...args2) { return curried(...args, ...args2); }; }; }
Giả sử bạn có một hàm để cộng ba số:
function add(a, b, c) { return a + b + c; } // Hàm currying cho hàm add function curriedAdd(a) { return function(b) { return function(c) { return a + b + c; }; }; } // Sử dụng hàm currying const addFive = curriedAdd(5); // a = 5 const addFiveAndThree = addFive(3); // b = 3 const result = addFiveAndThree(2); // c = 2 console.log(result); // Kết quả: 10
curriedAdd(5)
, hàm trả về một hàm mới mà chờ đợi tham số b
.addFive(3)
, hàm trả về một hàm mới mà chờ đợi tham số c
.addFiveAndThree(2)
, tất cả các tham số đã được cung cấp, và hàm thực hiện phép cộng và trả về kết quả.Nếu bạn sử dụng thư viện Lodash, bạn có thể dễ dàng thực hiện currying như sau:
const _ = require('lodash'); function add(a, b, c) { return a + b + c; } // Sử dụng lodash để tạo hàm currying const curriedAdd = _.curry(add); // Sử dụng hàm currying console.log(curriedAdd(5)(3)(2)); // Kết quả: 10
Currying thường được sử dụng trong các thư viện JavaScript như React và Redux để quản lý các tham số của các hàm callback, giúp cải thiện khả năng tái sử dụng mã và làm cho mã dễ đọc hơn.
Trong React, bạn có thể sử dụng currying để xử lý các sự kiện:
class MyComponent extends React.Component { handleClick = (message) => (event) => { console.log(message); }; render() { return ( <button onClick={this.handleClick('Button clicked!')}> Click me </button> ); } }
Currying là một kỹ thuật mạnh mẽ trong lập trình JavaScript, giúp bạn tối ưu hóa việc xử lý hàm và quản lý tham số một cách linh hoạt hơn. Bằng cách chia nhỏ các hàm có nhiều tham số thành các hàm đơn giản hơn, bạn có thể cải thiện khả năng tái sử dụng mã và làm cho mã của mình trở nên rõ ràng và dễ hiểu hơn. Việc áp dụng currying trong thực tế có thể mang lại lợi ích lớn trong việc viết mã sạch và bảo trì tốt hơn.