第十六章 邏輯怪和選擇狂(下)
「哈哈,這倒霉孩子,不僅他要遭,怕是還要連累很多人哦。」
想到老爹描述的畫面,我不禁樂(lè)了。這倒霉孩子拉仇恨的速度恐怕只有善意提醒老師忘了布置家庭作業(yè)能與之匹敵了。
「不錯(cuò),老師聽(tīng)了頓時(shí)火冒三丈,于是讓90分以下的同學(xué)做錯(cuò)了的題抄5遍。這個(gè)時(shí)候用if表達(dá)如下:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯(cuò)題抄三遍
}
else
{
把錯(cuò)題抄五遍
}」
「嘻嘻,這下那個(gè)倒霉孩子知道89分和99分的差距在哪兒了?!?p> 「是啊,就在那個(gè)小朋友被數(shù)十雙透露出殺氣的眼睛看著時(shí),他痛定思痛,決下一次一定要多考點(diǎn)分?jǐn)?shù),不然五支筆綁在一起真的不好握。
這時(shí)異變又起,因?yàn)?0分以上的同學(xué)不樂(lè)意了。畢竟60分是一道分水嶺,代表著兩個(gè)不同的境界??墒乾F(xiàn)在那些不足60分的人跟他們這些60分以上的人居然是相同的待遇,你說(shuō)這誰(shuí)能忍?
經(jīng)過(guò)這么一說(shuō),你們老師也覺(jué)得這樣很是不妥,于是讓30分到59分這個(gè)階段的小朋友把整張卷子抄三遍。于是乎我們的if表達(dá)式就變成了這樣:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯(cuò)題抄三遍
}
else if(分?jǐn)?shù)大于等于60分)
{
把錯(cuò)題抄五遍
}
else if(分?jǐn)?shù)大于等于30分)
{
把整張卷子抄三遍
}」
「哈,我好像明白了,if的分身else if是在矮子里邊挑高子,如果有不同的標(biāo)準(zhǔn),就可以一直挑下去。而else分身就是不滿足前邊所有if和else if條件的矮子!」
之前老爹在說(shuō)分身和魔塔游戲的時(shí)候,我的腦袋里面就有一道電光閃過(guò),只不過(guò)我一時(shí)沒(méi)有抓住?,F(xiàn)在經(jīng)過(guò)老爹這么一說(shuō),我終于明白了。
「嗯,不錯(cuò)!」
老爹欣慰地笑了,然后接著把抄卷子的例子講完了。
「就在30分以下的同學(xué)覺(jué)得自己有驚無(wú)險(xiǎn)地逃過(guò)一劫的時(shí)候,老師的一句話讓他們瞬間如遭雷擊。
老師說(shuō)讓30分以下的同學(xué)明天叫家長(zhǎng)來(lái)學(xué)校,共同商討學(xué)習(xí)提升方案……所以,這下if結(jié)構(gòu)就變成了:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯(cuò)題抄三遍
}
else if(分?jǐn)?shù)大于等于60分)
{
把錯(cuò)題抄五遍
}
else if(分?jǐn)?shù)大于等于30分)
{
把整張卷子抄三遍
}
else
{
請(qǐng)家長(zhǎng)
}」
「明白了!那我先把書上的例程做一遍?!?p> 有了老爹的講解,再加上書上的例程,我也就差不多掌握了if分支結(jié)構(gòu)。當(dāng)然,要寫程序還需要把if和else if后面小括號(hào)中的條件轉(zhuǎn)換為邏輯表達(dá)式。
在休息了十五分鐘后,老爹就開始講解另外一個(gè)分支結(jié)構(gòu)――switch。
「那么我們接下來(lái)就開始說(shuō)另外一個(gè)混沌先民,switch,依舊先看看它的屬性卡
姓名:switch
身份:混沌先民
出身年月:1972年初
技能:算無(wú)遺策」
「咦,這個(gè)switch聽(tīng)起來(lái)好像在混沌先民中是個(gè)智慧擔(dān)當(dāng)?!?p> 「很相近了!我們先來(lái)做個(gè)小調(diào)查,在平時(shí)生活中,有沒(méi)有需要你做選擇,但你又覺(jué)得很難作出選擇的情況?比如說(shuō)你和好朋友中午去食堂吃飯,看著十幾種菜,糾結(jié)半天不知道吃哪幾樣?」
「嗯吶嗯吶,經(jīng)常都有這種感覺(jué)!」
我點(diǎn)了點(diǎn)頭。
「這個(gè)叫做困難選擇癥,很多人都有這個(gè)問(wèn)題。當(dāng)然了,我們的混沌先民也不例外。
在推動(dòng)程序世界發(fā)展的過(guò)程中,往往有很多事情需要混沌先民作出選擇,但是它們和我們一樣,都有選擇困難癥。這個(gè)時(shí)候,switch這個(gè)家伙就順勢(shì)而生了。其他人只需要把選項(xiàng)以及相關(guān)信息告訴它,它能立刻作出最正確的選擇!」
「這么看來(lái),這個(gè)switch還挺厲害的呀!」
「有道是一個(gè)籬笆三個(gè)樁,switch之所以能夠快速果決地做出正確的選擇,還和它的三個(gè)小伙伴密不可分,它們分別是:case、default和break?!?p> 「哦哦,這么看來(lái)這個(gè)switch好像很難的樣子呀!」
我皺著眉頭說(shuō)道。
「嗯~,說(shuō)難也不難,說(shuō)簡(jiǎn)單也不簡(jiǎn)單。這樣,我們還是以一個(gè)具體的例子來(lái)說(shuō)明。用什么例子呢?有了!」
老爹右手握成拳,用手背撞向左手掌,雙眼之中迸射出智慧的光芒。
話音未落,老爹從口袋里把手機(jī)掏了出來(lái),不由分說(shuō)撥通了電信的客服電話10000。
「您好,歡迎致電中國(guó)電信,查詢服務(wù)請(qǐng)按1,業(yè)務(wù)咨詢請(qǐng)按2,業(yè)務(wù)辦理請(qǐng)按3,如需其他幫助請(qǐng)按0……」
在幾聲「嘟」之后,手機(jī)里頓時(shí)傳了電信客服妹子甜美的聲音。
在老爹的慫恿下,我把選項(xiàng)都嘗試了一遍,還和人工客服聊了會(huì)兒天。
「吶,switch就和剛剛的客服功能差不多,你輸入相應(yīng)的數(shù)字,switch就能幫你做對(duì)應(yīng)的事情,現(xiàn)在我們就用switch來(lái)實(shí)現(xiàn)一下剛剛客服的功能。」
「哦,原來(lái)switch是客服小姐姐啊~」
我若有所思地說(shuō)道。
「哈,這么說(shuō)也沒(méi)有錯(cuò)了。好吧,那我就帶你來(lái)實(shí)現(xiàn)這個(gè)客服小姐姐:
switch(按鍵)
{
case 1:
查詢服務(wù)
break;
case 2:
業(yè)務(wù)咨詢
break;
case 3:
業(yè)務(wù)辦理
break;
case 0:
其他幫助
break;
default:
4~9
break;
}」
「case和default我現(xiàn)在知道是什么意思了,那這個(gè)break呢?」
「這個(gè)是個(gè)很重要的知識(shí)點(diǎn),往往有很多初學(xué)者都會(huì)忘記寫break,所以在寫了case后,一定要馬上寫break,以免忘記。至于break嘛,它俗稱混沌先民中的終結(jié)者,能耐大了去了。
假設(shè)現(xiàn)在你按下了1,按道理說(shuō)應(yīng)該是走case 1進(jìn)行查詢服務(wù),結(jié)果不巧的是你忘了加break,這個(gè)時(shí)候就會(huì)繼續(xù)走case 2。要是case 2也沒(méi)有加break,程序就會(huì)挨著往下面執(zhí)行,直到遇到break為止。
如果在所有的case和default都沒(méi)有break,就會(huì)從匹配的case項(xiàng)依次執(zhí)行,直到switch結(jié)束。對(duì)了switch中可以有多個(gè)case,但只能有一個(gè)default!」
「我現(xiàn)在開始理解為什么老爹你說(shuō)switch是選擇狂了,看來(lái)做選擇這種費(fèi)力的事情還真得交給它來(lái)做。但是我有一個(gè)疑問(wèn)?!?p> 「說(shuō)說(shuō)看~」
「我發(fā)現(xiàn)剛剛那個(gè)客服小姐姐用if也可以實(shí)現(xiàn)啊,這么看來(lái)if和switch的功能產(chǎn)生了重疊,這樣switch不是可有可無(wú)的存在了么?」
「這個(gè)問(wèn)題問(wèn)得非常好,switch看起來(lái)就像是if…else if…else的特例,但是在case比較多的時(shí)候,就必須讓if修出比較多的else if分身出來(lái),這樣是比較耗費(fèi)修為的,而且可讀性也沒(méi)有switch好。
總的來(lái)說(shuō)就是,switch的效率更高,可讀性更好,所以在能夠使用switch的時(shí)候盡量使用它。
當(dāng)然了,switch也有它自己的缺點(diǎn),就是給它的關(guān)鍵信息如剛剛例子中的按鍵只能是一個(gè)確定的值,不能是范圍?!?