當(dāng)我們討論完了Java的變量常量,便要開始討論語句了抛蚤,順序語句自然不用介紹廉涕,那么先從條件語句開始介紹吧
IF-ELSE
- 簡(jiǎn)單的IF
if(條件判斷){ 條件為true時(shí)執(zhí)行的語句 }
- 有點(diǎn)復(fù)雜的IF-ELSE
if(條件判斷){ 條件為true時(shí)執(zhí)行的語句 }else{ 條件為false時(shí)執(zhí)行的語句 }
- 更復(fù)雜的IF-ELSE IF-ELSE
if(條件判斷){ 條件為true時(shí)執(zhí)行的語句 }else if(條件判斷2){ 條件2為true時(shí)執(zhí)行的語句 }else{ 條件2為false時(shí)執(zhí)行的語句 }
三目運(yùn)算符
- 針對(duì)這種復(fù)雜的IF-ELSE結(jié)構(gòu)窜醉,有一種簡(jiǎn)便的運(yùn)算方法新荤,即三目運(yùn)算符所灸。a條件判斷?true則a=c:false則有a=d,舉個(gè)??脾歧。
當(dāng)a大于0的時(shí)候a=1,否則a=2托呕,這樣子是不是方便了很多呢。a>0:1:2;
Swtich
- Switch case結(jié)構(gòu)能夠清晰的展示所有條件骂租,但是case后只能跟常量祷杈,不能對(duì)變量進(jìn)行判定斑司。
switch(){ case 1: case 2: }
簡(jiǎn)化復(fù)雜的IF-ELSE判斷
-
條件表達(dá)式通常有兩種表現(xiàn)形式渗饮。第一種:所有分支都是屬于正常行為。第二種:條件表達(dá)式提供的答案只有一種是正常行為宿刮,其他都是不常見的情況互站。
第一種,需要使用if-else僵缺。
第二種胡桃,不常見的情況,單獨(dú)檢查該條件磕潮。if(isDead){ }else if(isStart){ }else if(isEnd){ }
上方代碼可以轉(zhuǎn)為
if(isDead){} if(isStart){} if(isEnd){}
-
在條件表達(dá)式的每個(gè)分支上有著相同的一段邏輯代碼翠胰。
if(isSpecial){ total=price*2; send(); }else { total=price*3; send(); }
上述代碼可以轉(zhuǎn)化為:
if(isSpecial){ total=price*2; }else { total=price*3; } send();
-
如果分支邏輯過于復(fù)雜,可以將邏輯抽取出來作為一個(gè)方法自脯,這樣更加清晰一些之景。
if(isStart){ a=a*b*c; a=a*d; }else{ a=a+b+c; a=a+d; }
可以優(yōu)化成
if(isStart){ multi(); }else{ add(); } public void multi(){ a=a*b*c; a=a*d; } public void add(){ a=a+b+c; a=a+d; }
-
合并條件表達(dá)式,如果有一系列的判斷條件膏潮,得到相同的結(jié)果锻狗,那么可以將這些條件嵌套成一個(gè)條件表達(dá)式,甚至可以將合并的表達(dá)式抽取出一個(gè)獨(dú)立的函數(shù)。
if(isStarted){ return 0; }else if(isEnded){ return 0; }else if(isNoted){ return 0; }
第一次優(yōu)化轻纪,將結(jié)果相同的條件優(yōu)化成一個(gè)條件表達(dá)式
if(isStarted||isEnded||isNoted){ return 0; }
第二次優(yōu)化油额,將條件表達(dá)式抽出一個(gè)函數(shù)
if(isMore()){ return 0; } public boolean isMore(){ return isStarted||isEnded||isNoted; }
-
去除Else的方法
-
如果程序中只有一個(gè)else,使用return 來處理
if(con){ doOne(); }else{ doTwo(); }
使用return 拒絕else
if(con){ doOne(); return; } doTwo();
或者直接使用三元運(yùn)算符:con?doOne():doTwo();
-
如果程序中有多個(gè)else 刻帚,可以使用策略模式來替換潦嘶。
if(con){ doThing1(); }else if(con2){ doThing2(); }else if(con3){ doThing3(); }
使用策略模式或者多態(tài)來拒絕else。關(guān)于策略模式可以看《每天一點(diǎn)Java知識(shí)》設(shè)計(jì)模式——策略模式
舉個(gè)??:public Class Context{ Con con; public void Context(Con con){ this.con=con; } public void doThing(){ con.doThing(); } } public interface Con{ public void doThing(); } public Class Con1{ public void doThing(){ doThing1(); } } public Class Con2{ public void doThing(){ doThing2(); } } public Class Con3{ public void doThing(){ doThing3(); } }
-