现在的位置: 首页 > 综合 > 正文

if多重判断的简化处理(一)

2013年02月11日 ⁄ 综合 ⁄ 共 636字 ⁄ 字号 评论关闭

这个问题想必大家都有所涉及,谈过很多次了。

偶然兴起,今天写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,不必要的重复判断可以分离出来,交给另一个函数去做,实体处理过程也分离出来。
只是一点小技巧。
设计模式中,也有省去多重分支判断的方法,在下一篇中会讲。

抱歉!评论已关闭.