Functional Programming có điểm vượt trội so với các mô hình lập trình khác là bởi tính đơn giản, rõ ràng, dễ hiểu dễ đọc. Đồng thời chính kết cấu rõ ràng của nó tạo nên tính ổn định và tin cậy, ít xảy ra lỗi.
Functional Programming là gì?
Functional programming là một dạng mô hình lập trình (FP – Gọi là lập trình hàm), cũng giống như lập trình tuần tự hay lập trình hướng đối tượng (OOP). Functional programming là một phương pháp lập trình dựa trên các hàm toán học (function), tránh việc thay đổi giá trị của dữ liệu. Nó có nhiều lợi ích như : các khối xử lý độc lập dễ tái sử dụng, thuận lợi cho việc thay đổi logic hoặc tìm lỗi chương trình.
Functional Programming có ưu điểm gì?
Functional Programming hướng đến tính kết hợp (composability) các hàm (function) để tối đa hóa khả năng tái sử dụng (reusability) trong chương trình.
Functional Programming thì chỉ có function, không assignment statements, không lưu giữ global state… Trong Functional Programming, chúng ta điều khiển luồng chương trình bằng cách phối hợp các functions lại với nhau.
Điểm khác biệt lớn nhất của lập trình hàm khác với lập trình thủ tục thuần túy (procedural programming) nằm ở điểm thay vì thực hiện tuần tự theo từng bước với các biến để lưu trạng thái thì FP chú trọng đến thực thi luồng chương trình thông qua việc kết hợp các hàm bậc cao (high order function).
Đối với các ngôn ngữ có hỗ trợ high order function thì các hàm cũng có thể được truyền như là các tham số hoặc là kết quả trả về. Do đó các thuật toán trong FP có thể được diễn tả một cách ngắn gọn và trong sáng.
Tại sao nên sử dụng Functional Programming?
Việc hiểu rõ được Functional Programming thường là một trong những bước phát triển quan trọng nhất trong sự nghiệp lập trình của bạn, và đôi khi cũng là bước khó khăn nhất.
- Nguyên tắc thứ nhất trong Functional Programming là: cái nào đã khai báo một lần thì mãi mãi như vậy, không bao giờ thay đổi nữa. Các biến hoặc đối tượng trong kịch bản Functional Programming nếu có thì phải immutable.
- Với Pure Function, cung cấp sự tự tin không thay đổi mọi thứ bên ngoài phạm vi của nó. Đây là nguyên tắc thứ hai trong Functional Programming: tất cả các hàm đều phải là pure function, sẽ không bị side effect ( kết quả trả về bị ảnh hưởng bởi tác nhân bên ngoài hàm). Nó sẽ không đọc, nhận bất kỳ cái gì nào ở bên ngoài hàm hoặc ghi bất kỳ cái gì ở bên ngoài hàm.
- Dễ kiểm tra, bởi vì nó không phụ thuộc vào trạng thái của ứng dụng và xác minh kết quả cũng sẽ dễ dàng.
- Nó làm cho code dễ đọc dễ hiểu hơn.
Functional Programming có nhược điểm gì?
- Để viết một Pure Function đứng một mình thì đơn giản, nhưng khi kết hợp chúng vào một chương trình lớn thì rất khó: Tất cả các hàm phải tuân theo pattern giống nhau, nếu không lỗi rất dễ xảy ra.
- FP đi kèm với các khái niệm về toán học nâng cao: đây sẽ là lý do gây nản lòng khi bạn học nó.
- Bắt đầu với functional programming, chúng ta phải làm quen và nắm vững recursive (đệ quy), thay vì for, while sử dụng phổ biếng trong OOP. Chính vì thế việc tối ưu bộ nhớ khi sử dụng đệ quy là điểm cần lưu ý. Nhưng điều này có thể giảm đáng kể bằng cách sử dụng tail recursion.