我想打开它:
void check() {
if(condition){
doSomething();
}
}
对此:
void check() => condition? doSomething();
是否有规范的方法?
[编辑]
我知道三元方法:condition? doStuff() : null
,但这会生成编译器警告。
[Edit2]
在单行表达式中使用带有: null
的三进制时不会生成警告。因此从技术上讲这是可行的。我希望有一些可读性更好的东西,: null
悬挂在这里表明了一些奇怪的意图,可能不会对将来的读者造成混淆。
答案 0 :(得分:1)
您可以使用条件运算符。
一般示例:
result = testCondition ? trueValue : falseValue
具体示例:
void check() => condition ? doSomething() : null;
或者您可以将整个if语句放在一行上
=> () {if(condition) doSomething();};
答案 1 :(得分:1)
您在这里与Dart格式化程序进行斗争。
您可以将任何内容放在一行上,Dart不会对换行符和空格进行不同的处理。 所以:
void check() { if (condition) doSomething(); }
是有效的Dart。另一方面,Dart格式化程序将坚持要求它变为:
void check() {
if (condition) doSomething();
}
因为这是用块体格式化函数的 canonical 方法。
不要与格式化程序打架。这不值得。
您可以像上面提到的那样进行笨拙的重写:
void check() => condition ? doSomething() : null;
(至少如果doSomething()
确实是一个表达式)。
这将不会使您的代码更具可读性。
无法将语句与函数参数放在同一行中,格式设置规则将不允许这样做。格式化程序坚持说,语句在它们自己的行上开始(一个例外是else
语句的单个语句if
分支,如果它适合一行)。
包含函数主体的语句块始终在前导{
之后有换行符。
您还可以做另一件事,即使它与条件表达式一样丑陋:
void check() => condition && doSomething() == null;
(如果可以使doSomething()
返回一个布尔值,则可以删除== null
,它变得更具可读性,但仍不如正确的if
语句可读)。 / p>