Dart 这两个代码块是否应该等效?(国际单项体育联合会的转让)
以下两个代码块是否应等效?我的直觉是肯定的,但它们会产生不同的行为 第一个代码块按我预期的方式工作,第二个代码块则不然。我真的想使用第二种风格,因为它使实际的代码(这里省略了其中的一些代码)变得更短,更容易理解Dart 这两个代码块是否应该等效?(国际单项体育联合会的转让),dart,Dart,以下两个代码块是否应等效?我的直觉是肯定的,但它们会产生不同的行为 第一个代码块按我预期的方式工作,第二个代码块则不然。我真的想使用第二种风格,因为它使实际的代码(这里省略了其中的一些代码)变得更短,更容易理解 if(扩展){ 半径+=增量; 如果(半径>最大半径) 扩展=假; }否则{ 半径-=三角洲; if(半径maxRadius){ 扩展=假; }否则如果((半径-=增量)最大半径) 扩展=假; 如果(!扩展和半径最大半径) 扩展=假; 如果(!扩展和半径将计算为false,将您发送到el
if(扩展){
半径+=增量;
如果(半径>最大半径)
扩展=假;
}否则{
半径-=三角洲;
if(半径<最小半径)
扩展=真;
}
对
if(扩展和(半径+=delta)>maxRadius){
扩展=假;
}否则如果((半径-=增量)
像这样的东西怎么样:
radius += expanding ? delta : -delta;
if (expanding && radius > maxRadius)
expanding = false;
if (!expanding && radius < minRadius)
expanding = true;
radius+=扩展?三角洲:三角洲;
if(扩展和半径>最大半径)
扩展=假;
如果(!扩展和半径<最小半径)
扩展=真;
这分离了增加半径和切换扩展的功能,但仍然简化了与原始verison不同的代码。类似的功能如何:
radius += expanding ? delta : -delta;
if (expanding && radius > maxRadius)
expanding = false;
if (!expanding && radius < minRadius)
expanding = true;
radius+=扩展?三角洲:三角洲;
if(扩展和半径>最大半径)
扩展=假;
如果(!扩展和半径<最小半径)
扩展=真;
这分离了增加半径和切换扩展的功能,但仍然简化了代码与原始验证。如果
扩展
是真的
但是半径+增量如果扩展
是真的
但是半径+增量号。因为,你知道,不同的行为。FWIW第一种样式更清晰。这样混合你的隐喻是相当糟糕的风格,不管可能会获得什么简洁性。它们不等价的部分原因是因为第二种风格使用了表达式(radius+=delta)
和(radius-=delta)
的返回值,而第一种风格没有。完全有可能在增量或减量之前返回半径值。是的,在增量或减量之前。除非你打破你的语言引用来验证行为,否则没有办法确定。除了可能会启动调试器。或者说someValue=(radius+=delta)
并检查someValue
和radius
的值。好吧,它们不是相同的运算符,但这是基本原理,是的<代码>a++
将返回增量前a
的原始值<另一方面,代码>++a
将首先递增,然后返回a
的新值。您必须确定+=
是否返回pre或post值。你现在明白我为什么喜欢第一个版本了吗?:)Re“在增量或减量之前”:int a=3;打印(a+=1)
打印4,因此似乎+=
返回递增no之后的值。因为,你知道,不同的行为。FWIW第一种样式更清晰。这样混合你的隐喻是相当糟糕的风格,不管可能会获得什么简洁性。它们不等价的部分原因是因为第二种风格使用了表达式(radius+=delta)
和(radius-=delta)
的返回值,而第一种风格没有。完全有可能在增量或减量之前返回半径值。是的,在增量或减量之前。除非你打破你的语言引用来验证行为,否则没有办法确定。除了可能会启动调试器。或者说someValue=(radius+=delta)
并检查someValue
和radius
的值。好吧,它们不是相同的运算符,但这是基本原理,是的<代码>a++将返回增量前a
的原始值<另一方面,代码>++a将首先递增,然后返回a
的新值。您必须确定+=
是否返回pre或post值。你现在明白我为什么喜欢第一个版本了吗?:)Re“在增量或减量之前”:int a=3;打印(a+=1)
打印4,因此似乎+=
返回递增后的值,该值仍在逻辑上工作。但是你有基本的想法,对吗?那很好,谢谢!我会那样做的。但最初的问题仍然没有答案,我对此一无所知,还在研究逻辑。但是你有基本的想法,对吗?那很好,谢谢!我会那样做的。但是原来的问题仍然没有答案,我不知道。谢谢!您能解释一下为什么第二个版本不符合条件吗?第二个版本包含一个&&
(一个条件AND)(radius+=delta)
如果扩展
为false
@RobertHarvey是的,我所说的情况是当扩展
为扩展
为真且radius+delta maxRadius>将计算为false
,将您发送到else
条件(其中radius
递减)。谢谢!您能解释一下为什么第二个版本不符合条件吗?第二个版本包含一个&&
(一个条件AND)(radius+=delta)
如果扩展
为false
@RobertHarvey是的,我所说的情况是当扩展
为扩展
为真且radius+delta maxRadius>将计算为false
,将您发送到有条件的else
(其中radius
递减)。