在“for”循环条件中使用“三元运算”是一种好习惯吗?

Posted

技术标签:

【中文标题】在“for”循环条件中使用“三元运算”是一种好习惯吗?【英文标题】:Is it a good practice to use "ternary operation" in the "for" loop condition? 【发布时间】:2012-05-30 16:48:31 【问题描述】:

在 for 循环条件下使用三元运算是一种好习惯吗? 我问这个是因为我遇到了在三元运算中解决我在 for 循环条件下的问题的情况。

例如:

for( short i = 0 ; i < count ; i++ )
   for( short j = 0 ; j < ( ( x[i] < y[i] ) ? x[i] : y[i] ) ; j++ ) //Here I am using ternary operation at for loop condition place
       //.....
       //.....Some Code Here .......
       //.....
   

【问题讨论】:

提前感谢您的宝贵建议。 你也应该去掉所有的空格。 @CrazyEddie:感谢您的建议。只是想知道,这有什么不同吗? @CrazyEddie:感谢您的回复。 【参考方案1】:

我没有发现任何问题。

我的建议。 1.short改为int. 2.#define ternary(可选)。

#define cond(n)  (( x[n] < y[n] ) ? x[n] : y[n] )

for( int a = 0; a < count; a++)
  for( int b = 0; b < cond(a), b++)
 

  ........code...............

 

【讨论】:

如果你把它做成一个宏,我宁愿你把它做成一个函数,认真的。 @Xeo:对于上述情况,我将使用内联函数。【参考方案2】:

我想使用三元运算符没有问题,除了它使代码不可读。但是像 x[i] &lt; y[i] ) ? x[i] : y[i] 这样的条件有时会产生问题,以防您也在修改 x[i] and y[i] insdide for loop 。所以我建议不要使用,除非你真的知道你在做什么

【讨论】:

【参考方案3】:

我个人会选择min(x[i], y[i])。但是,您的可读性问题可以通过预先计算并使用它来解决:

for( short i = 0 ; i < count ; i++ )
   int jCount = ( x[i] < y[i] ) ? x[i] : y[i]; // or min equivalent
   for( short j = 0 ; j < jCount ; j++ ) 

   

这在一定程度上改变了行为,因为它使条件对j 循环内的x[i]y[i] 的更改视而不见。我不确定这是否适合您的用例。

【讨论】:

【参考方案4】:

如果您通常可以使用三元运算符,那么没有理由不在您的 for 循环条件中使用它。 (我自己喜欢三元运算符,但我知道有些人认为它很容易混淆)

【讨论】:

【参考方案5】:

我会选择min(x[i], y[i]),只是因为它更清晰,但我看不出你的代码有直接问题。

【讨论】:

只是上面显示的一个示例.. 我正在执行一些类似但不完全相同的操作。谢谢。 如果你想要更清楚,j &lt; x[i] &amp;&amp; j &lt; y[i] 的表达式值得考虑;可能有类似的方法来考虑你的实际表达......

以上是关于在“for”循环条件中使用“三元运算”是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

从循环内部返回是一种好习惯[关闭]

在 perl 中使用嵌套映射是一种好习惯吗?

在 C 中使用第一个数组元素作为数组长度是一种好的编程习惯吗?

循环条件中的三元运算符:评估顺序/操作。优先级不明确

将谷歌令牌存储在本地存储中是不是是一种好习惯

在 C# 中是不是每次都评估循环声明?