编程:从入门到放弃
    前言
    语言和环境
    +=
    C和C++
    Hex
    Map
    Scope(1):"这"是啥
    Scope(2)
    Singleton
    什么顺序
    从A到Z
    函数
    切分字符串
    初始化(1)
    初始化(2)
    单引号,还是双引号
    参数传递
    左,还是右
    引用
    时间(1)
    时间(2)
    时间(3)
    时间(4)
    时间(5)
    比大小
    流氓甘地
    相等,还是不等(1)
    相等,还是不等(2)
    相等,还是不等(3)
    相等,还是不等(4)
    第一个说了算,还是最后一个
    语言和环境
    除以0
    随机数

左,还是右

Updated: 2021-12-12

入门。

大多数编程语言都提供条件运算符(ternary operator),写做a ? b : c,如果atrue,返回b,否则返回c

放弃?

如果条件比较复杂,例如有三种结果,可以用嵌套的条件运算符:

jshell> int n = 0;
n ==> 0

jshell> (n == 0) ? "zero" : (n == 1) ? "one" : "many";
$2 ==> "zero"

但如果你用的是 PHP,你看到的确是...

php > $num = 0;
php > print ($num === 0) ? 'zero' : ($num === 1) ? 'one' : 'many';
one

进阶!

C/Java 中,条件运算符是右结合的,所以会先算(n == 1) ? "one" : "many",返回one,然后再判断(n == 0) ? "zero" : "one",所以结果是正确的zero

而 Hack/PHP 中是左结合的,会先判断($num === 0) ? 'zero' : ($num === 1),得到zero,再'zero' ? 'one' : 'many', 因为是个非空字符串,所以返回one

一个良好的编程习惯是适当的加上括号:

php > print ($num === 0) ? 'zero' : (($num === 1) ? 'one' : 'many');
zero