Mệnh đề bảo vệ
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 68 trên 78.
Khi một hàm cần kiểm tra nhiều điều kiện, việc lồng một if bên trong một if khác khiến phần xử lý chính ngày càng thụt sâu hơn:
func buy(gold: int, price: int) -> String:
if price > 0:
if gold >= price:
return "Bought! %d gold left" % (gold - price)
else:
return "Not enough gold"
else:
return "Invalid price"Mệnh đề bảo vệ (guard clause) đảo ngược cách làm này. Nó kiểm tra một trường hợp không hợp lệ ở đầu hàm và thoát ngay bằng return. Phần code sau các mệnh đề bảo vệ chỉ chạy khi các giá trị hợp lệ, và không cần lồng nhau:
func buy(gold: int, price: int) -> String:
if price <= 0:
return "Invalid price"
if gold < price:
return "Not enough gold"
return "Bought! %d gold left" % (gold - price)buy(50, 30) trả về Bought! 20 gold left, buy(10, 30) trả về Not enough gold và buy(50, 0) trả về Invalid price.
Thứ tự của các điều kiện bảo vệ rất quan trọng: điều kiện bảo vệ một dòng phải đứng trước dòng đó. Kiểm tra văn bản bằng is_valid_int() trước khi dùng số, và kiểm tra xem số có bằng 0 không trước khi chia:
func share(coins: int, players: int) -> int:
if players <= 0:
return 0
return coins / playersTrong một hàm -> void, câu lệnh bảo vệ là return đứng riêng. Bên trong vòng lặp, continue hoạt động như một câu lệnh bảo vệ cho một phần tử: nó bỏ qua phần tử không hợp lệ rồi vòng lặp tiếp tục với phần tử tiếp theo.
Thử thách
DễViết hàm process_data. Hàm nhận một chuỗi text và trả về một chuỗi:
- Nếu
textkhông phải là số nguyên, trả vềInput must be a number! - Nếu số đó là
0, trả vềCannot divide by zero! - Nếu không, chia
100.0cho số đó và trả về kết quả với hai chữ số thập phân
Ví dụ, process_data("8") trả về 12.50, process_data("-5") trả về -20.00 và process_data("abc") trả về Input must be a number!.
Viết hai bước kiểm tra dưới dạng mệnh đề bảo vệ ở đầu hàm.
Tự làm thử
func process_data(text: String):
# Viết code ở đây
pass
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ển12Xử lý lỗi cơ bản
Xử lý lỗi là gì?Xác thực đầu vàoMệnh đề bảo vệTrả về mã lỗiÔn tập: phép chia an toànTự luyện tập: Trình biên dịch GDScript online