Dart 中使用“=>”的单行函数

Bri*_* Oh 0 dart

我喜欢 Dart 的众多优点之一是它简洁。

\n\n

例如,如下所示的单行函数:

\n\n
  // example 1\nString toStr() => (_iValue/_iScale).toStringAsFixed(_iDecimals);\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这似乎回避了一个问题:是否存在与不返回值的单行函数等效的函数。例如。

\n\n
// example 2\nvoid deductDbl(double dValue) {\n  _iValue -= (dValue * _iScale).toInt();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然这可以在一行上用 \xe2\x80\x9c{ 和 }\xe2\x80\x9d 来表达,但这可能会让人皱眉。类似的类比可能是一行 \xe2\x80\x9cif 语句\xe2\x80\x9d,其中不需要括号。我认为大多数人将其格式化为两行,因为它更好地说明了逻辑。然而,它仍然比使用 \xe2\x80\x9c{}\xe2\x80\x9d 更简洁,尽管如果愿意的话仍然可以选择使用 \xe2\x80\x9c{}\xe2\x80\x9d 。

\n\n

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

\n\n
   // example 3\ndeductDbl(double dValue) => _iValue -= (dValue * _iScale).toInt();\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否可以使用 \xe2\x80\x9cExample 3\xe2\x80\x9d,或者对于不返回的单行函数,是否有另一个等效于 \xe2\x80\x9c=>\xe2\x80\x9d一个值?

\n

Lad*_*cek 5

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

deductDbl(double dValue) => _iValue -= (dValue * _iScale).toInt();
Run Code Online (Sandbox Code Playgroud)

实际上返回一个int. 老实说,这和之间的区别

deductDbl(double dValue) { _iValue -= (dValue * _iScale).toInt(); }
Run Code Online (Sandbox Code Playgroud)

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

  • 删除该空间非常容易!我想说,真正的区别是第二个函数自动格式化为 3 行。 (2认同)