Menu
CoddyTech

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 / players

Trong 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.

challenge icon

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:

  1. Nếu text không phải là số nguyên, trả về Input must be a number!
  2. Nếu số đó là 0, trả về Cannot divide by zero!
  3. Nếu không, chia 100.0 cho 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
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