日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else

發(fā)布時(shí)間:2024/9/15 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有人喜歡if-else,稱之為程序結(jié)構(gòu)化的靈魂。確實(shí),就計(jì)算機(jī)邏輯來講,if-else最符合計(jì)算機(jī)非0即1的邏輯。就連在工作時(shí),項(xiàng)目經(jīng)理在給我們描述業(yè)務(wù)邏輯時(shí)也會來兩句if如何,else如何!但是,也有人對代碼中出現(xiàn)過深的if-else嵌套感到深惡痛絕。因?yàn)椴徽撌窃贒ebug、功能擴(kuò)展、后期維護(hù)還是項(xiàng)目代碼開源共享、項(xiàng)目交接等情況下,若是遇到十幾層深度成百上千行的if-else嵌套代碼,任何人都會頭疼不已。

總結(jié)一下if-else的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

1、最容易上手;

2、邏輯性強(qiáng),在實(shí)現(xiàn)業(yè)務(wù)時(shí)比較實(shí)用;

缺點(diǎn):

1、嵌套過深,測試?yán)щy;

2、維護(hù)困難,若要修改外層邏輯有可能會影響到深層次的邏輯;

3、功能擴(kuò)展可能會出現(xiàn)困難,需要找到對應(yīng)的分支,重新梳理邏輯;

4、代碼臃腫,閱讀性差;

總之,if-else在程序設(shè)計(jì)中是不可避免的,作為程序員能做的就是減少嵌套,提升代碼的可閱讀性和質(zhì)量。但是,這些都需要一定的經(jīng)驗(yàn),對于新手來說實(shí)現(xiàn)功能已經(jīng)就十分困難了,若還需在過程中考慮這些無疑是雪上加霜。所以,小編就個(gè)人經(jīng)驗(yàn)分享一些小技巧,希望能幫助大家提升代碼質(zhì)量。

Switch case 替代,這個(gè)大家都知道,當(dāng)判斷條件是某個(gè)變量的值時(shí),可以用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;?????? }

案例

針對后文所提及的方法,有一個(gè)很經(jīng)典的演示案例--輸入一個(gè)年份,判斷是否為閏年。其邏輯是:首先需要判斷年份是否能被4整除,能被4整除還需要分整百年和非整百年,整百年還必須被400整除才是閏年。用代碼實(shí)現(xiàn)如下:

減少沒必要的if-else,有時(shí)候if只是拿來判斷某些變量是否異常,那么主程序那一塊沒必要加if-else,只需要在異常處加if判斷;

如案例可以用這種方法重構(gòu)如下:

?????? leap=0;?????? if(year%4==0) ?????? { ????????????? leap=1;????????????? if(year%100==0) ????????????? { ??????????????????? if(year%400 !=0) leap=0;????????????? } ?????? }

優(yōu)化完,明顯清爽很多。像上述案例只是賦值用這種重復(fù)賦值的方式可以避免掉一部分的else出現(xiàn),但是如果分支是運(yùn)行不同的函數(shù)呢?此時(shí),就需要換一種方式,那就是提前return,例如:

if(condition){?? dosomething();?}else{?? dootherthing();?}//采用提前return法則,去掉一個(gè)elseif(condition){?? dosomething();????? return ;?}dootherthing();

三目運(yùn)算符替代,三目運(yùn)算符可以很好的替代簡單的if-else邏輯,還是用案例來演示,用三目運(yùn)算符重構(gòu)后:

year%4==0?(year%100 ==0?(year%400==0?1:0):1):0 ;

但是這僅僅只是減少了代碼量,在閱讀友好性上反而降低了。三目運(yùn)算符只適合替代簡單的if-else;

合并嵌套,通過將判斷條件用邏輯運(yùn)算符&&和||合并,從而減少嵌套。案例代碼可以重構(gòu)為:

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拆分成多個(gè)獨(dú)立的if-else代碼塊,或者平衡if-else中嵌套深度。案例代碼可以重構(gòu)為:

?????? leap = 0 ;?????? if(year%100==0)?????? {????????????? if(year%400 ==0) leap = 1 ;?????? }else?????? {????????????? if(year%4 == 0)leap = 1 ;?????? }

封裝,如果遇到嵌套實(shí)在過深沒有辦法優(yōu)化的話,可以將上下層盡量剝離并將部分嵌套封裝為函數(shù),以傳參的方式將條件變量傳遞給函數(shù)。

//將部分嵌套封裝為函數(shù)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 ;}//主代碼即重構(gòu)為:if(year%4==0) leap = JudgeLeap(year)else leap = 0 ;

總結(jié)上這個(gè)方法并不是獨(dú)立的,在實(shí)際使用過程中可以擇優(yōu)選擇一種,也可以組合起來使用;另外還可采用設(shè)計(jì)模式和類的多態(tài)來重構(gòu),不過小編個(gè)人認(rèn)為(僅代表個(gè)人想法),那已經(jīng)是屬于類的設(shè)計(jì)層面了。

如果你想要更好的學(xué)習(xí)C語言、C++、Windows以及QT的知識! 私信回復(fù) 資料 二字領(lǐng)取更多學(xué)習(xí)資料。還有編程學(xué)習(xí)文件(源碼,項(xiàng)目實(shí)戰(zhàn)教學(xué)視頻以及給小白的零基礎(chǔ)教程),歡迎初學(xué)者和正在進(jìn)階中的小伙伴們!

C/C++入門學(xué)習(xí)視頻請點(diǎn)擊下方了解更多:

總結(jié)

以上是生活随笔為你收集整理的else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。