本文分成三個部分進行探討:
壹.else的省略
貳.if 資訊 then
參.if and then
else的省略
首先,我們知道if...then...else...end由四樣東西組成,但有一樣東西有時候會被省略,沒錯!就是else(否則就),就好比下面這個擷取自預設main.lua的內容:if me.isSpirit then
dofile("spirit.lua")
return
end
翻譯過來是這樣的:
如果 我是靈體 那麼就
執行檔案(檔案為spirit.lua)
return
結束敘述
你會發現在上面的程式中,並沒有提到else,這是因為用不到。為什麼用不到?很簡單的,假設上述的例子(main.lua)有else的話,大概會長這樣:
if me.isSpirit then
dofile("spirit.lua")
return
else
end
你會發現else與end中間空空的,這就是不需要的意思,因為我們的條件是(如果我是靈體),而非靈體的時候就會執行else(否則),但在非靈體的時候我們沒有要求程式執行任何指令,此時的else就是多餘的,因此我們可以省略else不寫。當然這完全不會影響到你的程式,但只限於「否則不做任何事的情形」。要注意 if、then、end 這三個不能省略喔!
總結:
若在else的情形下沒有事情要做,那麼else就可以被省略
if 資訊 then
先舉兩個範例,第一個範例:
if me.caisson.bullets == 0 then
me.talk("沒子彈了!")
else
me.talk("還有子彈可以用")
end
再來是第二個範例:
enemy = me.findClosestEnemy()
if enemy then
me.talk("發現敵人!")
else
me.talk("敵人不在附近")
end
你會發現這兩個敘述的if有點不太一樣
一個是「if me.caisson.bullets == 0 then」
另一個是「if enemy then」
第一個範例直接翻譯過來就是「如果 身上剩餘子彈數 等於 0」
很順口,完全沒有問題
很順口,完全沒有問題
但第二個範例翻譯後會變成「如果 enemy 那麼就」
這時候各位可能會想問,什麼是「如果 enemy 那麼就」
由於我們在if enemy then前面已先指定「me.findClosestEnemy」給變數「enemy」
所以我們知道這個句子就是「如果 最接近玩家的敵人 那麼就」
但「如果 最接近玩家的敵人 那麼就」直接唸過去似乎沒什麼意涵
不過這邊告訴各位,這其實是一種特殊的if的敘述方式
這個「如果 enemy 那麼就」是「if 資訊 then」的敘述方式
它所代表的含意是,「如果 enemy有意義 那麼就」
也就是說如果你只給他資訊,而不用關係運算子去做比較時
它會自動解釋為「如果 資訊不等於nil 那麼就」的情形
不等於的寫法是「~=」,參見<關係運算子>
所以上面的例子其實也能寫成if enemy ~= nil then 的形式
總結:
「if enemy then」是「if enemy ~= nil then」的縮寫
總結:
「if enemy then」是「if enemy ~= nil then」的縮寫
實作練習:
enemy = me.findClosestEnemy()
friend = me.findClosestFriend()
if enemy then
game.logState("enemy","發現")
else
game.logState("enemy","未發現")
end
if friend then
game.logState("friend","有")
else
game.logState("friend","有")
else
game.logState("friend","沒有")
end
--有敵人時看板會出現enemy => 發現
--沒有敵人時看板會出現enemy => 未發現
--有隊友時看板會出現friend => 有
--沒有隊友時看板會出現friend => 沒有
--試著改寫成if enemy ~= nil then並觀察這個程式是否會被影響
end
--有敵人時看板會出現enemy => 發現
--沒有敵人時看板會出現enemy => 未發現
--有隊友時看板會出現friend => 有
--沒有隊友時看板會出現friend => 沒有
--試著改寫成if enemy ~= nil then並觀察這個程式是否會被影響
if and then
if可以搭配上and(而且)來使用,用以同時檢查多個項目,也可以有多個and,例如:
num1 = 1
num2 = 2
num3 = 3
if num3 > num1 and num2 > num1 and num2 < num3 then
game.logState("and","成功")
else
game.logState("and","失敗")
end
在路亞修行中執行上面這個程式的話,你的路亞思路看板上就會出現
[00:00:56] and => 成功
這就代表if and then的敘述是沒問題的
如果你將上面的程式中的關係運算子改變一下的話,像這樣:
num1 = 1
num2 = 2
num3 = 3
if num3 > num1 and num2 > num1 and num2 == num3 then
game.logState("and","成功")
else
game.logState("and","失敗")
end
那麼這個敘述就會不通過, 因為後面的num2 == num3不成立
看板上將會顯示
看板上將會顯示
[00:00:38] and => 失敗
這次的if...then...else...end進階課程就這樣告一段落囉~
到目前為止都還是學單一的if敘述
但在之後的高階課程中,我們將會探討if裡面還有if的敘述
只要能看得看得懂高階課程中的各種例子
那就代表你對if...then...else...end的敘述已經有一定程度的認知
玩起路亞修行時也就會更容易上手囉!
相關參考文章連結:
相關參考文章連結:
沒有留言:
張貼留言