有没有办法将if语句折叠到单行? =>条件?做东西();

时间:2020-08-10 14:08:47

标签: dart

我想打开它:

  void check() {
    if(condition){
      doSomething();
    }
  }

对此:

  void check() => condition? doSomething();

是否有规范的方法?

[编辑] 我知道三元方法:condition? doStuff() : null,但这会生成编译器警告。

[Edit2] 在单行表达式中使用带有: null的三进制时不会生成警告。因此从技术上讲这是可行的。我希望有一些可读性更好的东西,: null 悬挂在这里表明了一些奇怪的意图,可能不会对将来的读者造成混淆。

2 个答案:

答案 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>