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)) # AdultVớ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)) # PassVì 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)) # 7Bạ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.
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ề:
Positivenếu số đó lớn hơn0Zeronếu số đó bằng0Negativenếu số đó nhỏ hơn0
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à:
PositiveTự 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ả
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
1Chuyên sâu về chuỗi
Các phương thức của chuỗiTìm kiếm trong chuỗiThay thế và xóa khoảng trắngTách và nốiÔn tập: Kiểm tra tên người dùng7Kiểu liệt kê
Kiểu liệt kê là gì?Định nghĩa kiểu liệt kêCác giá trị của kiểu liệt kêKiểu liệt kê trong matchÔn tập: đèn giao thông10Hàm nâng cao
Trả về nhiều giá trịHàm lambda phần 1Hàm lambda phần 2Ôn tập: sắp xếp bằng lambdaHàm đệ quy phần 1Hàm đệ quy phần 2Ôn tập: tính tổng mảng lồng nhau13Hệ thống quản lý hàng tồn kho
Tổng quan dự ánThêm mặt hàng2Ra quyết định nâng cao
So khớp với biếnĐiều kiện bảo vệ trong so khớpMẫu mảngMẫu từ điểnKiểm tra thành viênÔn tập: Bộ phân tích lệnh5Ứng dụng sổ liên lạc
Hiển thị menuThêm liên hệ8Trình quản lý hồ sơ học sinh
Tổng quan dự ánThêm học sinh3Mảng nhiều chiều
Cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập: mảng 2 chiềuMảng răng cưaCác mẫu phổ biến với mảng 2 chiềuÔn tập: bàn cờ6Tập hợp với từ điển
Tập hợp là gì?Từ điển như một tập hợpThêm và xóaHợp và giaoHiệu tập hợpÔn tập: Xóa phần tử trùng lặp9Tổng hợp dữ liệu nâng cao
Tính tổng các giá trịTìm giá trị nhỏ nhất và lớn nhấtSắp xếp tùy chỉnhÔn tập: Sắp xếp từ điểnTự luyện tập: Trình biên dịch GDScript online