Functional Programming là gì? Những điều bạn cần biết về khái niệm này

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.

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.

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" (Nguồn: Unsplash).
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” (Nguồn: Unsplash).

Đặ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ả.

Ví dụ về Functional Programming trong Python.
Ví dụ về Functional Programming trong Python.

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.
Nhìn chung, Functional Programming có khá nhiều ưu điểm (Nguồn: Unsplash).
Nhìn chung, Functional Programming có khá nhiều ưu điểm (Nguồn: Unsplash).

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.

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

Son Phuoc
Son Phuoc
January 28, 2021
0
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
4 khóa học lập trình hướng đối tượng miễn phí cho người mới

4 khóa học lập trình hướng đối tượng miễn phí cho người mới

Nếu bạn muốn theo nghề IT thì sớm muộn cũng phải học lập trình hướng đối tượng. Đây là một kiến thức cơ bản, bắt buộc phải biết. Bài viết sẽ chia sẻ với bạn 4 khóa học miễn phí, phù hợp với người mới bắt đầu. Mục lục1. Học lập trình hướng đối tượng […]
Phương pháp lập trình hướng đối tượng và các ưu, nhược điểm

Phương pháp lập trình hướng đối tượng và các ưu, nhược điểm

Từ lâu phương pháp lập trình hướng đối tượng đã không còn xa lạ với các lập trình viên. Bài viết sẽ chia sẻ với các bạn một số ưu điểm và nhược điểm của phương pháp này. Mục lục1. Phương pháp lập trình hướng đối tượng là gì?2. Ưu điểm của phương pháp lập […]
4 khái niệm bạn phải biết khi lập trình hướng đối tượng

4 khái niệm bạn phải biết khi lập trình hướng đối tượng

Lập trình hướng đối tượng (Object-oriented programming) là một phương pháp quen thuộc đối với các chuyên gia phát triển phần mềm. Sau đây là 4 khái niệm bạn bắt buộc phải biết để hiểu về lập trình hướng đối tượng. Mục lục1. Class (Lớp)2. Objects (Đối tượng)3. Attributes (Thuộc tính)4. Methods (Phương thức) 1. […]
Callback Function là gì? Tổng quan về Callback Function

Callback Function là gì? Tổng quan về Callback Function

Nếu bạn đã học lập trình, chắc hẳn bạn biết thế nào là function. Nhưng bạn đã nghe đến Callback Function bao giờ chưa? Callback Function là một phần quan trọng của JavaScript. Một khi bạn hiểu rõ về , bạn sẽ thành thạo JavaScript hơn rất nhiều.  Mục lục1. Callback Function là gì?2. Tại […]
Softmax Function là gì? Tổng quan về Softmax Function

Softmax Function là gì? Tổng quan về Softmax Function

Softmax Function là một khái niệm toán học. Nó được sử dụng phổ biến trong lĩnh vực công nghệ thông tin, cụ thể là Machine Learning (Học máy). Hãy cùng Got It tìm hiểu về Softmax Function nhé. Mục lục1. Khái niệm Softmax Function2. Lịch sử hàm Softmax3. Tính chất của hàm Softmax4. Lợi ích […]
Bài tập lập trình hướng đối tượng cơ bản, nâng cao

Bài tập lập trình hướng đối tượng cơ bản, nâng cao

Đọc về Object-Oriented Programming (OOP) thôi là chưa đủ, quan trọng là bạn phải thực hành. Làm các bài tập lập trình hướng đối tượng sẽ giúp bạn nắm chắc hơn về OOP. Dưới đây là một số bài tập OOP Got It đã tổng hợp được. Hãy cùng làm để thành thạo lập trình […]