我们都知道在GDS中,逻辑判断关键字官方给出了两个:if 和 match(尤其是match,屡试不爽)
但GDS可以逻辑判断的语句有2.5个,咱们就好好讨论一下这0.5个。
如果你有编程经验,你也许听说过“短路运算”,如果没听说过也没关系,我们一起来探讨一下:
(1)啥是短路运算:
你应该知道关键字 or , and , not 吧,这些关键字不仅可以在判断类语句中使用,还可以在声明语句中使用!!!
赋值的结果显而易见,但如果换成这样:
这就不好判断了,这得引入一个概念:
在短路运算中,空数组([])空字典({})null和0都为flase,所以意味着:
这就是短路运算,再在这普及一下优先级问题吧:
not > and >or
(2)好了,步入正题,怎么通过短路运算实现逻辑:
你得明白:GDS中不存在“直接函数捕获”,这意味这什么呢?变量只能捕获返回值:
这个例子中,变量a得到是o()最后return的1
可我们看一下控制台:
你会发现它还输出了 o
这说明:即使在赋值时,函数中return前的语句,例如print("o"),也照样执行
我们就可以利用这个特性“搞出艺术”
(3)请看这样一个例子:
在游戏中,我想判断储存的玩家信息是否存在,如果不存在将赋值为默认:
我们来看一下“最精彩的”var部分是如何运作的:
因为是or,所以运行逻辑是这样的:
先运行get_player_name(),看其返回的值,如果为true就停止运行
(因为即使set_player_name()为flase,整个or返回的还是true,所以没有运行的必要)
但如果get_player_name()返回flase,则or将运行set_player_name()
无论set_player_name()返回什么,a的值如何,都没了意义,因为我们目的达到了。
(至于and就是反过来的or,前面flase则停止,前面true运行后面)
效果:
这就是短路运算逻辑判断。(^_−)☆
但GDS可以逻辑判断的语句有2.5个,咱们就好好讨论一下这0.5个。
如果你有编程经验,你也许听说过“短路运算”,如果没听说过也没关系,我们一起来探讨一下:
(1)啥是短路运算:
你应该知道关键字 or , and , not 吧,这些关键字不仅可以在判断类语句中使用,还可以在声明语句中使用!!!
赋值的结果显而易见,但如果换成这样:
这就不好判断了,这得引入一个概念:
在短路运算中,空数组([])空字典({})null和0都为flase,所以意味着:
这就是短路运算,再在这普及一下优先级问题吧:
not > and >or
(2)好了,步入正题,怎么通过短路运算实现逻辑:
你得明白:GDS中不存在“直接函数捕获”,这意味这什么呢?变量只能捕获返回值:
这个例子中,变量a得到是o()最后return的1
可我们看一下控制台:
你会发现它还输出了 o
这说明:即使在赋值时,函数中return前的语句,例如print("o"),也照样执行
我们就可以利用这个特性“搞出艺术”
(3)请看这样一个例子:
在游戏中,我想判断储存的玩家信息是否存在,如果不存在将赋值为默认:
我们来看一下“最精彩的”var部分是如何运作的:
因为是or,所以运行逻辑是这样的:
先运行get_player_name(),看其返回的值,如果为true就停止运行
(因为即使set_player_name()为flase,整个or返回的还是true,所以没有运行的必要)
但如果get_player_name()返回flase,则or将运行set_player_name()
无论set_player_name()返回什么,a的值如何,都没了意义,因为我们目的达到了。
(至于and就是反过来的or,前面flase则停止,前面true运行后面)
效果:
这就是短路运算逻辑判断。(^_−)☆