發表文章

目前顯示的是 2019的文章

[短談] Lua 筆記是否已棄坑?以及接下來的規劃

 應該沒人發現 Lua 默默地沒在更新了,原因除了自己懶癌發作之外,還有在內容安排上的調整,我想把他寫成能輕鬆入門的,但這卻增加了撰寫的難度;再加上我有了新的進度要趕(明明就還是暑假 QQ),所以就漸漸地沒繼續寫了。  雖然手上目前還有第五章寫到一半的稿子,但近期內估計也是不會有下文了。  不過,人們總是反覆地在挖抗與棄坑間來回 (?),所以接下來肯定還會有新的系列,只是應該不會是入門導向,因為我發現入門導向的文章寫起來很累 ˊˇˋ 先這樣吧,大概學期中會再見面的。 啊對了,今天哆啦A夢生日,生日快樂!

[Lua] 敘述-Lua 新手村 (4)

還記得我們曾經在新手村 (1) 提到 chunk(組塊)這個詞嗎?當時還提到,所謂 chunk 是由很多 statement(敘述)組合在一起的,而那時我對敘述的解釋是,一行程式碼就是一個敘述,但其實,這個說法不太精確,而我們這一篇文章將會來談談 Lua 中有哪些敘述。 敘述 Statement  敘述又稱作 陳述式 ,所有敘述都會造成一個效果,而這個效果要視我們使用了哪一種敘述而定。在 Lua 中,敘述分為:指定、local 宣告、block、控制結構、函式宣告及呼叫,還有 return、break 敘述 1 。  而控制結構裡包含了 if、while、repeat、for 等敘述,是我們這篇的主角。  註1 :Lua 5.2 裡還多了 goto 敘述。 指定 Assignment  指定又稱 指派 ,是改變變數值最基本的方法。普通的指定我們已經看過很多了,接著來看看 Lua 裡所謂的「多重指定」: a, b = 12, 78 a 12 b 78  我們可以一次把多個值指定(分配)給多個變數,像上例這樣。我們可以利用這個特性,寫出簡潔有力的兩變數交換: a, b = 12, 78 a, b = b, a print(a, b) 78 12  當然,也可以對 table 的欄位(field)進行這樣的操作: ary = { hi=19, sky=36 } ary['hi'], ary['sky'] = ary['sky'], ary['hi'] ary['hi'] 36 ary['sky'] 19  不過,如果左方變數跟右邊值的數量不一樣的話呢? a, b = 1, 2, 3, 4 -- 3、4 被丟棄 (discard) print(a, b) 1 2 a, b, c, d = 7, 8 -- c、d 補 nil print(a, b, c, d) 7 8 nil nil  多出來的值被丟棄,多出來的變數被補 nil,請牢牢記住這個規則,這在我們之後講到函式時很重要。 Local 宣告與區塊(Block)  我們之前所使用的變數都是屬於全域(global)變數,也就

[Lua] 運算式-Lua 新手村 (3)

在上一章我們看到了很多種型別以及他們的值,但是我們該如何運用他們呢?一個方法就是透過即將要介紹的各種運算子來組合成更複雜的值,也就是所謂的「運算式」。 運算式 Expression  運算式又稱作 表示式 ,他代表了值,在 Lua 中,運算式可以是簡單的值、變數、包含運算符號的式子,以及函式的呼叫,甚至是函式定義和 table 的建構,在這篇文章裡,我們會提到上述除了 函式定義之外的運算式類型。 簡單的值  這個分類是我為了讓讀者容易理解而使用的分類,只要是上一篇文提到的值都算在此類。舉凡 nil、true、false、各種 number,以及字串實字(Literal),也就是由單雙引號或雙中括號包起來的字串。 變數  變數我們在上一篇文已經看過很多了,變數自己是一個運算式,而他也可以透過下面要介紹的運算符號來組成更複雜的運算式。 運算子 Operator  運算子也就是我們熟悉的運算符號,像是 +、-、*、/ 之類的,不過在 Lua 裡,還有更多種運算子。 算數(Arithmetic)運算子  算數運算子包含以下數種: + (加) - (減) * (乘) / (除) % (模除) ^ (指數) - (負數)  我們來簡單看看要怎麼使用他們: 12 + 75 87 36 - 19 17 3 * 5 * 7 105 9 / 3 3 2 / 7 0.2857142857142857 8 % 5 3 -79 % 4 1 6 ^ 2 36 (-4) ^ 3 -64  注意「%」這個運算子的作用,他是由下面這條等式所定義的,其中 math.floor(x) 這個函式可以取得不大於 x 的最大整數: a % b == a - math.floor(a/b)*b  特別的是,% 也可以用在整數以外的運算: math.pi 3.1415926535... math.pi % 1 0.1415926535... math.pi % 0.01 0.0015926535... p = math.pi print(p - p % 0.01) 3.14  如果你有仔細看,會發現上面有一條等式裡使用了「==」,這跟一個等於 = 差在哪呢?這就是我們接下來的主題:關係運算子。 關係(

[Lua] 型別與值-Lua 新手村 (2)

接下來要談談 Lua 裡的資料型別還有所謂的「值」。由於 Lua 是個動態語言,所以變數本身並不帶有型別資訊。嗯?這是什麼意思? 動態語言  不過這篇文畢竟是新手村,所以不會講得太深入,有興趣的讀者可以自行深入了解。  所謂的動態語言就是,同一個變數裡的資料可以現在是一個數字,等一下又是一個字串,這樣能夠動態地轉換型別的語言就叫做動態語言。不過剛剛提到的變數 (Variable) 跟型別 (Type) 到底是什麼? 變數、型別與值  簡單的說,變數就像一個紙箱,並沒有規定裡面要裝什麼,可以裝任何你想裝的物品,而「值(Value)」就是能被裝入變數這個箱子的物品,那麼這個物品的類型就是型別。  舉個例子,如果我有一個紙箱(變數),然後我把香蕉裝進去,那麼這個香蕉就是「值」,而他的類型(型別)就是水果。而且,我可以之後把裡面的香蕉換成白菜,如此一來,值就變成了白菜,而型別就變成了蔬菜,不過紙箱(變數)還是 同一個 。  而在 Lua 中要把一個值給一個變數,只要這樣寫就好: box = 1024 這行中間的等於「=」就是所謂的指定,也就是把右邊的值放到左邊的變數裡面,這裡的變數叫做「box」,而值是「」1024」 Lua 中的型別  Lua  中的資料型別只有 8 種,分別是 nil(無)、 boolean ( 布林 )、 number ( 數字 )、 string ( 字串 )、 function ( 函式 )、 table ( 表 )、 thread ( 執行緒 )、 userdata ( 使用者資料 ),接下來會大致講解每種型別。 nil  nil 是一個很重要的型別,而且我們在上一篇也遇過他,代表著「什麼都沒有」。屬於 nil 這個型別的值只有一個,就是nil。 boolean、number、string  boolean 型別是拿來表示條件 1 的型別,只有兩個值:true 和 false,但這不代表只有這兩個值可以拿去當作條件式使用:在 Lua 中,除了 false 和 nil 代表 false(條件的假)之外,其他值都是 true (條件的真) ,包括 0 和空字串。  註1 :關於條件,會在下幾篇文章進行更深入的解說。  number 就是一般數值的型別,無論是整數

[Lua] 踏入新手村-Lua 新手村 (1)

圖片
踏入新手村第一件事就是要有個新手裝備,也就是幫助我們寫 Lua 的工具,這裡我建議下載 ZeroBrane Studio 這個 IDE,因為他已經包含了 5.1 ~ 5.3 版的 Lua,甚至還有跟像是 Corona SDK 之類的工具做整合,所以非常推薦使用,不過這個系列會以 5.1 版為主。 ZeroBrane Studio 介面介紹  上方紅色那列是工具列,左方黃色是專案 / 目錄管理,而中右方藍色則是主要編輯器,最後下方的綠色是執行結果或互動模式,其中互動模式非常方便,本系列文章會經常使用到。接著讓我們仔細瞧瞧工具列中有什麼:  左半邊的應該很容易懂,中間框起來的是執行、Debug、Live Coding,這三種的運用就看個人造化了(欸)。而 Zerobrane 官網有很多實用的文件,有興趣的讀者就去查查看吧。 開始學 Lua 吧! 組塊 Chunks   我覺得組塊這個名詞並沒有翻得很好,但 我找不太到更好的翻譯了,所以就將就一下吧。  什麼是組塊?任何可執行的程式碼片段就是一個 Chunk;或者,從更程式的定義來看:一連串的敘述(Statement)拼在一起,就是一個 Chunk。  咦?剛剛好像提到了另一個名詞:敘述,這又是什麼?敘述是程式有效果的最小單位,基本上就是一行程式碼。不像 C 或 C++ 需要分號來代表一個指令的結束, Lua  只要有換行,就代表了一個敘述的結束,如果你想在一行之中塞兩個 Statement,你會需要在第一個敘述末端加上分號。  事實上,我剛剛撒了一個小謊,其實敘述的分隔只要一個空白就夠了,連換行都不用,但我們都不應該這麼做,因為這會讓我們的程式碼可讀性下降,所以,若一定要放在同一行,至少加個分號吧。 Hello World 以及互動模式  來看看在 Lua 中要怎麼寫出 Hello World: print("Hello World")  對,就只有這樣!那我們可以來看看  ZeroBrane Studio 中的 互動模式要怎麼使用了: print("Hello World") Hello World print(3 + 4) 7 6 - 2 4 9 * 5 45 print(10 / 4) 2.5  應該很

[Lua] 入學須知

我不知道這個標題是在寫什麼。 前言   其實本文就只是個前言,如果沒有興趣的話,可以直接跳過,況且我也不太會說故事(笑)。  知道 Lua 這個語言的人多半也都知道他是個「嵌入式」語言,基本上就是可以嵌入在別的語言中做為工具的角色,也因此,Lua 有以下這些特色: 可擴充性(Extensibility) 簡潔(Simplicity) 有效率(Ef ciency) 可攜性(Portability)  我就不一一說明了。另外,雖然 Lua 的生活大半都跟嵌入有關,但此筆記將以語法及 Libraries 為主,畢竟也是有只用 Lua 開發的應用程式。 學習階段(願景) 新手村:觀念及語法 初階:深入語法及觀念 中階:Table I - 初步運用 高階:Table II - 物件導向及其他高等技術 圖書館:Standard Libraries 希望我至少可以寫到中階(茶)。

[短談] [預告] 關於最近的進度(NULL)、未來的規劃(願景)

  早安,雖然時間不早了。關於最近幾乎(根本)是 0 的進度,我不太想多說什麼,就只是我快被功課海洋淹沒而已(笑)。雖說作業很多,但都很簡單,只是要花的時間很多而已;不過,我也不是只有在寫作業,一樣還是有在學一些新東西,比如我待會會提到的未來規劃、還有寫了一個新遊戲的...10% 而已吧 (笑) 。近況就談到這,接下來是這個 Blog 的規劃。 新的系列即將誕生??   是的,不過畢竟是願景,也就是說我可以隨便說說而不去實行也是可以的,高雄發大財。   新系列是以 Lua 語言為主,因為之前想用 Corona SDK 寫遊戲,但發現在不熟 Lua 的情況下,是很難有系統地設計出一款好遊戲的,所以我只好先學習 Lua 本身,而且我是看著原文書學的,所以想說透過寫筆記兼翻譯來增加印象。因此,新系列會是我學 Lua 時的筆記類文章,且編排與順序上也會參考這本書: Second edition of Programming in Lua ,同時這也是我學 Lua 時看的書。 就這樣吧,如果我沒有隨便說說的話應該暑假就會見面了XD