Các First class objects (đối tượng hạng nhất) trong một ngôn ngữ lập trình là những thành phần được xử lý thông suốt một cách nhất quán. Chúng có thể được lưu trữ trong các cấu trúc dữ liệu, được truyền làm đối số cho hàm, hoặc được sử dụng trong các cấu trúc điều khiển (control structures). Một ngôn ngữ lập trình được cho là có hỗ trợ các first-class functios (hàm hạng nhất) nếu nó có khả năng coi các hàm như các các first-class objects (đối tượng hạng nhất). Và  ngôn ngữ lập trình Python thì có hỗ trợ khái niệm First Class functions.

Các tính chất của hàm hạng nhất trong Python:

– Một hàm là một thể hiện (instance) của một kiểu dữ liệu Đối tượng

– Bạn có thể lưu giữ một hàm bên trong một biến.

– Bạn có thể truyền một hàm vào làm tham số cho một hàm khác.

– Bạn có thể trả về một hàm từ một hàm cụ thể.

– Bạn có thể lưu trữ các hàm bên trong các cấu trúc dữ liệu như hash table (bảng băm), list (danh sách), v.v…

Sau đây sẽ là các ví dụ về First Class functions – hàm hạng nhất trong Python

1. Các hàm là đối tượng

Các hàm bên trong ngôn ngữ lập trình Python đều là các first class objects – các đối tượng hạng nhất. Trong ví dụ bên dưới đấy, chúng ta sẽ gán hàm cho một biến. Việc gán này sẽ không gọi đến hàm. Nó nhận vào đối tượng hàm (function object) được tham chiếu tới bởi shout và tạo ra một cái tên thứ hai để trỏ đến đối tượng hàm đó, cái tên thứ hai đó là yell, biến yell.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------


# Python program to illustrate functions 
# can be treated as objects 
def shout(text): 
    return text.upper() 
  
print shout('Hello') 
  
yell = shout 
  
print yell('Hello') 

Kết quả in ra là:

HELLO
HELLO

2. Các hàm có thể được truyền vào làm đối số cho hàm khác

Bởi vì các hàm đều là đối tượng nên chúng ta có thể truyền chúng làm đối số cho các hàm khác. Các hàm mà có thể chấp nhận các hàm khác làm đối số truyền vào cho mình thì được gọi là các higher-order functions tức là các hàm bậc cao. Trong ví dụ bên dưới đây, chúng ta tạo ra hàm greet, và hàm này nhận vào một hàm khác làm đối số.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------


# Python program to illustrate functions 
# can be passed as arguments to other functions 
def shout(text): 
    return text.upper() 
  
def whisper(text): 
    return text.lower() 
  
def greet(func): 
    # storing the function in a variable 
    greeting = func("Hi, I am created by a function passed as an argument.") 
    print greeting  
  
greet(shout) 
greet(whisper) 

Kết quả in ra là:

HI, I AM CREATED BY A FUNCTION PASSED AS AN ARGUMENT.
hi, i am created by a function passed as an argument.

3. Các hàm có thể trả về một hàm khác:

Bởi vì trong Python các hàm đều là các đối tượng nên chúng ta có thể trả về một hàm từ một hàm khác. Trong ví dụ bên dưới đây, hàm create_adder sẽ trả về hàm adder.


# Python program to illustrate functions 
# Functions can return another function 
  
def create_adder(x): 
    def adder(y): 
        return x+y 
  
    return adder 
  
add_15 = create_adder(15) 
  
print add_15(10) 

Kết quả in ra là:

25

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!