Flutter Dart-如何使用NullAware运算符简化IF条件
有没有办法简化这个条件从句:Flutter Dart-如何使用NullAware运算符简化IF条件,flutter,dart,Flutter,Dart,有没有办法简化这个条件从句: if (_username != null &&_username.isNotEmpty && _pass != null && _pass.isNotEmpty){ connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass)); } 使用空感知操作符 我试过: if (_username?.isNotEmpty?? false
if (_username != null &&_username.isNotEmpty && _pass != null && _pass.isNotEmpty){
connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass));
}
使用空感知操作符
我试过:
if (_username?.isNotEmpty?? false && _pass?.isNotEmpty?? false){
connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass));
}
但我认为有一个问题,因为Android Studio说无法达到右边的条件,这是不对的。你可以这样做
String test = null;
bool v = _stringIsNotEmptyOrNull(test);
print("Boolean value is $v");
test = "";
bool v1 = _stringIsNotEmptyOrNull(test);
print("Boolean value is $v1");
test = "test";
bool v2 = _stringIsNotEmptyOrNull(test);
print("Boolean value is $v2");
检查功能可以写成
bool _stringIsNotEmptyOrNull(String value) {
return value?.isNotEmpty ?? false;
}
或
对于空感知访问,您必须显式地将结果与true或false进行比较:
if (_username?.isNotEmpty == true && _pass?.isNotEmpty == true) {
...
}
对于您的变体,代码中缺少括号,因为Null合并运算符
的优先级最低:
if ((_username?.isNotEmpty ?? false) && (_pass?.isNotEmpty ?? false)) {
...
}
对于第一个函数名,在cameCase中使用命名,而函数名比其中的代码长-丑陋,useless@Eugene你怎么知道这个函数是没有用的,如果你知道的比我多,我会用第二种形式<代码>==true比较总是让人觉得可疑,在可能为空的情况下,第一种形式需要我更长的时间来推理。这些情况下的
==true
方法还有一个不寻常的特性,即它不等同于!=false
。此外,在更一般的意义上,如果你处理的是一个可能为空的bool
,if(someBool==true)
看起来像是可以简化为if(someBool)
,而if(someBool??false)
让读者明白someBool
是可以为空的。
if ((_username?.isNotEmpty ?? false) && (_pass?.isNotEmpty ?? false)) {
...
}