Khi mới bước chân vào thế giới lập trình, hẳn ai cũng sẽ thắc mắc Functional Programming là gì? Đây là một khái niệm cơ bản, mà bất kỳ lập trình viên nào cũng phải biết. Bài viết sẽ trình bày rõ hơn về khái niệm này.
Mục lục
Tổng quan về Functional Programming
Functional Programming là gì?
Functional Programming nghĩa là “lập trình hàm” hay còn được gọi là “lập trình chức năng”. Đây là một phương pháp xây dựng phần mềm bằng cách tạo ra các chức năng, dựa trên các hàm toán học.
Phương pháp này thường được đem ra so sánh với Lập trình hướng đối tượng (Object-oriented programming – viết tắt là OOP). Nó bỏ qua những tư duy phổ biến của OOP như trạng thái chia sẻ, hay dữ liệu thay đổi được.
Functional Programming sử dụng các các biểu thức và khai báo thay vì thực thi các câu lệnh. Chính vì vậy, cách lập trình này hoàn toàn khác với các thủ tục khác thường dựa vào những trạng thái cục bộ hoặc toàn cục. Giá trị đầu ra của Functional Programming chỉ phụ thuộc vào các tham số được truyền cho hàm.
Một số ngôn ngữ Functional Programming nổi bật bao gồm: Haskell, SML, Clojure, Scala, Erlang, Clean, F#, Mathematica,… Một số ngôn ngữ nổi tiếng khác như JavaScript hay Python cho phép người dùng tùy chọn. Bạn vừa có thể sử dụng OOP hoặc phương pháp lập trình hàm, tùy vào mục đích của mình.
Đặc điểm của Functional Programming
Nhìn chung, Functional Programming có những đặc điểm cơ bản như sau:
- Đây là phương pháp lập trình chú trọng kết quả, chứ không phải quá trình.
- Nó nhấn mạnh vào những gì sẽ được tính toán.
- Dữ liệu là bất biến, không thể thay đổi.
- Phương pháp này biến các vấn đề cần giải quyết thành những chức năng.
- Nó được xây dựng dựa trên khái niệm về các hàm toán học. Cụ thể, nó sử dụng các biểu thức điều kiện và đệ quy để thực hiện phép tính.
- Nó không hỗ trợ việc lặp lại, như các câu lệnh lặp và câu lệnh điều kiện If-Else.
Lịch sử của Functional Programming
- Nền tảng cho Functional Programming là Phép tính Lambda. Nó được phát triển từ những năm 1930 cho ứng dụng hàm, định nghĩa và đệ quy.
- Đến năm 1960, McCarthy thiết kế ra ngôn ngữ Functional Programming đầu tiên và đặt tên là LISP.
- Cuối những năm 1970, các nhà nghiên cứu tại Đại học Edinburgh đã tạo ra một ngôn ngữ lập trình hàm mang tên ML (Meta Language).
- Vào đầu những năm 1980, ngôn ngữ Hope bổ sung thêm các kiểu dữ liệu đại số dùng cho phép tính đệ quy và phương trình.
- Năm 2004, ngôn ngữ Scala xuất hiện. Đây được xem là một trong những bước tiến của Functional Programming.
Minh họa về Functional Programming
Sau đây là một ví dụ minh họa về Functional Programming được viết theo ngôn ngữ lập trình Python. Chúng ta sẽ tạo ra một hàm có tên là “multiply_2_pure” với mục đích nhân các số đầu vào với 2 và trả kết quả.
Chúng ta thấy rằng, danh sách các số ban đầu không đổi và hàm cũng không tham chiếu đến bất kỳ một biến nào khác ở ngoài phạm vi của hàm. Trường hợp trên trong Python được gọi là Pure Functions (Hàm thuần túy). Nghĩa là nội dung hàm sẽ không thay đổi giá trị của đầu vào hoặc bất kỳ dữ liệu nào tồn tại bên ngoài phạm vi của hàm.
Cách viết code này hoàn toàn khác với OOP vì không sử dụng bất kỳ đối tượng (object) hoặc phương thức (method) nào. Điều này khiến cho hàm viết ra dễ được test hơn rất nhiều. Lý do là vì bản chất nó không thay đổi bất kỳ một biến nào trong suốt quá trình chạy. Người dùng sẽ nhận luôn được cùng một đầu ra mỗi khi chạy hàm cùng một đầu vào.
Ưu điểm và hạn chế của Functional Programming
Ưu điểm
Nhìn chung, Functional Programming có khá nhiều ưu điểm. Cụ thể như sau:
- Nó cho phép bạn tránh được các vấn đề khó hiểu và lỗi trong mã.
- Người dùng dễ dàng thực hiện kiểm thử nói chung, đặc biệt là kiểm thử đơn vị (Unit testing) và gỡ lỗi mã (debug).
- Ứng dụng xử lý song song và đồng thời.
- Hỗ trợ triển khai mã nóng và khả năng chịu lỗi tốt.
- Cung cấp mô-đun tốt hơn đối với những đoạn mã ngắn.
- Tăng hiệu suất cho nhà phát triển.
- Hỗ trợ các hàm lồng nhau.
- Hỗ trợ các cấu trúc dữ liệu hàm như Lazy Map (Bản đồ lười), Danh sách (List),…
- Cho phép sử dụng hiệu quả Phép tính Lambda.
Hạn chế
Bên cạnh những ưu điểm nêu trên, Functional Programming có một số hạn chế như sau:
- Mô hình Functional Programming không dễ nên rất khó hiểu đối với người mới bắt đầu.
- Functional Programming khó bảo trì vì có nhiều đối tượng phát triển trong quá trình viết mã.
- Yêu cầu nhiều ở quá trình bắt chước (mocking) và khởi tạo môi trường.
- Việc tái sử dụng mã rất phức tạp và cần cấu trúc lại mã liên tục.
- Các đối tượng có thể không đại diện chính xác cho vấn đề cần xử lý.
Tóm lại, Functional Programming là một phương pháp lập trình có nhiều điểm thú vị. Tùy thuộc vào mục đích và nhu cầu khác nhau, người dùng có thể lựa chọn những phương pháp phù hợp để xây dựng phần mềm cho mình. Hy vọng qua bài viết này, bạn đã hiểu rõ Functional Programming là gì, cũng như những nội dung liên quan đến nó.
Tham khảo: Guru99.com.