0

我喜欢 Dart 的众多优点之一是它不冗长。

例如,一个单行函数,如下所示:

  // example 1
String toStr() => (_iValue/_iScale).toStringAsFixed(_iDecimals);

然而,这似乎是一个问题,即是否存在不返回值的单行函数的等价物。例如。

// example 2
void deductDbl(double dValue) {
  _iValue -= (dValue * _iScale).toInt();
}

虽然这可以在一行中同时使用“{ 和 }”来表示,但这可能是不受欢迎的。类似的类比可能是单行“if 语句”,其中不需要括号。我认为大多数人将其格式化为两行,因为它更好地说明了逻辑。但是,它仍然没有使用“{}”那么冗长,尽管如果愿意,仍然可以选择使用“{}”。

作为示例 2 的替代方案,我注意到以下内容似乎有效,但由于某种原因可能不赞成:

   // example 3
deductDbl(double dValue) => _iValue -= (dValue * _iScale).toInt();

是否可以使用“示例 3”,或者对于不返回值的单行函数是否有另一个等效于“=>”的方法?

4

3 回答 3

4

我的建议是,您不应该尝试对=>应该具有返回类型的函数使用简写形式void。你的第三个例子,

deductDbl(double dValue) => _iValue -= (dValue * _iScale).toInt();

实际上返回一个int. 老实说,这和

deductDbl(double dValue) { _iValue -= (dValue * _iScale).toInt(); }

一个空白字符。真的有那么糟糕吗?

于 2013-06-09T15:41:12.207 回答
2

这是一个品味问题,所以我的建议是做任何你觉得合理的事情。

我认为以速记形式编写 void 函数没有任何问题,而且我经常这样做,但如果你不知道自己在做什么,它可能会咬你一口。

您的示例 3 的行为与您想象的不同。它不等同于示例 2,因为在示例 3 中,deductDbl返回一个int.

两者之间有区别:

deductDbl1(double dValue) { _iValue -= (dValue * 1).toInt(); } // returns null 

deductDbl2(double dValue) => _iValue -= (dValue * 1).toInt(); // returns int

原因是表达式的结果_iValue -= something_iValue,所以返回类型是int

这给出了:

var r1 = deductDbl1(x);  // r1 is null!
var r2 = deductDbl2(x);  // r2 is an int equal to _iValue!
于 2013-06-08T20:42:49.407 回答
1

是否可以使用“示例 3”,或者对于不返回值的单行函数是否有另一个等效于“=>”的方法?

没有不返回值的等价物,但我会说使用这种形式是完全可以接受的。请记住,如果您为该方法添加了一个类型,它应该是int, notvoid或其他任何东西,因为这就是它返回的内容。

于 2013-06-08T22:04:00.043 回答