從零開始當工程師 -2 邏輯判斷類(1) – If-Else、Switch

上一次講完基本的資料結構(型態)

這一期我們來說一下程式的基本,邏輯判斷相關的東西

邏輯判斷,顧名思義,最簡單的就是bool的true跟false,也就是簡單的「是」以及「不是」

運算子 (== 、!=、&&、||、! )

再往下繼續之前得先對常見的運算子有些了解

分別是

  • == (Equal) ,即為是否相等
  • != (Not Equal),== 的反義詞,是否不相等
  • && (And) ,「和」的英文,前後的條件(布林)是否均成立
  • || (Or) , 「或」的英文,前後的條件(布林)任一成立即可
  • ! (Not) ,基本上可以認為是反轉
what is not in program,just like the reverse card in uno

分別舉例一下

#1 . 1 是否等於2 ➜  1 == 2 ,自然不成立,故回傳false

#2. 蝨子跟獅子是不一樣的嗎 ➜ 蝨子 != 獅子,答案是肯定的(不同物種的吧),故回傳true

#3 「1是否等於2」跟「2是否等於2」 ➜ (1 == 2) && (2 == 2)

If – Else

邏輯判斷的老大哥,底下又有

  • if 如果(第一個)
  • else if 如果前面都不成立
  • else 剩下的我全要的

而其中只有 if 可以單獨存在,而其他兩個脫離了if 就是缺了水的魚一樣沒辦法存在

語法的話 if 跟 else if 都必須包含一個布林值來做判斷(else 就是別人不要的,全盤接收這樣)

舉例來說,我們現在想要吃午餐

但我們有一套吃午餐的邏輯,那就是根據禮拜幾來覺得要吃什麼 (假設今天是禮拜二)

如果禮拜一就吃「義大利麵」,禮拜五吃「咖哩飯」,其他日子就是吃一般便當

這時我們應該怎麼表示呢?

你可能會想說,那不就只能吃便當嗎?

對啊,可是你這樣跟電腦說…它怎麼聽得懂啊 (電腦心理苦…但它不說)

所謂的程式語言即是把我們的語言轉成電腦的語言

int weekDay = 2;             //初始化今天禮拜幾

if(weekDay == 1)
{
    return "義大利麵";
}
else if(weekDay == 5)
{
    return "咖哩飯";
}
else
{
   return "一般便當";
}

可以看到條件從上依序往下,如果有任意一個成立就會回傳(就不會繼續往下了)

以這題範例來說,

  • 遇上第一個條件 ( 2 == 1) ,那當然是false,不成立所以繼續往下
  • 第二個條件 (2 == 5),也不成立餒,只能在看下後面了
  • 最後只能進到貪心的else 裡面了(可能是垃圾桶也不一定),所以最後回傳的就是「一般便當」

所以可以得出結論

If (條件) 、Else If(條件)、Else(不用條件)

Switch

大家看著 If的範例會不會想說,那如果有很多很多條件,難道我也只能寫很多If 嗎?

當然不是!

switch就可以很好的解決這個問題,不是大家都愛的這個switch

switch picture(not the programmer's switch haha)
(我也想要一台)

switch的英文即為開關、轉換,即可直接依照符合運算式來選取要執行區塊

以剛剛的午餐範例來說

int weekDay = 2;             //初始化今天禮拜幾
string lunch;                //結果

switch(weekDay)              //switch(x) ➜ x為要判斷的參數
{
    case 1:
        lunch = "義大利麵";
        break;
    case 5:
        lunch = "咖哩飯";
        break;  
   default:                  //預設,即為無任何條件符合
        lunch = "一般便當";
        break; 
}
return lunch;

可以看到Switch寫起來跟If 還是有不太一樣的地方

第一是需要加上break ,如此才會在找到符合之後離開switch區塊

第二是沒有Else ,但有跟其作用類似的defalut (一個是其餘的,一個是預設的)

如果現在有多個相似的條件(本來只有禮拜五要吃咖哩,現在四、五都要吃),也只要改成這樣

case 4:
case 5:
        lunch = "咖哩飯";
        break; 

是不是還挺容易的

Switch最主要的優勢即為速度上,因為在實際處理上,會用類似字典的方式來搜尋(用更多的空間來換取執行效率)

所以通常來說是快於一個條件一個條件往下判斷的If-Else的(如果第一個就成立那肯定If更快)

這次先講了幾個常見運算子 (== 、!=、&&、||、! )、If-Else及Switch,之後應該還會再寫一章有關剩餘的邏輯判斷類的函式

希望想了解工程師的你/妳看到這篇文章時能有一點點收穫!

“Act the way you'd like to be and soon you'll be the way you act.”
                                             Leonard Cohen

4 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *