Giới thiệu thư viện lập trình hàm Ramda

Giới thiệu thư viện lập trình hàm Ramda

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Tin tức sáng sớm, mọi người còn nhớ vụ kiện của Ryan Dahl - hay nói đúng hơn là của nhóm Deno với Oracle về cái tên JavaScript không?

    Oracle đã phản hồi rằng họ không từ bỏ cái tên JavaScript đâu 🫣

    https://x.com/deno_land/status/1876728474666217739

    » Xem thêm
  • Mọi người nghỉ tết sớm rồi hay sao á? Nhiên cái nguyên tuần nay traffic giảm hẳn luôn 😳. Một mình tuôi nói kể cũng buồn, ai đi ngang qua đọc được thì thả một "còm men" cho vui cửa vui nhà nha. Nói gì cũng được vì ẩn danh cả mà 😇🔥

    » Xem thêm
  • Có người hỏi mình là cập nhật tin tức ở đâu mà nhanh thế, hay là kiếm ra được mấy cái tools, mấy cái projects... ở đâu mà nhiều thế? Thì có một nguồn xa tận chân trời mà gần ngay trước mắt đó chính là trang Github Trending này đây.

    Trang này thống kê lại các kho lưu trữ đang có lượt "star" nhiều nhất theo ngày/tuần/tháng. Nó còn xem theo được ngôn ngữ cơ, mà mỗi ngôn ngữ lại kiểu như một chủ đề á. Ví dụ Python thì hót rần rần về AI, LLMs..., Rust thì bao tools siêu mạnh, còn Go thì... đồ chơi liên tục 😁. Trong khi JavaScript 🫣😑

    » Xem thêm

Ramda là gì?

Ramda là một thư viện có chứa rất nhiều hàm tiện ích hỗ trợ cho lập trình Javascript. Nếu bạn đã nghe hoặc từng sử dụng lodash thì có thể hình dung ra chức năng của Ramda cũng gần tương tự. Còn nếu bạn chưa từng nghe hoặc chưa từng biết đến cả hai thì hãy đọc tiếp phần dưới đây nhé.

Tính tiện ích của Ramda

Một vấn đề rất đơn giản được đặt ra là hãy lấy thuộc tính "name" trong một object person.

const person = {
  name: "Coffee",
  age: 18,
}

Đơn giản phải không chúng ta chỉ cần gọi person.name lập tức sẽ lấy được dữ liệu là "Coffee". Bạn có thể sử dụng cách này để nhanh chóng lấy ra được dữ liệu tuy nhiên giả sử person có giá trị null hoặc undefined thì sao? Tốt nhất hãy gói nó thành một hàm tiện ích để tái sử dụng.

Bây giờ hãy làm nó linh hoạt bằng cách viết hàm chuyên để lấy một thuộc tính của object.

function get(obj, attr) {
  return obj[attr];
}

Giờ thì chúng ta có thể gọi get(person, "name") để nhận được dữ liệu là "Coffee".

Tuy nhiên hàm trên có vẻ còn chưa ổn, nếu obj là undefined hoặc null hay đơn giản nó không phải là một Object thì hàm get sẽ bị lỗi. Bạn có thể kiểm tra một vài điều kiện trước khi lấy giá trị, điều đó chỉ tốn chút thời gian và công sức của bạn thôi.

Hiểu được vấn đề đó, Ramda đã viết sẵn cho bạn một hàm có tên là prop chuyên để lấy giá trị của thuộc tính.

const R = require('ramda');

R.prop("name", person); // Coffee
// hoặc
R.prop("name")(person); // Coffee
// hoặc
const getName = R.prop("name");
getName(person); // Coffee

Oh, nếu chỉ có thế thôi thì sao mọi người lại thích dùng nhỉ? Bởi vì prop chỉ là một trong số rất nhiều hàm mà Ramda hỗ trợ. Còn nhiều hàm khác cung cấp những tính năng mạnh mẽ mà bạn không cần phải mất thời gian viết lại, hơn thế nữa chúng còn có thể dễ dàng kết hợp lại với nhau để trở nên "bá đạo" hơn.

Ví dụ kết hợp các hàm Ramda lại để lọc trong danh sách people những đối tượng có "age" > 18 và sắp xếp lại theo thứ tự giảm dần của "age".

R.pipe(
  R.filter(
    R.pipe(R.prop('age'), R.lt(18)),
  ),
  R.sortWith([
    R.descend(R.prop('age')),
  ])
)(people)

Thoạt nhìn thì đoạn mã trên có hơi dài và khó hiểu. Để có thể hiểu và áp dụng được Ramda thì cách duy nhất là các bạn cần xem mô tả tất cả các hàm trên trang chủ của nó. Đồng thời bạn cũng cần phải hiểu được các hàm curry hoạt động như thế nào.

Tại sao tôi nên sử dụng Ramda?

Như đã giới thiệu ở đầu bài, bởi vì Ramda là tập hợp các hàm tiện ích chung thích hợp cho nhiều bài toán. Một điều khác biệt với các thư viện tiện ích tương tự khác đó là Ramda mang phong cách của lập trình hàm (Functional Programming) chính vì thế Ramda là thư viện thường được sử dụng trong những dự án mang phong cách của lập trình hàm.

Ramda có gì đặc biệt?

Ramda được thiết kế theo phong cách lập trình hàm, vì thế tính bất biến và các hàm thuần tuý là trọng tâm của nó. Điều này giúp bạn xử lý mã đơn giản và tường minh.

Các hàm trong Ramda hầu hết đều hỗ trợ curry. Điều này cho phép bạn dễ dàng xây dựng các hàm mới từ các hàm cũ bằng cách không cung cấp các tham số cuối cùng.

Các tham số của hàm được sắp xếp để thuận tiện cho việc áp dụng curry function. Dữ liệu cuối thường được yêu cầu sau cùng.

Tổng kết

Bài viết này chỉ mang tính chất giới thiệu đến mọi người một thư viện tiện ích hỗ trợ lập trình hàm Javascript Ramda. Ramda cung cấp rất nhiều hàm tập trung giải quyết một vấn đề nhỏ, bên cạnh đó bạn có thể dễ dàng kết hợp chúng lại với nhau để tạo nên một chương trình mạnh mẽ.

Khi ramda trở thành tiếng nói chung trong nhiều dự án thì sẽ giúp mọi người dễ dàng triển khai và bảo trì hơn.

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 (1)

Nội dung bình luận...
Avatar
Tùng Nguyễn2 năm trước
Ảo quá thấy cách viết này còn khó hiểu hơn
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
@gif [10JhviFuU2gWD6]
Bấm hoặc cuộn mạnh để sang bài mới