色色一区二区三区,一本大道道久久九九AV综合,国产香蕉97碰碰视频va碰碰看,综合亚洲国产2020

    <legend id="mljv4"><u id="mljv4"><blockquote id="mljv4"></blockquote></u></legend>

    <sub id="mljv4"><ol id="mljv4"><abbr id="mljv4"></abbr></ol></sub>
      <mark id="mljv4"></mark>
      人文藝術(shù) > 為什么很多程序員不用switch,而是大量的if……else if?

      為什么很多程序員不用switch,而是大量的if……else if?

      2020-10-03 13:38閱讀(62)

      為什么很多程序員不用switch,而是大量的if……else if?:相比之下Switch可以讓人更宏觀的去分析代碼。編寫代碼和閱讀代碼需要宏觀和微觀兩種視角,宏觀看架構(gòu)和

      1

      相比之下Switch可以讓人更宏觀的去分析代碼。編寫代碼和閱讀代碼需要宏觀和微觀兩種視角,宏觀看架構(gòu)和數(shù)據(jù)走向,微觀看語法和功能的片段。

      有些朋友編碼喜歡走一步看一步,越往后越發(fā)現(xiàn)前面留了好多坑需要后期再做進(jìn)一步修正。有些朋友不把數(shù)據(jù)的分支想全面就會(huì)用很多if…else…來磊代碼。

      不是不想用Switch,只是因?yàn)榫幋a時(shí),太隨性。所以想做專職的開發(fā)人員,對(duì)代碼的宏觀視角是必不可少的,并且編碼時(shí)還要為今后的修改留有余地。

      2

      答案:主要因?yàn)閟witch不適合業(yè)務(wù)系統(tǒng)的實(shí)際復(fù)雜需求,業(yè)務(wù)不斷的變更迭代,一更改需求,條件的復(fù)雜度高了,switch無力處理。

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

      那么什么時(shí)候適合switch,它的場(chǎng)景是:基于單一變量的值(如枚舉),這樣的可讀性比if條件更清晰。

      switch缺點(diǎn)

      從上面的場(chǎng)景來看,實(shí)在太局限,我來簡(jiǎn)單說一下它的一些缺點(diǎn)吧:

      1. 現(xiàn)實(shí)的業(yè)務(wù)場(chǎng)景很復(fù)雜,條件不單一,一旦需求變更,維護(hù)代碼相當(dāng)崩潰。

      2. switch經(jīng)常忘記寫break,估計(jì)很多人一不小心就忘記寫了。如果你看過google的代碼規(guī)范,你會(huì)發(fā)現(xiàn),Google對(duì)switch的要求非常多。

      switch的封裝才更靈活


      其實(shí)switch有人還在用也有一部分是歷史原因,但是隨著科技的發(fā)展,原有的設(shè)計(jì)以及落后了。

      有些編程語言,如Python都沒有switch這種語法。當(dāng)然也有部分新語言Golang和Kotlin還是繼承下來,但是又把switch包裝了一下,去掉了令人誤會(huì)的語法,這才讓switch變得靈活起來了。 如果不封裝,很難用。

      IF語句的好處

      通過上面描述的缺點(diǎn)也就是if語句更靈活的地方,根據(jù)業(yè)務(wù)進(jìn)行邏輯條件編寫,可維護(hù)性高。同時(shí)只要寫的代碼質(zhì)量高,可讀性也就會(huì)更高。

      建議

      現(xiàn)實(shí)的業(yè)務(wù)實(shí)際是很復(fù)雜的,我也不建議一定要用大量的if……else if,而是應(yīng)該盡早返回來減少嵌套,這樣增加了可讀性以及降低維護(hù)的成本。

      3

      為什么很多人糾結(jié)于這些問題?什么用if。。。else。。。什么不能用goto之類的?

      這些人真的做過項(xiàng)目嗎?

      誰說程序員不用switch的?大量的if。。。else有什么問題嗎?

      以這些初級(jí)到不能再初級(jí)的問題來劃分一個(gè)程序員的好壞,來判定能力的高低嗎?

      我從來不覺得有什么語句是優(yōu)于其他語句的,也不覺得什么語句是能用或者不能用的。都得放到實(shí)際項(xiàng)目中去。滿足項(xiàng)目需要是第一要素。

      如果有一個(gè)程序員能把一個(gè)項(xiàng)目全部都用if。。。else完成,我覺得也是很牛逼的。我曾經(jīng)就全部用if。。。else完成了一個(gè)條件分支還算比較多的功能(閑的蛋疼),分支一多,這些判據(jù)之間的邏輯關(guān)系會(huì)讓人腦殼疼。離職時(shí)轉(zhuǎn)給其他同事的時(shí)候這部分就非常頭疼。你說這部分難吧,也不難,語法簡(jiǎn)單邏輯清晰。但是要做什么改動(dòng)吧,好像也不太敢,條件太多了,牽一發(fā)而動(dòng)全身啊。我估計(jì)這代碼傳個(gè)兩三代,要么徹底推倒重寫,要么就變成了祖?zhèn)鞔a。。。

      4

      switch只能用于簡(jiǎn)單判斷,不支持表達(dá)式。

      沒有if else 使用方便。

      5

      作為程序員來說,我更喜歡switch的結(jié)構(gòu),更直觀更容易找到相應(yīng)的代碼塊。不過為什么很多程序員不用Switch,而是使用大量的if...else if的結(jié)構(gòu),甚至像Python已經(jīng)不支持原生Switch語法了?

      這個(gè)原因很簡(jiǎn)單,因?yàn)閟witch語法結(jié)構(gòu)最后編譯還是通過if...else if來完成代碼的,所以從效率角度來說和if...else if一樣的。但是switch對(duì)比條件比較單一,絕大多數(shù)支持switch的編程語言都支持等于比較,也就是說變量只能等于case中的條件才會(huì)執(zhí)行代碼塊。但是現(xiàn)實(shí)情況中,對(duì)比條件絕大多數(shù)比單一等于運(yùn)算要復(fù)雜得多,因此很多程序員就直接使用if...else if。但是if...else if的結(jié)構(gòu),后期維護(hù)起來會(huì)比較不清晰,畢竟沒有Case...Break那么直觀。但是添加一些注解應(yīng)該還是能解決這個(gè)問題的。

      所以,我現(xiàn)在能使用Switch的時(shí)候還是會(huì)使用switch,畢竟后期代碼維護(hù)起來方便點(diǎn)。不過更多時(shí)候還是用if...else if。

      6

      因?yàn)樽铋_始情況少,幾個(gè)else if沒了,后面增加需求,情況復(fù)雜了,程序員一直加所以多了

      7

      國內(nèi)程序員只要能把程序弄出來好用就行了,誰還在意代碼的嚴(yán)謹(jǐn)和運(yùn)行速度呢?同樣的多分支判斷,switch比else if強(qiáng)太多了,比如10個(gè)分支判斷,前者判斷一次,后者依次判斷10次!

      8

      不是盡量別用,而是不合適沒法用,合適得時(shí)候該用還是用。

      比如說,變量i要求大于10,小于20,一條if(i>10&&i<20)就解決了問題,如果用switch,那豈不是自找麻煩。

      又如變量i有5個(gè)固定返回值,10,20,30,40,50,那么用switch比較適合,用if也可以。

      對(duì)于多變量判斷,多重判斷,復(fù)雜判斷,還是靠if,switch幾乎無能為力。

      所以,switch多用在簡(jiǎn)單的枚舉,對(duì)于很復(fù)雜的條件判斷幾乎無能無力,if則用在所有判斷時(shí)候。簡(jiǎn)單的枚舉又不很多,所以if最常見

      9

      會(huì)提這個(gè)問題的,估計(jì)根本沒多少開發(fā)經(jīng)驗(yàn)。實(shí)際項(xiàng)目中,基本上都是用if的。

      我就直接說最關(guān)鍵的原因吧: switch 只能對(duì)一個(gè)變量進(jìn)行處理,但是實(shí)際情況是業(yè)務(wù)邏輯通常需要判斷多個(gè)變量。

      一些人可能會(huì)說,當(dāng)前就一個(gè)判斷一個(gè)變量啊,可以用swich。然而,這個(gè)想法也是局限性的,因?yàn)橐紤]后期可能會(huì)增加變量來判斷。僅僅少數(shù)情況才可以用switch, 大部分都建議用if

      10

      首先題外話不用switch是因?yàn)闆]錢。

      其次,switch用法特殊,一般用于固定的幾個(gè)值去比較判斷,要是你來個(gè)復(fù)合邏輯表達(dá)式就不太好寫。而且,switch不直觀,代碼層次也沒有if else簡(jiǎn)單明了,每個(gè)里面還要用break中止。且實(shí)際編寫代碼過程中能用switch的,用if else均能替代。有點(diǎn)類似continue,雞肋。

      最后,并不是所有編程語言都有的switch,為什么沒有?因?yàn)橛刑娲?/p>

      相關(guān)問答推薦

      熱點(diǎn)關(guān)注

      華裔女賭王就此沒落,生前讓所有 濃情端午粽飄香,青浦邀你“云體 上海:“云端”展現(xiàn)端午節(jié)文化內(nèi) “甜咸大戰(zhàn)”!明星藝人們喜歡什 如何做一個(gè)男人喜歡的情人(如何 當(dāng)你和你同時(shí)出現(xiàn)在同一個(gè)場(chǎng)景中 如何在昏暗的光線下設(shè)置快門速度 教育在生活中的價(jià)值是什么? 世上做壞事的人死后會(huì)面臨什么因 拜登就任總統(tǒng)后的第一步是什么? 同意/不同意:人生最重要的目標(biāo) 二戰(zhàn)后,德國在調(diào)和分歧方面做得 亞伯·林肯恨白人嗎? 一個(gè)編輯能把你的故事毀得有多嚴(yán) 現(xiàn)在的iPhone6還能堅(jiān)持再用一年 曹操為什么不殺司馬懿? 現(xiàn)在買房是不是最便宜的時(shí)候,現(xiàn) 我身邊的農(nóng)業(yè)銀行營業(yè)廳關(guān)了,AT 歐洲媒體評(píng)選CBA最有實(shí)力球員, 榮耀play的6+128和榮耀8X的6+128 螞蟻集團(tuán)是科技公司還是金融公司 請(qǐng)問機(jī)友華為mate30P與華為mate3 聽說老詹修剪一次指甲需要5小時(shí) 為什么說寶寶“一月睡二月哭三月 戴笠人稱戴老板,這個(gè)是怎么叫出 沒有工作能一次性補(bǔ)繳社保么? 我想知道定向師范生和免費(fèi)師范生 肺癌引起的咳嗽是怎樣的呢? 5000mAh電池的5G手機(jī)推薦嗎?要 恒大亞冠表現(xiàn)“差強(qiáng)人意”,你覺