首页 > 解决方案 > 有没有办法将 if 语句折叠为单行?=> 条件?做东西();

问题描述

我想把这个:

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

进入这个:

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

有这样做的规范方法吗?

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

[Edit2] 三元 with: null在单行表达式中使用时不会生成警告。所以从技术上讲,这是可行的。我希望有一些更具可读性的东西,悬空: null 表示这里有一些奇怪的意图,这可能不会让未来的读者感到困惑。

标签: dart

解决方案


你在这里与 Dart 格式化程序作斗争。

您可以将任何内容放在一行上,Dart 不会以不同的方式处理换行符和空格。所以:

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

是有效的飞镖。另一方面,Dart 格式化程序会坚持它变成:

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

因为这是用块体格式化函数的规范方法。

不要与格式化程序作斗争。这不值得。

您可以像提到的那样进行尴尬的重写:

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

(至少如果doSomething()真的是一个表达式)。这不会使您的代码更具可读性。

无法在函数体中将语句与函数参数放在同一行,格式化规则不允许这样做。格式化程序坚持语句从它们自己的行开始(一个例外是语句的单个语句else分支if,如果它适合一行)。一个语句块,包括一个函数体,总是在前导之后有一个换行符{

您还可以做另一件事,即使它和条件表达式一样丑陋:

void check() => condition && doSomething() == null;

(如果你可以doSomething()返回一个布尔值,你可以去掉== null,那么它变得更具可读性,但仍然不如正确的if语句那样可读)。


推荐阅读