使用条件?:(三元)运算符的好处

与标准的if-else语句相比,?:操作符有哪些优点和缺点? 显而易见的是:

有条件的:操作员

  • 处理直接价值比较和分配时更简洁,更简洁
  • 似乎没有像if / else结构那样灵活
  • 标准如果/否

  • 可以应用于更多情况(如函数调用)
  • 通常是不必要的长
  • 可读性似乎因每个语句而异。 在第一次接触到?:操作符之后的一段时间,我花了一些时间来消化它的工作原理。 你会推荐尽可能使用它,或者坚持if / else,因为我与许多非程序员一起工作?


    我基本上建议只有当结果语句非常短时,才会使用它,并且在不牺牲可读性的前提下,简洁性大大超过if / else等效语句。

    好例子:

    int result = Check() ? 1 : 0;
    

    不好的例子:

    int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;
    

    这在其他答案中已经涵盖了很多,但“这是一个表达式”并不能真正解释为什么这么有用......

    在C ++和C#等语言中,您可以使用它们定义局部常量(在方法体内)。 这对传统的if / then语句来说是不可能的,因为const all的值必须在单个语句中分配:

    const int speed = (shiftKeyDown) ? 10 : 1;
    

    不一样:

    const int speed;  
    if (shifKeyDown)  
        speed = 10;    // error - can't assign to a const  
    else  
        speed = 1;     // error  
    

    以类似的方式,您可以在其他代码中嵌入第三级表达式。 除了使源代码更紧凑(因此在某些情况下更易读),它还可以使生成的机器代码更加紧凑和高效:

    MoveCar((shiftKeyDown) ? 10 : 1);
    

    ...可能会产生更少的代码,而不必调用相同的方法两次:

    if (shiftKeyDown)
        MoveCar(10);
    else
        MoveCar(1);
    

    当然,这也是一种更方便简洁的形式(少打字,少重复,并且如果你必须在if / else中重复块代码,可以减少错误的几率)。 在这种干净的“常见模式”情况下:

    object thing = (reference == null) ? null : reference.Thing;
    

    ...阅读/解析/理解(一旦你习惯了它)比慢慢的if / else等效的速度更快,因此它可以帮助你更快地“加速”代码。

    当然,仅仅因为它很有用,并不意味着它在每一种情况下都是最好的。 我建议只使用它用于短代码的意思是清楚的(或更明确)通过使用?: - 如果你使用它在更复杂的代码,或嵌套三元运算符在彼此之内,它可以使代码非常困难读书。


    如果我想要将变量设置为在请求中发送的值(如果已定义),或者将某个变量设置为默认值(如果未定义),那么我发现它在Web开发中特别有用。

    链接地址: http://www.djcxy.com/p/53859.html

    上一篇: Benefits of using the conditional ?: (ternary) operator

    下一篇: What does the question mark in member access mean in C#?