dart - 有没有办法将 if 语句折叠为单行?=> 条件?做东西();
问题描述
我想把这个:
void check() {
if(condition){
doSomething();
}
}
进入这个:
void check() => condition? doSomething();
有这样做的规范方法吗?
[编辑] 我知道三元方法:condition? doStuff() : null
但这会产生编译器警告。
[Edit2] 三元 with: null
在单行表达式中使用时不会生成警告。所以从技术上讲,这是可行的。我希望有一些更具可读性的东西,悬空: null
表示这里有一些奇怪的意图,这可能不会让未来的读者感到困惑。
解决方案
你在这里与 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
语句那样可读)。
推荐阅读
- typo3 - TYPO3 RealURL extension needs lower PHP version because of scheduler. Is there a workaround?
- xamarin.forms - Xamarin.forms 如何在每个页面中显示 ActivityIndicator?
- charts - Chart.js - the exact distance in pixels between the grid lines along the X axis
- python - os.listdir(folder) 函数打印出错误的文件顺序
- c# - EF Core 延迟加载 - 导航属性失败并显示“命名空间‘Castle.Proxies’中不存在类型或命名空间名称‘ProductProxy’”
- halide - 如何使用 float16_t 声明卤化物 Func?
- elasticsearch - 使用来自具有不同包结构的 2 个不同应用程序的相同 Elastic Index 来存储数据(HibernateSearch + Elastic)
- angularjs - How to apply conditional column offsets in IONIC 3
- android-studio - Running all flutter unit tests from Android Studio
- bootstrap-4 - 网格列中的引导固定位置