請看下面的判斷語句。編程
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; }