这个问题想必大家都有所涉及,谈过很多次了。
偶然兴起,今天写shell脚本又遇到这个问题。问题描述如下:
$1 $2 $3
10 0.01 <1M >=1M
20 0.01 <1M >=1M
50 0.01 <1M >=1M
100 0.01 <1M >=1M
20 0.001 <1M >=1M
50 0.001 <1M >=1M
100 0.001 <1M >=1M
也就是要判断变量1是否是10 20 50 100这些数,变量2是否是0.01 0.001这些数,变量3与1M比较是大还是小
如果把所有的if写全了也可以,但是代码太重复。想了一下,就把分支判断改成了如下结构:
if $3 < 1M
fun_switch $1 $2 "lt1M"
else
fun_switch $1 $2 "gt1M"
这样,if判断只写两句就可以,switch再对情况作分支:
fun_switch()
{
case $1+$2 in
10+0.001) fun_chuli $1 $2 $3;
10+0.01) fun_chuli $1 $2 $3;
```````````````````````````````````````````````````
}
这里的fun_chuli就是if判断里面原有的重复处理代码,也就是实体处理过程所在。
分离出switch和实体处理过程后,代码变得很简洁,而且没有增加逻辑复杂度。
尽量简化if,不必要的重复判断可以分离出来,交给另一个函数去做,实体处理过程也分离出来。
只是一点小技巧。
设计模式中,也有省去多重分支判断的方法,在下一篇中会讲。