【Lua 筆記】條件控制 - part 3
【Lua 筆記】條件控制 - part 3
由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。
這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。
條件控制(Condition)
條件控制,大多程式語言所用到的關鍵字為「if」。
if 就是如果的意思,為什麼要用到條件控制呢?舉個例子:”如果”今天下雨,那麼我就帶雨傘。
那”如果”今天不下雨,”否則”我就不帶雨傘。
如果是關鍵字,否則同屬之。-> if、else 關鍵字
從上面例子可以看出來,”如果”今天下雨這個條件不成立,也就是今天不下雨,則會觸發”否則”這個條件。
在進入正式的語法之前,先來個重要的觀念:
控制結構的條件式結果可以是任何值,Lua 認為 false 和 nil 為假,true 和非 nil 為真(非常重要!!!!)。要注意的是 Lua 中 0 為 true:
1 | --[ 0 為 true ] |
輸出結果:
1 | 0 為 true |
lua 當中最特別的就是 0,是 true,因為不是 nil 或 false 的都是表示 true。
回到正題,以下是 if 語句的結構定義(基本格式):
1 | if (Boolean_Expression) then |
意思是說,如果 Boolean_Expression == true 這個條件成立(表示 Boolean_Expression 是 true)的話,則執行 then 以下,end 以上的程式碼區塊。
註:Boolean_Expression 稱為布林運算式,也就是經過運算過後的值會是布林值(true、false),這邊小補充一下,通常我們會說運算過後「回傳」的值。
1 | a = 10 |
輸出結果:
1 | a = 10. |
以上程式碼是說,如果確實 a == 10,則執行 then ~ end 的內容。
可以看到我們為什麼要學習邏輯運算子,原因出在此,日後當我們在寫程式時,會有更多的條件判斷需要用到邏輯運算。
另外各位也可以驗證 (0) 是否真的就是 true:
1 | if (0) then |
輸出結果:
1 | Condition is true |
if… else 語句
1 | if (Boolean_Expression) then |
多了一個 else,什麼意思呢?就是上面的 if 裡面的 Boolean_Expression 條件不成立,也就是 false 的時候,才會執行 else 下面的程式碼區塊。
1 | a = 100 |
輸出結果:
1 | a > 20 |
在這邊插入一則提醒:Lua 跟 C / C++ 一樣,是不講究縮排的程式語言,也與 Python 不同。所以可以這樣寫:
1 | a = 100 if( a < 20 ) then print("a < 20" ) else print("a > 20" ) end print("a is : ", a) |
只不過為了可讀性,還是建議各位縮排(就是按下 tab)啦~~
if… else if… else 語句
1 | if (Boolean_Expression_1) then |
多了個 elseif,也就是否則如果的意思,要執行到 elseif 的語句,則需要 elseif 前面的條件語句不成立,也就是前面那個條件要 false。
1 | a = 100 |
輸出結果:
1 | Not matching value |
可以從上面範例程式碼看到:
- 第一個條件語句(if),判斷 a 是否等於 10,發現不是,則走下一個 elseif 語句。
- 第二個條件語句(elseif),判斷 a 是否等於 20,發現不是,則走下一個 elseif 語句。
…
就這樣直到 else,因為上面條件都一一不成立,也就是 false,印出 Not matching value。
巢狀 if
1 | if (Boolean_Expression_1) then |
1 | a = 100 |
輸出結果:
1 | a is 100;b is 200 |
以上程式碼也可以寫成這樣(邏輯運算子與關係運算子的應用):
1 | a = 100 |
總結
條件語句共有以下三種:
- if
- if… else
- if… elseif… elseif… else
每個條件語句的基本格式都需要在 boolean_expression 的右邊放上 then,且在結尾的時候放上 end。
像這樣:
1 | if (boolean_expression) then |
boolean_expression 即布林運算式,又可稱為布林表達式,因為 expression 有表達的意思。
運算式複習:運算元+運算子。
e.g. a == b
回傳的值如果是以布林值表示(true 或 false 就是布林值),假設 a = 1、b = 1,而經過 a == b 的運算過後,回傳的值會是 true。



