守卫子句
本课属于 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 可以作为针对单个元素的守卫语句:它会跳过无效元素,然后循环继续处理下一个元素。
挑战
简单编写函数 process_data。它接收一个字符串 text,并返回一个字符串:
- 如果
text不是整数,返回Input must be a number! - 如果数字是
0,返回Cannot divide by zero! - 否则,将
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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器