else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else
有人喜歡if-else,稱之為程序結構化的靈魂。確實,就計算機邏輯來講,if-else最符合計算機非0即1的邏輯。就連在工作時,項目經理在給我們描述業務邏輯時也會來兩句if如何,else如何!但是,也有人對代碼中出現過深的if-else嵌套感到深惡痛絕。因為不論是在Debug、功能擴展、后期維護還是項目代碼開源共享、項目交接等情況下,若是遇到十幾層深度成百上千行的if-else嵌套代碼,任何人都會頭疼不已。
總結一下if-else的優缺點:
優點:
1、最容易上手;
2、邏輯性強,在實現業務時比較實用;
缺點:
1、嵌套過深,測試困難;
2、維護困難,若要修改外層邏輯有可能會影響到深層次的邏輯;
3、功能擴展可能會出現困難,需要找到對應的分支,重新梳理邏輯;
4、代碼臃腫,閱讀性差;
總之,if-else在程序設計中是不可避免的,作為程序員能做的就是減少嵌套,提升代碼的可閱讀性和質量。但是,這些都需要一定的經驗,對于新手來說實現功能已經就十分困難了,若還需在過程中考慮這些無疑是雪上加霜。所以,小編就個人經驗分享一些小技巧,希望能幫助大家提升代碼質量。
Switch case 替代,這個大家都知道,當判斷條件是某個變量的值時,可以用switch case來代替代碼中的if-else;
int a = b + c ;if(a == 1){/*doing something*/}else if(a == 2){/*doing something*/}//*****else{/*doing something*/}替代為:
?????? switch (a)?????? {?????? case 1 :{/*doing something*/}break ;?????? case 2 :{/*doing something*/}break ;?????? //***?????? default:{/*doing something*/}????????????? break;?????? }案例
針對后文所提及的方法,有一個很經典的演示案例--輸入一個年份,判斷是否為閏年。其邏輯是:首先需要判斷年份是否能被4整除,能被4整除還需要分整百年和非整百年,整百年還必須被400整除才是閏年。用代碼實現如下:
減少沒必要的if-else,有時候if只是拿來判斷某些變量是否異常,那么主程序那一塊沒必要加if-else,只需要在異常處加if判斷;
如案例可以用這種方法重構如下:
?????? leap=0;?????? if(year%4==0) ?????? { ????????????? leap=1;????????????? if(year%100==0) ????????????? { ??????????????????? if(year%400 !=0) leap=0;????????????? } ?????? }優化完,明顯清爽很多。像上述案例只是賦值用這種重復賦值的方式可以避免掉一部分的else出現,但是如果分支是運行不同的函數呢?此時,就需要換一種方式,那就是提前return,例如:
if(condition){?? dosomething();?}else{?? dootherthing();?}//采用提前return法則,去掉一個elseif(condition){?? dosomething();????? return ;?}dootherthing();三目運算符替代,三目運算符可以很好的替代簡單的if-else邏輯,還是用案例來演示,用三目運算符重構后:
year%4==0?(year%100 ==0?(year%400==0?1:0):1):0 ;但是這僅僅只是減少了代碼量,在閱讀友好性上反而降低了。三目運算符只適合替代簡單的if-else;
合并嵌套,通過將判斷條件用邏輯運算符&&和||合并,從而減少嵌套。案例代碼可以重構為:
leap=0; if(year%4==0 && year%100==0 && year%400==0)leap=1; else if(year%4==0 &&year%100!=0)leap = 1 ;//甚至可以更狠,但是并不建議這么做if(year%4==0 && year%100==0 && year%400==0 || year%4==0 &&year%100!=0)leap=1;拆分嵌套,通過梳理if-else的嵌套邏輯,將需要深層嵌套的if-else拆分成多個獨立的if-else代碼塊,或者平衡if-else中嵌套深度。案例代碼可以重構為:
?????? leap = 0 ;?????? if(year%100==0)?????? {????????????? if(year%400 ==0) leap = 1 ;?????? }else?????? {????????????? if(year%4 == 0)leap = 1 ;?????? }封裝,如果遇到嵌套實在過深沒有辦法優化的話,可以將上下層盡量剝離并將部分嵌套封裝為函數,以傳參的方式將條件變量傳遞給函數。
//將部分嵌套封裝為函數int JudgeLeap(int year){? ??????????? int leap = 0 ;??????????????????? if(year%100==0) ??????????????????? { ?????????????????????????? if(year%400==0) leap=1; ?????????????????????????? else leap=0;??????????????????? } ??????????????????? else leap=1;? return leap ;}//主代碼即重構為:if(year%4==0) leap = JudgeLeap(year)else leap = 0 ;總結上這個方法并不是獨立的,在實際使用過程中可以擇優選擇一種,也可以組合起來使用;另外還可采用設計模式和類的多態來重構,不過小編個人認為(僅代表個人想法),那已經是屬于類的設計層面了。
如果你想要更好的學習C語言、C++、Windows以及QT的知識! 私信回復 資料 二字領取更多學習資料。還有編程學習文件(源碼,項目實戰教學視頻以及給小白的零基礎教程),歡迎初學者和正在進階中的小伙伴們!
C/C++入門學習視頻請點擊下方了解更多:
總結
以上是生活随笔為你收集整理的else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中的系统模块_python中
- 下一篇: springboot整个缓存_Sprin