Menu
CoddyTech

守卫子句

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 68 课,共 78 课。

当一个函数需要进行多项检查时,把一个 if 嵌套在另一个 if 中,会让实际要执行的操作一层比一层更深:

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"

保护子句会扭转这种情况。它会在函数开头检查一种无效情况,并立即通过 return 返回。保护子句之后的代码只会在值有效时运行,而且不需要嵌套:

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) 返回 Bought! 20 gold left,buy(10, 30) 返回 Not enough gold,而 buy(50, 0) 返回 Invalid price。

保护条件的顺序很重要:保护某一行代码的条件必须放在它前面。使用这个数字之前,先用 is_valid_int() 检查文本;进行除法之前,先检查是否为 0:

func share(coins: int, players: int) -> int:
	if players <= 0:
		return 0
	return coins / players

在 -> void 函数中,守卫语句是单独使用的 return。在循环中,continue 可以作为针对单个元素的守卫语句:它会跳过无效元素,然后循环继续处理下一个元素。

challenge icon

挑战

简单

编写函数 process_data。它接收一个字符串 text,并返回一个字符串:

  1. 如果 text 不是整数,返回 Input must be a number!
  2. 如果数字是 0,返回 Cannot divide by zero!
  3. 否则,将 100.0 除以该数字,并返回保留两位小数的结果

例如,process_data("8") 返回 12.50,process_data("-5") 返回 -20.00,而 process_data("abc") 返回 Input must be a number!。

将这两个检查作为守卫子句,写在函数开头。

亲手试试

func process_data(text: String):
	# 在这里写代码
	pass
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器