Menu
CoddyTech

Hàm lambda phần 2

Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 55 trên 78.

Một hàm lambda trên một dòng có thể chọn kết quả bằng toán tử ba ngôi, value_if_true if condition else value_if_false:

var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # Adult

Với hơn hai trường hợp, hãy nối thêm một biểu thức điều kiện ba ngôi sau else, hoặc viết hàm lambda thành một khối lệnh với if và elif:

var grade = func(score):
	if score == 100:
		return "Perfect"
	elif score >= 60:
		return "Pass"
	return "Fail"
print(grade.call(75)) # Pass

Vì lambda là một giá trị, bạn có thể truyền nó vào một hàm. Khai báo tham số với kiểu Callable rồi gọi hàm đó bằng call():

func apply_twice(fn: Callable, value):
	return fn.call(fn.call(value))
print(apply_twice(func(n): return n + 3, 1)) # 7

Bạn có thể truyền hàm có tên theo cách tương tự: viết tên hàm mà không có dấu ngoặc đơn, như trong apply_twice(double, 5).

Các phương thức tích hợp sẵn cũng nhận hàm. sort_custom() sắp xếp một mảng bằng một hàm lambda nhận hai phần tử và trả về true khi phần tử thứ nhất cần đứng trước:

var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]

Hàm lambda có thể đọc các biến cục bộ xung quanh nó, nhưng sao chép giá trị của chúng khi được tạo. Nếu bạn thay đổi biến đó sau này, thay đổi sẽ không ảnh hưởng đến hàm lambda, và việc gán giá trị cho biến bên trong hàm lambda cũng không làm thay đổi biến bên ngoài.

challenge icon

Thử thách

Dễ

Chương trình đọc một số nguyên. Tạo một hàm lambda và lưu hàm đó vào biến có tên categorize_number. Hàm nhận một số và trả về:

  • Positive nếu số đó lớn hơn 0
  • Zero nếu số đó bằng 0
  • Negative nếu số đó nhỏ hơn 0

Gọi hàm với số bạn đã đọc và in ra kết quả. Với đầu vào 10, đầu ra là:

Positive

Tự làm thử

extends Node

func _ready():
	var number := int(OS.read_string_from_stdin())
	# Tạo hàm (function) lambda categorize_number tại đây

	# Gọi hàm với number rồi in ra kết quả
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch GDScript online