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”三元,不确定是否存在这样一个概念