if 作为表达式和 if 作为语句之间的区别

Difference between if as an expression and if as a statement

所以我在看这个关于 Go 语言的视频 - https://www.youtube.com/watch?v=p9VUCp98ay4 ,在大约 6:50 时,一个人问了一个问题,为什么他们将 if 作为语句而不是表达式来实现。这两个实现有什么区别?据我所知,我从来不需要根据语言改变使用条件语句的方式。

编辑:他的问题中 "you need values rather than variables" 是什么意思?

表达式和语句的区别在于表达式产生一个值,因此可以用在需要值的地方。所以表达式可以用作变量的值、函数的参数或运算符的操作数。语句不能。

and what does he mean that "you need values rather than variables" in his question?

我假设他所说的 vals 是指常量(例如在 Scala 中称为 vals)。

如果 if 是一个表达式,你可以这样做:

const myValue = if condition { value1 } else { value2 }

因为 if 不是一个表达式,你必须这样做:

var myValue
if condition {
    myValue = value1
} else {
    myValue = value2
}

所以你需要让你的变量可变(使用 var 而不是 const),这可能就是提问者的意思。

通过使用即时调用函数 (IIF) 结合 GO 中的 if 语句,您可以获得与 if 表达式相同的代码优雅。我不是 GO 程序员(主要是打字稿)所以如果这对性能有任何影响请告诉我。

func main() {
    amIHungry := true
    didMyPaycheckComeInYet := false

    choice := func() string {
        if(!amIHungry && !didMyPaycheckComeInYet){
            return "stay-home"
        }
        if(!amIHungry && didMyPaycheckComeInYet){
            return "buy-new-keyboard"
        }
        if(amIHungry && !didMyPaycheckComeInYet){
            return "make-ramen"
        }
        return "taco-bell-time"
    }()

    println(choice)

}

稍后在您的程序中,您可以有一个简化的“选择”来选择您的应用程序逻辑,而不是一堆脱离上下文的状态。

if(choice == "taco-bell-time"){
   println("Order a bean burrito, but with black beans,")
}

更容易推理
if(amIHungry && didMyPaycheckComeInYet){
     println("Order a bean burrito, but with black beans,")
}