yocss23 发表于 2022-3-21 13:46:38

如何让if-else更优雅

if-else是程序员同学的日常,每个人每天都会写一大堆这样的语句,但写多了就会发现实在是太丑了!!


本着“更高的追求”,我们来看看有没有更优雅的写法。
减少嵌套,尽量使用平级关系这是初级却也是十分有效的手段。原始代码if (age > 20) {    if (height > 170) {      if (sex.equals("boy")) {returntrue;      }    }}returnfalse;
调整后
if (age <= 20) {returnfalse;}if (height <= 170) {returnfalse;}return sex.equals("boy");
减少“龟派气功”的使用可以让代码更漂亮。

减少业务代码嵌入判断分支将边界类判断提前直接返回,业务逻辑抽离出判断分支。个人认为,这是实践中最有效却也是最容易被忽视的方法。原始代码if (str.equals("java")) {    return ;} else {// 业务流程    ...    ...}调整后
if (str.equals("java")) {return ;}
// 业务流程......return ;如果一长串业务逻辑被淹没在分支下,看着确实容易晕。

使用Map使用Map将code-message这种结构信息管理起来。
如下面一段代码if (t == 1) {type = "name";} elseif (t == 2) {type = "id";} elseif (t == 3) {type = "mobile";}改造后
Map<Integer, String> typeMap = new HashMap<>();typeMap.put(1, "name");typeMap.put(2, "id");typeMap.put(3, "mobile")
type = typeMap.get(ty);这种方式的局限性也很明显,只适用于上面这种特定判断逻辑。

巧用枚举这种跟上面使用Map的方式本质是一样的。还是上面的例子,换用枚举方式来写publicenum TypeEnum {    Name(1), Age(2), Address(3);public Integer typeId;    TypeEnum(Integer typeId) {this.typeId = typeId;    }}
typeId = TypeEnum.valueOf("Name").typeId;
除上面列举的方式外,还有不少小技巧,比如善用三元表达式,定义工厂等等,这里不一一说明了。其实这个问题没有一个最完美的解决方案,只要我们能从每个细节优化一点,最后就可以得到满意的效果。


页: [1]
查看完整版本: 如何让if-else更优雅