導航:首頁 > 程序命令 > 程序員為啥要寫if

程序員為啥要寫if

發布時間:2022-09-03 16:32:19

『壹』 使用Log4j時,為什麼要寫if

1)直接使用logger.info(「User」+userId) 來輸出log,也能夠達到log級別為info或在info以下時才輸出:(「User」+userId),因為logger.info方法內部有判斷輸出級別的代碼。但是在進入logger.info函數之前,(「User」+userId)這個表達式已經通過運算拼接成了一個字元串;而如果事先使用if(logger.isInfoEnabled())進行判斷,那麼當log級別在info以上時,就能省去上述的字元串操作,在高並發和復雜log信息拼接的情況下,使用這種標準的方法輸出log能夠省去不小的系統開銷。另外,如果構造log信息的過程需要大量字元串操作,建議使用StringBuilder來完成字元串拼接。
2)error及其以上級別的log信息是一定會被輸出的,所以只有logger.isDebugEnabled和logger.isInfoEnabled方法,而沒有logger.isErrorEnabled方法。

『貳』 為什麼很多程序員不用switch,而是大量的if……else if

答案:主要因為switch不適合業務系統的實際復雜需求,業務不斷的變更迭代,一更改需求,條件的復雜度高了,switch無力處理。

switch優點
那麼什麼時候適合switch,它的場景是:基於單一變數的值(如枚舉),這樣的可讀性比if條件更清晰。

switch缺點
從上面的場景來看,實在太局限,我來簡單說一下它的一些缺點吧:

1. 現實的業務場景很復雜,條件不單一,一旦需求變更,維護代碼相當崩潰。

2. switch經常忘記寫break,估計很多人一不小心就忘記寫了。如果你看過google的代碼規范,你會發現,Google對switch的要求非常多。

switch的封裝才更靈活

其實switch有人還在用也有一部分是 歷史 原因,但是隨著 科技 的發展,原有的設計以及落後了。

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

IF語句的好處

通過上面描述的缺點也就是if語句更靈活的地方,根據業務進行邏輯條件編寫,可維護性高。同時只要寫的代碼質量高,可讀性也就會更高。

建議
現實的業務實際是很復雜的,我也不建議一定要用大量的if……else if,而是應該盡早返回來減少嵌套,這樣增加了可讀性以及降低維護的成本。

我個人覺得switch其實非常多餘。

1 大部分場景,都是2到3個可能分支,用個if else就可以了,除非有4 個以上分支,太多else顯得不好看,才考慮用switch.

2 switch限制多。switch必須是常量變數。if後面可以寫任意表達式。

3用法復雜,case後面要麼break,要麼return,要是不寫,居然還會繼續執行剩下的分支,對於新手來說分分鍾掉坑。

4 寫法上其實也不比if else優雅簡潔,switch xxx case xxxx ….

所以,switch徒增復雜性,真的不怎麼實用。

如果有10000種switch的可能性,有1000000個值需要被處理,怕是你們說的這些個switch的好處就完全消失了,預期平均每次要比較5000次,1000000個值,總計要比較50億次,不知道你們的CPU是啥主頻能扛得住這個計算量,針對這種情況的終極武器還是hash,根據不同的語言,hash的value可以是匿名函數,可以是介面的不同實現,用hash來快速確定處理演算法,而不是switch

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

這個原因很簡單,因為switch語法結構最後編譯還是通過if...else if來完成代碼的,所以從效率角度來說和if...else if一樣的。但是switch對比條件比較單一,絕大多數支持switch的編程語言都支持等於比較,也就是說變數只能等於case中的條件才會執行代碼塊。但是現實情況中,對比條件絕大多數比單一等於運算要復雜得多,因此很多程序員就直接使用if...else if。但是if...else if的結構,後期維護起來會比較不清晰,畢竟沒有Case...Break那麼直觀。但是添加一些註解應該還是能解決這個問題的。

所以,我現在能使用Switch的時候還是會使用switch,畢竟後期代碼維護起來方便點。不過更多時候還是用if...else if。

switch只能用於簡單判斷,不支持表達式。

沒有if else 使用方便。

從C/ C++來看,當分支較多且switch要比較的值是連續的話,執行速度遠遠遠遠快於if,因為switch是直接跳到目標代碼執行的,而if則需要執行很多條語句,慢的不是一點點,一般編譯器會根據分支數量和比較的值是否連續生成不同匯編代碼,如果編譯器判定不能提升速度的話,switch生成的匯編代碼和if是一模一樣的沒有任何區別。

至於很多人不用switch我覺得可能是:

1.為了方便寫代碼,思維習慣隨手就用if寫了;

2.可能根本就不懂為什麼要用switch吧。

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

有些朋友編碼喜歡走一步看一步,越往後越發現前面留了好多坑需要後期再做進一步修正。有些朋友不把數據的分支想全面就會用很多if…else…來磊代碼。

不是不想用Switch,只是因為編碼時,太隨性。所以想做專職的開發人員,對代碼的宏觀視角是必不可少的,並且編碼時還要為今後的修改留有餘地。

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

比如說,變數i要求大於10,小於20,一條if(i>10&&i

『叄』 為什麼要在else前加if

您好,很高興回答您的問題。
else的英語單詞表示的是否則的意思,也就是說在另一個已給出的條件基礎上,對於不滿足已知條件而給出的另一種結果。
在程序設計中,也是延續了這個單詞的含義,把else作為關鍵字,表示不滿足上面條件時而進行的操作。所以肯定要給出if表示給出的條件,然後若有不滿足條件的,就用else來表示可以進行的操作。

『肆』 C語言編程題

#include<stdio.h>
main()
{
int a=10,b=0;
if(a=12) /*這個地方將a賦值為12,取代原來的10*/
{a=a+1;b=b+1;} /*這個地方將a和b各加1*/
else /*沒有執行*/
{a=a+4;b=b+4;} /*沒有執行*/
printf("%d;%d\n",a,b);
}// 最後面輸出a=13;b=1

--------------------------------

主要是弄錯了 = 和 ==
= 是賦值
== 是才判斷.

-----------------------------------------------
4.3 if 語句
if語句是C++/C語言中最簡單、最常用的語句,然而很多程序員用隱含錯誤的方式寫if語句。本節以「與零值比較」為例,展開討論。

4.3.1 布爾變數與零值比較
l 【規則4-3-1】不可將布爾變數直接與TRUE、FALSE或者1、0進行比較。
根據布爾類型的語義,零值為「假」(記為FALSE),任何非零值都是「真」(記為TRUE)。TRUE的值究竟是什麼並沒有統一的標准。例如Visual C++ 將TRUE定義為1,而Visual Basic則將TRUE定義為-1。
假設布爾變數名字為flag,它與零值比較的標准if語句如下:
if (flag) // 表示flag為真
if (!flag) // 表示flag為假
其它的用法都屬於不良風格,例如:
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)

4.3.2 整型變數與零值比較
l 【規則4-3-2】應當將整型變數用「==」或「!=」直接與0比較。
假設整型變數的名字為value,它與零值比較的標准if語句如下:
if (value == 0)
if (value != 0)
不可模仿布爾變數的風格而寫成
if (value) // 會讓人誤解 value是布爾變數
if (!value)

4.3.3 浮點變數與零值比較
l 【規則4-3-3】不可將浮點變數用「==」或「!=」與任何數字比較。
千萬要留意,無論是float還是double類型的變數,都有精度限制。所以一定要避免將浮點變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式。
假設浮點變數的名字為x,應當將
if (x == 0.0) // 隱含錯誤的比較
轉化為
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允許的誤差(即精度)。

4.3.4 指針變數與零值比較
l 【規則4-3-4】應當將指針變數用「==」或「!=」與NULL比較。
指針變數的零值是「空」(記為NULL)。盡管NULL的值與0相同,但是兩者意義不同。假設指針變數的名字為p,它與零值比較的標准if語句如下:
if (p == NULL) // p與NULL顯式比較,強調p是指針變數
if (p != NULL)
不要寫成
if (p == 0) // 容易讓人誤解p是整型變數
if (p != 0)
或者
if (p) // 容易讓人誤解p是布爾變數
if (!p)

4.3.5 對if語句的補充說明
有時候我們可能會看到 if (NULL == p) 這樣古怪的格式。不是程序寫錯了,是程序員為了防止將 if (p == NULL) 誤寫成 if (p = NULL),而有意把p和NULL顛倒。編譯器認為 if (p = NULL) 是合法的,但是會指出 if (NULL = p)是錯誤的,因為NULL不能被賦值。
程序中有時會遇到if/else/return的組合,應該將如下不良風格的程序
if (condition)
return x;
return y;
改寫為
if (condition)
{
return x;
}
else
{
return y;
}
或者改寫成更加簡練的
return (condition ? x : y);

『伍』 在c語言里,int num=1; if(num==2)與if(2==num)兩個判斷句哪個更好為什麼還有更好的辦法么

if(2==num)更好,像這樣的判斷一般有經驗的程序員都會寫if(常量==變數),因為這樣寫一旦寫掉了一個「=」,在編譯的時候就會檢查出語法錯誤,編譯無法通過,而寫成if(變數==常量),即使寫掉了一個「=」編譯也會通過,沒有語法錯誤,但是卻是邏輯錯誤,在大程序中這種錯誤是很難檢查出來的。

閱讀全文

與程序員為啥要寫if相關的資料

熱點內容
android檢查是否安裝 瀏覽:371
蘋果手機編輯pdf文件 瀏覽:454
android系統名字 瀏覽:963
安卓手機如何進去有求必應屋 瀏覽:432
指數除法運演算法則底數不同 瀏覽:894
90壓縮干糧09壓縮干糧 瀏覽:516
android線程池框架 瀏覽:481
手機自帶解壓能解壓哪些文件 瀏覽:804
linux安裝hba驅動 瀏覽:119
java構造函數new 瀏覽:668
怎麼查家裡電器耗電量app 瀏覽:506
原神一直顯示重新連接伺服器怎麼辦 瀏覽:826
一般用途軸流式壓縮機 瀏覽:926
沒學歷的怎麼學編程 瀏覽:901
華為的隱藏相冊無法加密 瀏覽:782
聯通套餐app怎麼設置 瀏覽:752
關於刪除鏈表的演算法描述 瀏覽:894
標准盤和壓縮盤的區別 瀏覽:47
銀行存款驗證碼JAVA編程 瀏覽:111
word轉pdf軟體免費版 瀏覽:139