2013年4月17日 星期三

CORONA SDK 與 LUA 語法





我們在前面說過,Corona SDK 用來開發行動應用的程式語言是 LUA 語言,所以對於新手要開始學 Corona SDK ,那就一定要學 LUA 語言。就我個人半路出家的經驗,我在學 LUA 語言之前,我會的是 BASIC, C 這種老舊的程式語言(抱歉,我有點歲數了)。後來在網際網路開始盛行後我自學了 PERL, PHP 等等語言。後來為了開發行動應用,也讀了一些 Objective-C 跟 Java 的書。我發現你只要有程式邏輯在腦海裡,用什麼語言來開發倒是沒差很多。我剛開始在 Corona SDK 文件還不齊全時,就摸索學習使用這套工具開發,主要的原因是我希望可以只維護一套程式碼,就可以在不同的平台上做 APP,也因此我選了 Corona SDK,就這樣有多學了一種 LUA 語言。

言歸正傳,我要引導你快速入門 Corona SDK,我要說 LUA 語言就只說重點,LUA 的重點是 Table,弄懂了 Table 就幾乎可以寫程式了。那什麼是 LUA 的 Table 呢?我這樣說比較有趣,想像 Table 就像一個銀行,它可以存很多東西,古時候希臘人去銀行存東西,管理人就把一片瓦片打破成兩片,然後你一片,管理人一片。等你要來拿存的東西的時候,大家一比對,裂痕合的起來的就對了,可以領走東西。這個瓦片叫做 KEY,意思是說有了 KEY 才能存取你要的內容。所以英文這樣說:
An item in a Lua table consists of two things: a key (the authenticating token) and a value (the goods deposited).
你說,那這不就是陣列 Array 嗎?隨便想你怎麼叫它,我沒意見,倒是使用它的方法,卻有規定。我們來看看下面這段 LUA 的程式碼:


-- 他說 t 是一個 lua table 裡面有兩個 key 叫 "heinz" 跟 100
-- 還有兩個 value 是 57 跟 true。
t = { ["heinz"] = 57, [100] = true }
-- 這跟下面這樣寫是相同的
t = {}
t["heinz"] = 57
t[100] = true

PS: 給您提供一個網路上的好東西,讓可以在你的瀏覽器裡面跑 LUA 程式 => http://www.lua.org/demo.html 。然後你可以把這裡的示範打進去(或 copy paste 一下),就可以看到結果。

那如果程式這樣寫

t = { ["heinz"] = 57, [100] = true, 300 }
w = { ["heinz"] = 57, [100] = true, 300 }
u = t
print (t == u)
print (t == w)
print (t[1],t[100])


那前面那個 print 的結果是 true 後面則是 false,因為 Table 是一個指標(pointer),t 和 w 是不同的指標。至於第三個 print 就有趣了,t[1] 的值是 300,t[100] 的值是 true。你早知道這結果了對不對?原來 LUA 是允許宣告時不給 key 的,而當你不給 key 的時候,它就自動從 1,2,3,4.... 的順序排列給一個 key。所以那個 t = { ["heinz"] = 57, [100] = true, 300 } 的第三個值就是當成沒有給 key 的情況,系統自動給了一個 key 1。這個原則也反映在函式呼叫時候,參數的傳遞。(LUA 可以在函式宣告時說需要哪些參數,但你可以選擇不傳某些參數過來,而不會發生錯誤。還記得前一篇那個 display.newImage() 的 API 呼叫說明嗎?裡面就有用方括號括起來的參數)

要不要自己動手一下,到上面說的那個網站去試看看。

待續...


沒有留言:

張貼留言