Programming languages 这个概念的名称是什么?
我的注意力跨度可以忽略不计,因为我现在沉浸在La Vida Powershell中,所以我的代码将被格式化为这样的格式 如果在其他地方讨论过这个问题,我会提前道歉,但因为我的问题是我不知道这叫什么,所以我在谷歌上的努力毫无结果是可以理解的 想象三种功能:Programming languages 这个概念的名称是什么?,programming-languages,powershell,coding-style,Programming Languages,Powershell,Coding Style,我的注意力跨度可以忽略不计,因为我现在沉浸在La Vida Powershell中,所以我的代码将被格式化为这样的格式 如果在其他地方讨论过这个问题,我会提前道歉,但因为我的问题是我不知道这叫什么,所以我在谷歌上的努力毫无结果是可以理解的 想象三种功能: function GrowGrapes(){...} #grows grapes. function MakeWine(){...} #uses said grapes to make wine function DrinkWine(){...
function GrowGrapes(){...} #grows grapes.
function MakeWine(){...} #uses said grapes to make wine
function DrinkWine(){...} #drinks said wine
如果第一个失败了,那么您不想也不能尝试第二个。如果第二次失败,或者从未运行过,那么尝试执行第三次是没有意义的
而不是像这样一大堆讨厌的IF语句
IF ([bool]GrowGrapes()) {
IF ([bool]MakeWine()) {
DrinkWine()
}
}
在某些语言中(我相信我是在参考C…)可以执行以下操作:
IF ([bool]GrowGrapes() -AND [bool]MakeWine()) {DrinkWine()}
甚至
$rslt = ([bool]GrowGrapes() -AND [bool]MakeWine()) -AND [bool]DrinkWine()
并且相信,只有当第一个条件返回为true/success/whatever时,你的第二个条件才会执行
同样,您可以使用一两个表达式,并相信只有当第一个表达式返回为false时,才会执行和测试第二个表达式
[bool]MakeWine() -OR [bool]BuyWine() #only attempt to purchase wine if
#the attempt to make it has failed
我的问题是:这种行为叫什么?此外,powershell是否支持它?它被称为短路评估,powershell确实支持它。请参阅
-和以及-或上的部分
编辑原始链接似乎已断开(截至2014-11-05);一个合适的替代方案是。它被称为
不确定Powershell是否支持它…这在Perl中是一个非常常见的习惯用法,它从Perl迁移到Ruby中:
do_something or die
其中die
是一些错误处理例程和
do_something and do_something_else
如果do\u something
失败,则do\u something\u other
没有意义
正如在其他答案中提到的,这(ab)使用了短路行为和/或布尔运算符的惰性求值,这并非所有语言都有
请注意,这显然是假设dou_something
返回一个布尔值,表示成功或失败,这也意味着它的实际工作是一些副作用
做类似事情的一种更结构化的方法是使用错误
Monad。有关错误
Monad的易懂介绍,请参阅;有关Monad的一般概念介绍,请参阅整个系列文章。PowerShell支持异常,因此首先我建议您让函数在失败时抛出异常。那么短路就会发生在你身上
如果出于某种原因不能这样做,那么这是短路逻辑的另一个版本
GrowGrapes
if ($?) { ## If last command successful
MakeWine
}
if ($?) { ## If last command successful
DrinkWine
}
注意功能(或bug?):与其他编程语言相比,PowerShell中的-和和-或具有相同的优先级:就是这样!想记住那件事简直让我受不了。谢谢Bash(可能还有其他Unix shell)的等价物是&&
操作符:foo&&bar
执行foo
,然后只有foo
成功(退出状态0)时,它才会执行bar
。同样地,foo | | bar
仅在foo
失败(退出状态非0)时执行bar
。因此,从编码样式的角度来看,短路是否意味着“坏”呢?在为他人编写/读取代码时,是否最好保持显式的if/then设置以提高可读性?