Programming languages 这个概念的名称是什么?

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(){...

我的注意力跨度可以忽略不计,因为我现在沉浸在La Vida Powershell中,所以我的代码将被格式化为这样的格式

如果在其他地方讨论过这个问题,我会提前道歉,但因为我的问题是我不知道这叫什么,所以我在谷歌上的努力毫无结果是可以理解的

想象三种功能:

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设置以提高可读性?