Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 这两个代码块是否应该等效?(国际单项体育联合会的转让)_Dart - Fatal编程技术网

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
递减)。