Khám phá sức mạnh của Currying trong JavaScript

0 0 0

Người đăng: Gung Typical

Theo Viblo Asia

Currying, một kỹ thuật lập trình hàm thú vị, cho phép biến đổi hàm nhiều tham số thành chuỗi các hàm đơn giản hơn. Hãy cùng tìm hiểu cách thức hoạt động và lợi ích của Currying, cũng như ứng dụng thực tế của nó trong JavaScript.

Currying là gì?

Currying là một phương pháp biến đổi hàm nhiều tham số thành một chuỗi các hàm, mỗi hàm chỉ nhận một tham số duy nhất. Hãy tưởng tượng việc thưởng thức bữa ăn từng món một thay vì tất cả cùng lúc.

Currying mang lại nhiều lợi ích thiết thực cho việc lập trình. Tính năng nổi bật nhất chính là khả năng tái sử dụng. Bạn có thể tạo ra các phiên bản hàm chuyên biệt từ một hàm gốc. Ngoài ra, Currying còn giúp tăng tính dễ đọc, làm cho code gọn gàng và có tính module hơn. Chính vì những ưu điểm này mà Currying rất được ưa chuộng trong lập trình hàm.

Cùng xem xét một số ví dụ

Chúng ta hãy cùng xem xét một số ví dụ sau:

Ví dụ cơ bản:

// Normal function
function add(a, b) { return a + b;
}
console.log(add(2, 3)); // 5 // Curried version
function curriedAdd(a) { return function (b) { return a + b; };
}
console.log(curriedAdd(2)(3)); // 5

Như vậy, curriedAdd(2) sẽ tạo ra một hàm mới có thể cộng 2 với bất kỳ số nào.

const add2 = curriedAdd(2);
console.log(add2(5)); // 7
console.log(add2(10)); // 12

Currying với các hàm mũi tên:

Ai lại không thích các hàm mũi tên ngắn gọn và rõ ràng chứ?

const multiply = (a) => (b) => a * b; console.log(multiply(3)(4)); // 12 // Make a multiplier of 3
const triple = multiply(3);
console.log(triple(5)); // 15
console.log(triple(10)); // 30

Ví dụ thực tế:

Hãy tưởng tượng một chức năng lọc cho ứng dụng mua sắm:

const filterByCategory = (category) => (product) => product.category === category; const products = [ { name: "Shoes", category: "Fashion" }, { name: "Laptop", category: "Electronics" }, { name: "T-shirt", category: "Fashion" },
]; const isFashion = filterByCategory("Fashion"); console.log(products.filter(isFashion));
// Output: [ { name: "Shoes", category: "Fashion" }, { name: "T-shirt", category: "Fashion" } ]

Phân tích các vấn đề phức tạp:

Phương pháp Currying giúp chia nhỏ vấn đề thành nhiều phần nhỏ hơn, dễ quản lý hơn.

const greet = (greeting) => (name) => `${greeting}, ${name}!`; const sayHello = greet("Hello");
console.log(sayHello("Alice")); // Hello, Alice!
console.log(sayHello("Bob")); // Hello, Bob! const sayGoodMorning = greet("Good Morning");
console.log(sayGoodMorning("Charlie")); // Good Morning, Charlie!

Currying nâng cao với các chức năng tiện ích

Bạn không muốn tạo hàm curry thủ công? Hãy viết một hàm trợ giúp:

const curry = (fn) => (...args) => args.length >= fn.length ? fn(...args) : curry(fn.bind(null, ...args)); // Example:
const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum); console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
console.log(curriedSum(1)(2, 3)); // 6

Hy vọng các bạn sẽ thấy bài viết này hữu ích!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 435

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 154

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 146

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 110

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 246