fp-pack, tiện ích hàm kiểu hàm Function trong TypeScript lấy `pipe` làm trung tâm, dễ dùng trong công việc thực tế của nhóm
(github.com/superlucky84)1. Động cơ – vì sao tôi tạo ra nó
Tôi nghĩ mỗi người có thể coi trọng những giá trị khác nhau trong lập trình hàm.
Có người xem trọng tính chặt chẽ về mặt lý thuyết, có người lại đề cao tính nhất quán của trừu tượng hóa hơn.
Trong số đó, với tôi,
khả năng nhìn thấy luồng dữ liệu một cách khai báo và trực quan chỉ với pipe
luôn là ưu điểm lớn nhất của lập trình hàm.
Đặc biệt trong môi trường như JavaScript, nơi code rất dễ trở nên phức tạp,
việc dữ liệu đến từ đâu và chảy về đâu được thể hiện bằng một cấu trúc có thể nhìn thấy
trở nên quan trọng hơn trong công việc thực tế.
Tuy nhiên, khi cố áp dụng cách làm này vào
môi trường làm việc theo nhóm gồm các thành viên có mức độ hiểu biết về lập trình khác nhau,
chúng ta thường xuyên gặp phải những ràng buộc thực tế.
Trong quá trình áp dụng các pattern lập trình hàm,
giá trị dần bị bọc trong những cấu trúc ngày càng trừu tượng,
và số lần phải hiểu các quy tắc riêng ở từng bước trung gian cũng tăng lên,
khiến chính “độ dễ đọc của toàn bộ luồng pipeline” mà tôi coi trọng
lại bị mờ đi — tôi đã trải qua điều đó nhiều lần.
Gần đây, khi các công cụ hỗ trợ sinh code ngày càng tinh vi hơn,
tôi cũng thường xuyên gặp những trường hợp thiết kế vô tình trở nên quá phức tạp.
Vì vậy, trong fp-pack, dù là con người hay công cụ,
tôi đã chủ ý chọn một cấu trúc
khuyến khích chỉ viết pipeline ở dạng đơn giản nhất có thể.
Dựa trên những trải nghiệm đó, fp-pack
là một dự án cá nhân được tạo ra với ưu tiên không phải là tính hoàn chỉnh về mặt lý thuyết, mà là
độ dễ đọc lấy Pipe làm trung tâm, có thể được duy trì bền vững trong môi trường làm việc nhóm.
Để việc xử lý side effect trong lập trình hàm không chỉ giới hạn ở những người quen thuộc với một lý thuyết cụ thể,
tôi cũng đưa vào một cách xử lý Side Effect mang tính thử nghiệm, được diễn giải lại bằng các pattern dễ hiểu
(hướng dẫn liên quan 👉 https://superlucky84.github.io/fp-pack/#/ko/guide/side-effect-guide).
2. Các nguyên tắc cốt lõi
-
Lấy Plain Value làm trung tâm
Bên trong pipeline, giá trị không bị bọc lại một cách không cần thiết,
giữ nguyên Plain Object / Plain Value
để việc theo dõi luồng và debug trở nên trực quan. -
Tách biệt Side Effect một cách tường minh
Chỉ khi cần dừng sớm (Early Exit) hoặc xử lý ngoại lệ
mới được thiết kế để dùng một pipeline chuyên dụng riêng. -
Đường cong học tập thấp
Thay vì các khái niệm mới,
thư viện được tổ chức xoay quanh pattern sử dụng quen thuộc củapipe,pipeAsync
để dễ chia sẻ trong nhóm. -
An toàn kiểu
Tận dụng TypeScript
để có thể kiểm tra sự không khớp kiểu ở giữa pipeline ngay tại thời điểm biên dịch.
3. Lời kết
Ngay cả khi không cần học thêm những khái niệm phức tạp mới,
trong môi trường JavaScript / TypeScript,
những ai muốn áp dụng một cách tự nhiên vào công việc thực tế
ưu điểm cốt lõi của lập trình hàm là
“code dễ đọc luồng dữ liệu”
thì tôi hy vọng đây có thể trở thành một lựa chọn.
🔗 Tài liệu (Documentation)
https://superlucky84.github.io/fp-pack/#/ko
🔗 GitHub
https://github.com/superlucky84/fp-pack
1 bình luận
Tôi đã tạo ra fp-pack khi hình dung về một kiểu lập trình pha trộn tư duy hàm, mà các thành viên trong nhóm với nhiều xuất phát điểm khác nhau, kể cả lập trình viên sơ cấp và trung cấp, dù không phải gò ép theo một phong cách hay lối tư duy cụ thể, chỉ cần hiểu về hàm,
pipevà currying, là có thể tự nhiên áp dụng.