巧用中斷語句減小嵌套

請看下面的判斷語句。編程

io.open() //打開控制檯窗口
var cond = 2;
if( cond == 1 ){
    io.print(1);
}
else{
    //能夠在if語句塊前面添加代碼
    if( cond == 2 ){
        io.print(2);
    }
    else{
        //能夠在if語句塊前面添加代碼
        if( cond == 3 ){
            io.print(3);
        }
    }
}


按上面的思路,你能夠繼續寫下去,嵌套十層八層應當很容易,代碼也會愈來愈混亂。
可是他的確符合告終構化編程的原則:一個入口、一個出口。

這時候咱們不能再默守成規,將上面的判斷語句放在一個do...while(false)語句塊內部,這個「循環」語句塊只會執行一次,而且能夠隨時能夠用中斷語句退出循環.改進後的代碼以下:函數

io.open();
var cond = 2;
do { // 循環
    if(cond == 1 ) begin 
         io.print(1);
         break;//能夠隨時跳出語句塊
    end;
    //能夠在if語句塊外部添加代碼
    
    if(cond == 2 )begin
         io.print(2);
         break;//能夠隨時跳出語句塊
    end;
    
    if(cond == 3 )begin
       io.print(3);
        break;//能夠隨時跳出語句塊
    end;
}while( false ); //while條件爲false則再也不循環

這裏咱們雖然使用了break中斷語句,可是全部break語句位於相同深度的嵌套層次,中斷過程清晰一致。

如今咱們再也不須要else語句塊來「多管閒事」,if語句完成自已的任務就能夠離開。
每一個代碼塊(指語句塊、子程序、或類、名字空間、甚至是按就近原則放在一塊兒的邏輯語句塊)都應當儘量減小自已的責任spa

咱們一樣能夠在函數中使用上面的技巧來避免條件語句過深的嵌套。
這時候咱們須要建立一個函數、並用return語句代替退出子程序。
code

io.open();
func = function(cond){ //循環
    if(cond == 1)begin
        io.print(1);        
        return;//能夠隨時跳出語句塊
    end;
   
    //能夠在if語句塊外部添加代碼
    if(cond == 2)begin
         io.print(2);
         return;//能夠隨時跳出語句塊
    end;
}
相關文章
相關標籤/搜索