Lập trình chức năng là gì? Hướng dẫn với ví dụ
Lập trình chức năng là gì?
Lập trình hàm (còn gọi là FP) là một cách suy nghĩ về xây dựng phần mềm bằng cách tạo ra các hàm thuần túy. Nó tránh các khái niệm về trạng thái chia sẻ, dữ liệu có thể thay đổi được quan sát trong Lập trình hướng đối tượng.
Ngôn ngữ chức năng tập trung vào các biểu thức và khai báo hơn là thực thi các câu lệnh. Do đó, không giống như các thủ tục khác phụ thuộc vào trạng thái cục bộ hoặc toàn cục, giá trị đầu ra trong FP chỉ phụ thuộc vào các đối số được truyền cho hàm.
Đặc điểm của lập trình chức năng
- Phương pháp lập trình chức năng tập trung vào kết quả chứ không phải quá trình
- Nhấn mạnh vào những gì cần tính toán
- Dữ liệu là bất biến
- Lập trình chức năng Phân tích vấn đề thành 'hàm
- Nó được xây dựng trên khái niệm về các hàm toán học 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ợ phép lặp như các câu lệnh vòng lặp và các câu lệnh có điều kiện như If-Else
Lịch sử lập trình hàm
- Nền tảng của Lập trình hàm là Lambda Calculus. Nó được phát triển vào những năm 1930 cho ứng dụng hàm, định nghĩa và đệ quy
- LISP là ngôn ngữ lập trình chức năng đầu tiên. McCarthy đã thiết kế nó vào năm 1960
- Vào cuối những năm 70, các nhà nghiên cứu tại Đại học Edinburgh đã định nghĩa ML (Siêu ngôn ngữ)
- Vào đầu những năm 80, ngôn ngữ Hope bổ sung thêm các kiểu dữ liệu đại số cho đệ quy và suy luận phương trình
- Năm 2004, đổi mới ngôn ngữ chức năng 'Scala.'
Ngôn ngữ lập trình chức năng
Mục tiêu của bất kỳ ngôn ngữ FP nào là bắt chước các hàm toán học. Tuy nhiên, quá trình tính toán cơ bản trong lập trình hàm lại khác.
Dưới đây là một số ngôn ngữ lập trình hàm nổi bật nhất:
- Haskell
- SML
- Clojure
- Scala
- nhị lang
- Làm sạch
- F#
- ML/OCaml Lisp / Lược đồ
- XSLT
- SQL
- Toán học
Thuật ngữ lập trình hàm cơ bản và Concepts
Dữ liệu bất biến
Dữ liệu bất biến có nghĩa là bạn có thể dễ dàng tạo cấu trúc dữ liệu thay vì sửa đổi cấu trúc dữ liệu đã tồn tại.
Tính minh bạch tham chiếu
Các chương trình chức năng sẽ thực hiện các thao tác giống như lần đầu tiên. Vì vậy, bạn sẽ biết điều gì có thể xảy ra hoặc không xảy ra trong quá trình thực thi chương trình cũng như các tác dụng phụ của nó. Trong thuật ngữ FP, nó được gọi là tính minh bạch tham chiếu.
Mô đun
Thiết kế mô-đun tăng năng suất. Các mô-đun nhỏ có thể được mã hóa nhanh chóng và có cơ hội sử dụng lại cao hơn, điều này chắc chắn sẽ dẫn đến việc phát triển chương trình nhanh hơn. Ngoài ra, các mô-đun có thể được kiểm tra riêng biệt, giúp bạn giảm thời gian dành cho việc kiểm tra và gỡ lỗi đơn vị.
Khả năng bảo trì
Khả năng bảo trì là một thuật ngữ đơn giản, có nghĩa là lập trình FP dễ bảo trì hơn vì bạn không cần lo lắng về việc vô tình thay đổi bất kỳ thứ gì bên ngoài chức năng đã cho.
Chức năng hạng nhất
'Hàm hạng nhất' là một định nghĩa, được quy cho các thực thể ngôn ngữ lập trình không có hạn chế về việc sử dụng chúng. Do đó, các hàm hạng nhất có thể xuất hiện ở bất kỳ đâu trong chương trình.
Đóng cửa
Bao đóng là một hàm bên trong có thể truy cập các biến của hàm cha, ngay cả sau khi hàm cha đã thực thi.
Các hàm bậc cao hơn
Các hàm bậc cao hơn lấy các hàm khác làm đối số hoặc trả về chúng dưới dạng kết quả.
Các hàm bậc cao hơn cho phép ứng dụng một phần hoặc cà ri. Kỹ thuật này áp dụng lần lượt một hàm cho các đối số của nó, vì mỗi ứng dụng sẽ trả về một hàm mới chấp nhận đối số tiếp theo.
Hàm thuần túy
'Hàm thuần túy' là hàm có đầu vào được khai báo là đầu vào và không có hàm nào bị ẩn. Các đầu ra cũng được khai báo là đầu ra.
Các hàm thuần túy hoạt động trên các tham số của chúng. Sẽ không hiệu quả nếu không trả lại bất cứ thứ gì. Hơn nữa, nó cung cấp cùng một đầu ra cho các tham số đã cho
Ví dụ:
Function Pure(a,b) { return a+b; }
Hàm không tinh khiết
Bất tịnh có chức năng hoàn toàn trái ngược với thuần khiết. Chúng có đầu vào hoặc đầu ra ẩn; nó được gọi là bất tịnh. Các hàm không tinh khiết không thể được sử dụng hoặc kiểm tra một cách độc lập vì chúng có sự phụ thuộc.
Ví dụ
int z; function notPure(){ z = z+10; }
Thành phần chức năng
Tổ hợp chức năng là việc kết hợp 2 hoặc nhiều chức năng để tạo thành một chức năng mới.
Các bang được chia sẻ
Trạng thái chia sẻ là một khái niệm quan trọng trong lập trình OOP. Về cơ bản, đó là thêm thuộc tính cho đối tượng. Ví dụ: nếu HardDisk là Đối tượng, Dung lượng lưu trữ và Kích thước đĩa có thể được thêm làm thuộc tính.
Tác dụng phụ
Tác dụng phụ là bất kỳ thay đổi trạng thái nào xảy ra bên ngoài hàm được gọi. Mục tiêu lớn nhất của bất kỳ ngôn ngữ lập trình FP nào là giảm thiểu các tác dụng phụ bằng cách tách chúng ra khỏi phần còn lại của mã phần mềm. Trong lập trình FP, điều quan trọng là phải loại bỏ các tác dụng phụ khỏi phần còn lại của logic lập trình của bạn.
Lợi ích của lập trình chức năng
- Cho phép bạn tránh các vấn đề và lỗi khó hiểu trong mã
- Dễ dàng hơn để kiểm tra và thực thi Kiểm tra đơn vị và gỡ lỗi Mã FP.
- Xử lý song song và đồng thời
- Triển khai mã nóng và khả năng chịu lỗi
- Cung cấp tính mô-đun tốt hơn với mã ngắn hơn
- Tăng năng suất của nhà phát triển
- Hỗ trợ các hàm lồng nhau
- Các cấu trúc chức năng như Bản đồ & Danh sách lười biếng, v.v.
- Cho phép sử dụng hiệu quả Phép tính Lambda
Hạn chế của lập trình chức năng
- Mô hình lập trình hàm không dễ nên khó hiểu đối với người mới bắt đầu
- Khó duy trì vì nhiều đối tượng phát triển trong quá trình mã hóa
- Cần nhiều chế nhạo và thiết lập môi trường rộng rãi
- Việc sử dụng lại rất phức tạp và cần phải tái cấu trúc liên tục
- Các đối tượng có thể không thể hiện chính xác vấn đề
Lập trình chức năng so với lập trình hướng đối tượng
Lập trình chức năng | OOP |
---|---|
FP sử dụng dữ liệu bất biến. | OOP sử dụng dữ liệu có thể thay đổi. |
Tuân theo mô hình dựa trên lập trình khai báo. | Tuân theo mô hình lập trình mệnh lệnh. |
Điều nó tập trung vào là: “Những gì bạn đang làm. trong chương trình.” | Điều nó tập trung vào là “Cách bạn thực hiện chương trình của mình”. |
Hỗ trợ lập trình song song. | Không hỗ trợ lập trình song song. |
Chức năng của nó không có tác dụng phụ. | Phương pháp có thể gây ra nhiều tác dụng phụ. |
Kiểm soát luồng được thực hiện bằng cách sử dụng lệnh gọi hàm và lệnh gọi hàm bằng đệ quy. | Quá trình điều khiển luồng được thực hiện bằng cách sử dụng các vòng lặp và câu lệnh điều kiện. |
Thứ tự thực hiện các câu lệnh không quan trọng lắm. | Thứ tự thực hiện các câu lệnh là quan trọng. |
Hỗ trợ cả “trừu tượng hóa dữ liệu” và “trừu tượng hóa hành vi”. | Chỉ hỗ trợ “trừu tượng hóa dữ liệu”. |
Kết luận
- Lập trình chức năng hay FP là một cách suy nghĩ về xây dựng phần mềm dựa trên một số nguyên tắc xác định cơ bản
- Khái niệm lập trình chức năng tập trung vào kết quả chứ không phải quá trình
- Mục tiêu của bất kỳ ngôn ngữ FP nào là bắt chước các hàm toán học
- Một số ngôn ngữ lập trình hàm nổi bật nhất: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- 'Hàm thuần túy' là hàm có đầu vào được khai báo là đầu vào và không có hàm nào bị ẩn. Các đầu ra cũng được khai báo là đầu ra.
- Dữ liệu bất biến có nghĩa là bạn có thể dễ dàng tạo cấu trúc dữ liệu thay vì sửa đổi cấu trúc dữ liệu đã tồn tại
- Cho phép bạn tránh các vấn đề và lỗi khó hiểu trong mã
- Mã chức năng không dễ dàng nên khó hiểu đối với người mới bắt đầu
- FP sử dụng dữ liệu bất biến trong khi OOP sử dụng dữ liệu có thể thay đổi