我喜欢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”是否可以接受,或者对于不返回值的单行函数是否还有另一个“=>”等效项?
答案 0 :(得分:3)
我的建议是,您不应该尝试将=>
简写形式用于应该返回类型为void
的函数。你的第三个例子,
deductDbl(double dValue) => _iValue -= (dValue * _iScale).toInt();
实际上会返回int
。说实话,这和
deductDbl(double dValue) { _iValue -= (dValue * _iScale).toInt(); }
是一个空白字符。 真的那么糟糕吗?
答案 1 :(得分:2)
这是一个品味问题,所以我的建议是做任何合理的事情。
我没有看到以速记形式编写无效功能的任何问题,而且我经常这样做,但如果你不知道自己在做什么,它会咬你。
您的示例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!
答案 2 :(得分:1)
使用“示例3”是否可以接受,或者对于不返回值的单行函数是否还有另一个“=>”等效项?
没有没有返回值的等价物,但我会说使用该表格是完全可以接受的。请记住,如果您为该方法添加了一个类型,它应该是int
,而不是void
或其他任何内容,因为它就是它返回的内容。