Hướng dẫn pure function python - chức năng thuần túy python
Nội dung của bài Show
Lập trình hàm( functional programming ) là gì?Trong khoa học máy tính, lập trình hàm là một mô hình lập trình trong đó các chương trình được xây dựng bằng cách sử dụng các hàm để biểu diễn mối quan hệ giữa các đối tượng giống như trong toán học. Với ý tưởng sử dụng hàm như là một tham số của hàm khác, và hàm cũng là giá trị được trả về.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 lập trình hàm( functional programming )
Lập trình hàm ( functional programming) trong PythonKhông cần phải sử dụng thư viện nào chúng ta cũng có thể triển khai lập trình hàm với ngôn ngữ python. Pure FunctionsPure Function là một hàm mà với một input chúng ta luôn luôn có 1 output duy nhất. Giá trị của Input không bị thay đổi hay phụ thuộc vào biến khác ở ngoài hàm. Điều này giúp cho hàm của chúng ta dễ test hơn. Chúng ta cùng xem ví dụ sau đây:
sau lời gọi hàm danh sách original_numbers không thay đổi. Chúng ta cũng không tham chiếu đến bất kỳ biến nào khác nằm ngoài phạm vi của hàm. Đây chính là một Pure Function. ImmutabilityHiểu một cách đơn giản thì Immutability là bất biến là không có khả năng thay đổi. Hẳn bạn đã từng làm gặp trường hợp giá trị một biến ban đầu được khai báo là 100, nhưng sau một dòng code thì giá trị đó đã được thanh đổi thành None chẳng hạn. Điều này khiến chúng ta khó kiểm soát chương trình và có thể gây ra lỗi. Hãy cùng xem ví dụ dưới đây:
Dòng code: immutable_collection[1] = 15 sẽ gây ra lỗi: TypeError: ‘tuple’ object does not support item assignment.Vì kiểu dữ liệu tuple là không thể thay đổi, các bạn có thể đọc thêm bài viết kiểu dữ liệu tuple. Một điều thú ví là, chúng ta không thể thay đổi giá trị của tuple nhưng lại có thể thay đổi giá trị của phần tử bên trong nó. Đó là lý do vì sao mình lại lấy ví dụ về giá trị ban đầu của immutable_collection = (‘Uncle Bob’, 10, [50, 100]). Giờ tao có thể thay đổi danh sách (list) [50, 100] trong tuple immutable_collection thành [50, 100, 150]:
Lý do chúng ta có thể thực hiện điều trên vì list là một mutable object. Bây giờ chúng ta thử thay đổi giá trị của danh sách trong tuple immutable_collection thành giá trị ban đầu [50, 100] bằng cách:
Dòng lệnh trên sẽ gây ra lỗi: TypeError: ‘tuple’ object does not support item assignment. Lý do là chúng ta không thể tham chiếu đến một mutable object khác đã được lưu trữ trong bộ nhớ. Higher Order FunctionsHigher Order Functions là một function có đầu vào là một hàm hoặc đầu ra cũng là một hàm. Hãy xem ví dụ dưới đây:
Giả sử bây giờ chúng ta muốn thêm một phương thức dùng log thay cho hàm print, chúng ta có thể viết một hàm mới hoặc dùng Higher Order Functions:
Chúng ta tìm hiểu thêm một ví dụ một Higher Order Function có đầu ra là một hàm.
Higher Order Functions giúp code của chúng ta linh hoạt hơn. Với tính trừu tượng do việc có thể sử dụng hàm khác là đầu vào hoặc đầu ra giúp chúng ta dễ đàng kiểm soát hành vi của chương trình. Kết luậnFunctional Programming khá khó tiếp nhận, và áp dụng thuần thục. Hãy cùng nhau tìm hiểu ở phần 2 nhé. |