我们都知道在GDS中,逻辑判断关键字官方给出了两个:if 和 match(尤其是match,屡试不爽)
但GDS可以逻辑判断的语句有2.5个,咱们就好好讨论一下这0.5个。
如果你有编程经验,你也许听说过“短路运算”,如果没听说过也没关系,我们一起来探讨一下:
(1)啥是短路运算:
你应该知道关键字 or , and , not 吧,这些关键字不仅可以在判断类语句中使用,还可以在声明语句中使用!!!
![](http://tiebapic.baidu.com/forum/w%3D580/sign=08e76094883df8dca63d8f99fd1172bf/3655a01bb051f819fe306d29cdb44aed2e73e707.jpg?tbpicau=2024-08-06-05_aa7f8428b1c0cb0c16d11cd9a05450a1)
赋值的结果显而易见,但如果换成这样:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=cb0c5106a419ebc4c0787691b227cf79/748c1946f21fbe09d95ead777c600c338744ad1c.jpg?tbpicau=2024-08-06-05_854eead8ff6c5fbdf2c8688298a2bd43)
这就不好判断了,这得引入一个概念:
在短路运算中,空数组([])空字典({})null和0都为flase,所以意味着:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0d5e00e6deea15ce41eee00186013a25/82f6d81349540923d3310d1d8558d109b3de493b.jpg?tbpicau=2024-08-06-05_916baee38110b2cbb1d3111b08c30b36)
这就是短路运算,再在这普及一下优先级问题吧:
not > and >or
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0871d6e2dc1349547e1ee86c664f92dd/00f41c2442a7d9339e3b8a10ba4bd11372f0018c.jpg?tbpicau=2024-08-06-05_e6c4545e8f0e34dfd3f1f5147992fc52)
(2)好了,步入正题,怎么通过短路运算实现逻辑:
你得明白:GDS中不存在“直接函数捕获”,这意味这什么呢?变量只能捕获返回值:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0f6bdb590ed8bc3ec60806c2b28aa6c8/f4aab864034f78f094dcf4906e310a55b2191c40.jpg?tbpicau=2024-08-06-05_cdc5dd84a6a4c3effef8432a46f1c311)
这个例子中,变量a得到是o()最后return的1
可我们看一下控制台:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4a0dc999c6c8a786be2a4a065709c9c7/c0bb0d178a82b9012582aa50648da9773912ef69.jpg?tbpicau=2024-08-06-05_f7dd1dfa2a4341089dc0dc1945e128e5)
你会发现它还输出了 o
这说明:即使在赋值时,函数中return前的语句,例如print("o"),也照样执行
我们就可以利用这个特性“搞出艺术”
(3)请看这样一个例子:
在游戏中,我想判断储存的玩家信息是否存在,如果不存在将赋值为默认:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4a797b2c892f07085f052a08d925b865/e617262ac65c10389eeca7a1a5119313b17e898e.jpg?tbpicau=2024-08-06-05_a04f191b9f971e33c4cad0192b38f773)
我们来看一下“最精彩的”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运行后面)
效果:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=24bf0f35c7160924dc25a213e406359b/059671d9f2d3572c839df4bf9d13632762d0c319.jpg?tbpicau=2024-08-06-05_841e3aec6579d0d45f35a5fa3866b22c)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c47ceb532df33a879e6d0012f65d1018/59098158d109b3de8dc78c0bdbbf6c81800a4c1b.jpg?tbpicau=2024-08-06-05_a2df7c6a5263eea7e90f49334f63b8e1)
这就是短路运算逻辑判断。(^_−)☆
但GDS可以逻辑判断的语句有2.5个,咱们就好好讨论一下这0.5个。
如果你有编程经验,你也许听说过“短路运算”,如果没听说过也没关系,我们一起来探讨一下:
(1)啥是短路运算:
你应该知道关键字 or , and , not 吧,这些关键字不仅可以在判断类语句中使用,还可以在声明语句中使用!!!
![](http://tiebapic.baidu.com/forum/w%3D580/sign=08e76094883df8dca63d8f99fd1172bf/3655a01bb051f819fe306d29cdb44aed2e73e707.jpg?tbpicau=2024-08-06-05_aa7f8428b1c0cb0c16d11cd9a05450a1)
赋值的结果显而易见,但如果换成这样:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=cb0c5106a419ebc4c0787691b227cf79/748c1946f21fbe09d95ead777c600c338744ad1c.jpg?tbpicau=2024-08-06-05_854eead8ff6c5fbdf2c8688298a2bd43)
这就不好判断了,这得引入一个概念:
在短路运算中,空数组([])空字典({})null和0都为flase,所以意味着:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0d5e00e6deea15ce41eee00186013a25/82f6d81349540923d3310d1d8558d109b3de493b.jpg?tbpicau=2024-08-06-05_916baee38110b2cbb1d3111b08c30b36)
这就是短路运算,再在这普及一下优先级问题吧:
not > and >or
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0871d6e2dc1349547e1ee86c664f92dd/00f41c2442a7d9339e3b8a10ba4bd11372f0018c.jpg?tbpicau=2024-08-06-05_e6c4545e8f0e34dfd3f1f5147992fc52)
(2)好了,步入正题,怎么通过短路运算实现逻辑:
你得明白:GDS中不存在“直接函数捕获”,这意味这什么呢?变量只能捕获返回值:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=0f6bdb590ed8bc3ec60806c2b28aa6c8/f4aab864034f78f094dcf4906e310a55b2191c40.jpg?tbpicau=2024-08-06-05_cdc5dd84a6a4c3effef8432a46f1c311)
这个例子中,变量a得到是o()最后return的1
可我们看一下控制台:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4a0dc999c6c8a786be2a4a065709c9c7/c0bb0d178a82b9012582aa50648da9773912ef69.jpg?tbpicau=2024-08-06-05_f7dd1dfa2a4341089dc0dc1945e128e5)
你会发现它还输出了 o
这说明:即使在赋值时,函数中return前的语句,例如print("o"),也照样执行
我们就可以利用这个特性“搞出艺术”
(3)请看这样一个例子:
在游戏中,我想判断储存的玩家信息是否存在,如果不存在将赋值为默认:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4a797b2c892f07085f052a08d925b865/e617262ac65c10389eeca7a1a5119313b17e898e.jpg?tbpicau=2024-08-06-05_a04f191b9f971e33c4cad0192b38f773)
我们来看一下“最精彩的”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运行后面)
效果:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=24bf0f35c7160924dc25a213e406359b/059671d9f2d3572c839df4bf9d13632762d0c319.jpg?tbpicau=2024-08-06-05_841e3aec6579d0d45f35a5fa3866b22c)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c47ceb532df33a879e6d0012f65d1018/59098158d109b3de8dc78c0bdbbf6c81800a4c1b.jpg?tbpicau=2024-08-06-05_a2df7c6a5263eea7e90f49334f63b8e1)
这就是短路运算逻辑判断。(^_−)☆