Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 有没有办法将if语句折叠为一行=&燃气轮机;条件doStuff();_Dart - Fatal编程技术网

Dart 有没有办法将if语句折叠为一行=&燃气轮机;条件doStuff();

Dart 有没有办法将if语句折叠为一行=&燃气轮机;条件doStuff();,dart,Dart,我想把这个转过来: void check() { if(condition){ doSomething(); } } 为此: void check() => condition? doSomething(); 有没有一种规范的方法可以做到这一点 [编辑] 我知道三元方法:条件?doStuff():null,但这会生成编译器警告 [编辑二] 在单行表达式中使用带:null的三值表达式时,不会生成警告。所以从技术上来说这是可行的。我希望有更具可读性的

我想把这个转过来:

  void check() {
    if(condition){
      doSomething();
    }
  }
为此:

  void check() => condition? doSomething();
有没有一种规范的方法可以做到这一点

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

[编辑二]
在单行表达式中使用带
:null的三值表达式时,不会生成警告。所以从技术上来说这是可行的。我希望有更具可读性的内容,悬空的
:null
表示一些奇怪的意图,这可能不会让未来的读者感到有点困惑。

您可以使用条件运算符

一般示例:

result=testCondition?真值:假值
具体示例:

void check()=>条件?doSomething():null;

或者你可以把整个if语句放在一行

=>(){if(condition)doSomething();};

您可以使用条件运算符

一般示例:

result=testCondition?真值:假值
具体示例:

void check()=>条件?doSomething():null;

或者你可以把整个if语句放在一行

=>(){if(condition)doSomething();};

您正在使用Dart格式化程序

你可以把任何东西放在一行上,Dart对换行符和空格没有区别。 因此:

void check(){if(condition)doSomething();}
是有效的省道。另一方面,Dart格式化程序将坚持使其成为:

void check(){
if(条件)doSomething();
}
因为这是用块体格式化函数的标准方法

不要与格式化程序对抗。这不值得

您可以像上面提到的那样进行笨拙的重写:

void check()=>条件?doSomething():null;
(至少如果
doSomething()
确实是一个表达式)。 这不会使代码更具可读性

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

还有一件事你可以做,即使它和条件表达式一样难看:

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

(如果您可以使
doSomething()
返回一个布尔值,您可以删除
==null
,这样它会变得更可读,但仍然不如正确的
If
语句可读)。

您正在与Dart格式化程序进行斗争

你可以把任何东西放在一行上,Dart对换行符和空格没有区别。 因此:

void check(){if(condition)doSomething();}
是有效的Dart。另一方面,Dart格式化程序将坚持使其成为:

void check(){
if(条件)doSomething();
}
因为这是用块体格式化函数的标准方法

不要和格式化程序对抗,这不值得

您可以像上面提到的那样进行笨拙的重写:

void check()=>条件?doSomething():null;
(至少如果
doSomething()
确实是一个表达式)。 这不会使代码更具可读性

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

还有一件事你可以做,即使它和条件表达式一样难看:

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

(如果可以使
doSomething()
返回布尔值,则可以删除
==null
,这样它的可读性会更高,但仍然不如正确的
If
语句可读).

Ya但这会在dart中生成编译器警告。抱歉,应该指定。@shawnblais您可以禁用该警告。它不会为编译创建问题。在单行表达式语句的上下文中,后者不会编译:
void check()=>if(condition)doSomething();
@shawnblais如果您将其包装在匿名函数中,您可以这样做。正如我前面所说,您可以禁用三元运算符的警告。@shawnblais如果您禁用包中的警告,它将不会在将来发送给它的用户。是的,但这会在dart中生成编译器警告。对不起,应该指定。@shawnblais您可以警告无效。它不会为编译创建问题。在单行表达式语句的上下文中,后者不会编译:
void check()=>if(condition)doSomething();
@shawnblais如果你把它包装成一个匿名函数,你就可以这样做。正如我前面所说,你可以禁用三元运算符的警告。@shawnblais如果你禁用了包中的警告,它将来就不会出现在它的用户身上。是的,我同意我不想与编译器发生冲突,我只想要你标准的“如果”版本if/else“三元,不确定是否存在这样一个概念。用法更大致如下:
void init()=>!\u initComplete?\u init();
我同意使用null将三元强制到这个用例中是一个不好的可读性权衡。是的,我同意我不想与编译器抗争,我只想要标准的“if”版本“if/else”三元,不确定是否存在这样一个概念