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é.
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.
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 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.
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.
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!
Đăng ký nhận thông báo bài viết mới
Bình luận (1)