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

Tin ngắn hàng ngày dành cho bạn
  • Void - cái tên mình đã nhắc đến từ cách đây khá lâu. Từ đợt mà continue.dev mới nổi lên á. Nó tương tự như Cursor và Windsurf, mới hôm nay họ đã phát hành phiên bản Beta và cho phép mọi người tải xuống.

    Điểm mạnh thì đây là nguồn mở, miễn phí, dùng các mô hình miễn phí cục bộ trên máy qua Ollama hoặc LM Studio... Không thích thì cắm API của bên khác vào cũng được. Mình vừa dùng thử thì thấy khả năng gợi ý và khung chat khá tương đồng với Cursor, có cả tính năng Agent luôn nhé 👏. Hoạt động ổn định hơn continue.dev (lần cuối dùng), việc còn lại là chọn mô hình xịn xịn tí 🤤

    » Xem thêm
  • Zed mới đây đã giới thiệu thêm tính năng Agent - tương tự như Agent trong Cursor hay Write trong Windsurf và họ gọi nó là The Fastest AI Code Editor.

    Cũng nhanh thật đấy vì Zed viết bằng Rust. Cơ mà chiến lược của họ có vẻ thay đổi, tập trung vào AI thay vì phát triển kho tiện ích mở rộng vốn đang có rất ít, không thể cạnh tranh được với VSCode 🥶

    Zed: The Fastest AI Code Editor

    » Xem thêm
  • Ngay sau thông tin OpenAI đạt được thoả thuận mua lại Windsurf với giá 3 tỉ đô thì ngày hôm nay Cursor đã miễn phí 1 năm dùng bản Pro cho sinh viên. Chaaaaà 🤔

    OpenAI Reaches Agreement to Buy Startup Windsurf for $3 Billion

    Cursor for Students | Cursor - The AI Code Editor

    » 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

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, 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]