通过滥用包含在 if 语句中的三元来调用条件方法?
Conditional method calling by abusing ternary wrapped in if statement?
最近我在做代码审查,遇到了这个人:
if(!sharePermission.isExpired() ? activePermissions.add(sharePermission) : expiredPermissions.add(sharePermission));
基本上使用三元表达式调用方法,return一个布尔值并将其包装在if(...)
语句中以满足作为独立语句的要求。这比
更有效还是更不有效
if(!sharePermission.isExpired())
activePermissions.add(sharePermission);
else
expiredPermissions.add(sharePermission);
如果您真的需要将代码压缩到一行?当包裹在 if(...)
中时,是否为从三元表达式编辑的值 return 分配了任何类型的额外 space?
我不是他们两个的粉丝,只是好奇。
您正在寻找的 if..else
的三元等价物类似于 -
(!sharePermission.isExpired() ? activePermissions : expiredPermissions).add(sharePermission); // no if here
等同于
if(!sharePermission.isExpired()) {
activePermissions.add(sharePermission);
}
else {
expiredPermissions.add(sharePermission);
}
没有分配发生,只有 boolean
条件的评估。没有为评估结果分配额外的内存。
然而,使用三元表达式来模拟三元语句,是非常不正统的。它会降低代码的可读性,而不会带来任何额外的好处。因此,使用 if
和 else
是更好的选择。
注意,如果activePermissions
和expiredPermissions
是同一类型,可以使用三元表达式来决定add
调用的目标,如下:
(sharePermission.isExpired() ? expiredPermissions : activePermissions).add(sharePermission);
这样做是对 if
语句的滥用,更不用说条件表达式了。
编写完整的 if
语句或使用条件运算符 select 列表以添加到:
会更简洁
List<Permission> list = isExpired() ? expiredPermission : activePermission;
list.add(sharePermission);
最近我在做代码审查,遇到了这个人:
if(!sharePermission.isExpired() ? activePermissions.add(sharePermission) : expiredPermissions.add(sharePermission));
基本上使用三元表达式调用方法,return一个布尔值并将其包装在if(...)
语句中以满足作为独立语句的要求。这比
if(!sharePermission.isExpired())
activePermissions.add(sharePermission);
else
expiredPermissions.add(sharePermission);
如果您真的需要将代码压缩到一行?当包裹在 if(...)
中时,是否为从三元表达式编辑的值 return 分配了任何类型的额外 space?
我不是他们两个的粉丝,只是好奇。
您正在寻找的 if..else
的三元等价物类似于 -
(!sharePermission.isExpired() ? activePermissions : expiredPermissions).add(sharePermission); // no if here
等同于
if(!sharePermission.isExpired()) {
activePermissions.add(sharePermission);
}
else {
expiredPermissions.add(sharePermission);
}
没有分配发生,只有 boolean
条件的评估。没有为评估结果分配额外的内存。
然而,使用三元表达式来模拟三元语句,是非常不正统的。它会降低代码的可读性,而不会带来任何额外的好处。因此,使用 if
和 else
是更好的选择。
注意,如果activePermissions
和expiredPermissions
是同一类型,可以使用三元表达式来决定add
调用的目标,如下:
(sharePermission.isExpired() ? expiredPermissions : activePermissions).add(sharePermission);
这样做是对 if
语句的滥用,更不用说条件表达式了。
编写完整的 if
语句或使用条件运算符 select 列表以添加到:
List<Permission> list = isExpired() ? expiredPermission : activePermission;
list.add(sharePermission);