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

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

与标准的if-etc语句相比,?:操作符的优缺点是什么?显而易见的是:

有条件的?:运算符

  • 在处理直接值比较和赋值时更短、更简洁
  • 似乎不像if/Else构造那样灵活。

标准IF/Else

  • 可以应用于更多情况(例如函数调用)。
  • 往往是不必要的长

根据语句的不同,每个语句的可读性似乎各不相同。在第一次接触到?:操作符之后,我花了一段时间来理解它是如何工作的。考虑到我与许多非程序员一起工作,您会建议在可能的情况下使用它吗?还是坚持使用if/Else?


潇潇雨雨
浏览 868回答 3
3回答

LEATH

我基本上建议,只有在结果语句非常短并且相对于if/etc等效时,简洁性显著增加而不牺牲可读性时,才建议使用它。很好的例子:int result = Check() ? 1 : 0;坏例子:int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;

万千封印

其他答案几乎涵盖了这一点,但“这是一个表达”并不能真正解释为什么这是如此有用的.在C+和C#等语言中,可以使用它们定义本地只读字段(在方法体中)。这在常规if/list语句中是不可能的,因为必须在该语句中分配只读字段的值:readonly int speed = (shiftKeyDown) ? 10 : 1;与以下不同:readonly int speed;  if (shifKeyDown)       speed = 10;    // error - can't assign to a readonlyelse       speed = 1;     // error以类似的方式,您可以在其他代码中嵌入一个三级表达式。除了使源代码更紧凑(在某些情况下,它的可读性更强)之外,它还可以使生成的机器代码更加紧凑和高效:MoveCar((shiftKeyDown) ? 10 : 1);.可能生成的代码比必须调用同一方法两次更少:if (shiftKeyDown)     MoveCar(10);else     MoveCar(1);当然,它也是一种更方便、更简洁的形式(更少的输入、更少的重复,并且如果必须在if/etc中复制代码块,则可以减少出错的可能性)。在这种干净的“常见模式”情况下:object thing = (reference == null) ? null : reference.Thing;..阅读/解析/理解(一旦你习惯了)要比冗长的if/etc更快,所以它可以帮助你更快地“摸索”代码。当然,仅仅是因为有用并不意味着这是最好的使用在每一种情况下。我建议只在含义明确(或更清楚)的短代码中使用?:-如果您在更复杂的代码中使用它,或者在彼此之间嵌套三元操作符,则会使代码很难读懂。

墨色风雨

当我有很多重复的代码时,我通常会选择一个三元操作符,否则。if (a > 0)     answer = compute(a, b, c, d, e);else     answer = compute(-a, b, c, d, e);使用三元操作符,可以通过以下方法实现这一点。answer = compute(a > 0 ? a : -a, b, c, d, e);
打开App,查看更多内容
随时随地看视频慕课网APP