Hàm ẩn danh
Bài học 9 trên 19 trong khóa học Hàm và con trỏ trong Go của Coddy.
Chúng ta đã học cách định nghĩa một hàm có tên, và khi cần gọi hàm, chúng ta dùng tên đó. Tuy nhiên, còn có một loại hàm không có tên, gọi là hàm ẩn danh.
Hàm này hoạt động giống như một hàm đơn giản, nhưng có một số điểm khác biệt. Những hàm này cho phép chúng ta định nghĩa hành động trực tiếp mà không cần định nghĩa hàm ở nơi khác.
Hãy xem ví dụ về cách định nghĩa hàm ẩn danh:
b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))Ở đây, chúng ta định nghĩa một biến b lưu trữ một hàm ẩn danh thực hiện phép trừ. Khi gọi hàm, chúng ta chỉ cần dùng tên biến b(100, 50).
Chúng ta cũng có thể nhận một hàm ẩn danh làm kết quả từ một hàm khác. Ví dụ:
func operation(a int) func(int) int {
if a == 1 {
return func(a int) int { return a + 10 }
} else {
return func(a int) int { return a * 10 }
}
}
func main() {
b := operation(1)
fmt.Println(b(14))
}Ở đây, chúng ta định nghĩa một hàm thông thường có tên operation, và kết quả trả về sẽ là một hàm ẩn danh <strong>func(int) int</strong> thay vì một giá trị đơn giản.
Chúng ta gán giá trị trả về cho biến b. Vì chúng ta truyền 1 làm tham số cho hàm operation, khối lệnh được thực thi sẽ là khối này:
return func(a int) int { return a + 10 }Bây giờ, khi gọi hàm ẩn danh b, chúng ta cần truyền một giá trị số nguyên, chẳng hạn như 14.
Kết quả sẽ là:
24Đây là phép tính a + 10, trong đó chúng ta truyền a có giá trị là 14(<strong>b(14)</strong>).
Thử thách
DễViết một hàm ẩn danh nhận ba đối số số nguyên.
Nếu đối số đầu tiên lớn hơn đối số cuối cùng, hãy trả về tổng của tất cả các đối số. Nếu không, hãy trả về tích của đối số đầu tiên và đối số cuối cùng.
Lưu kết quả của hàm vào một biến có tên result.
Tự làm thử
package main
import "fmt"
func main() {
// Định nghĩa hàm (function) ẩn danh và gán cho biến tên là "result".
// In kết quả ra. Đừng thay đổi dòng này!
fmt.Println("Result:", result(2, 3, 4))
fmt.Println("Result:", result(8, 3, 4))
}
Tất cả bài học trong Hàm và con trỏ trong Go
1Giới thiệu
Giới thiệu4Ôn tập các hàm xử lý chuỗi trong Go
Chuỗi trong GolangHàm nốiHàm kiểm tra chuỗi conHàm tìm chỉ sốThử thách ôn tập #1Tự luyện tập: Trình biên dịch Go online