先月に「ngx_http_mirror_module」の検証記事を書いた通り,最近 nginx を調べ直している.次に「lua-nginx-module」を検証する予定だけど,今まで Lua 自体をあまり書いたことがなく,まずは Lua の基礎を学ぶことにした.まさに Yak Shaving!
Lua 環境
今回 Mac を使うため,brew で Lua をインストールする.
$ brew install lua $ which lua /usr/local/bin/lua $ brew info lua | grep stable lua: stable 5.3.5 (bottled) $ lua -e 'print(_VERSION)' Lua 5.3
Lua の Version History を見ると,2015年にリリースされた Lua 5.3 が現在も最新となり,Patch まで含めると,2018年に Lua 5.3.5 がリリースされている.
エディタは VS Code + Lua Extension にした.
ドットインストール : Lua 入門 (全17回)
「Lua Reference Manual」などを参考に闇雲に学ぶより,個人的には Step by Step に学びたく,教材を探していたら,なんと「ドットインストール」に「Lua 入門」があった!公開日を見るとまさかの「2013年」で,流石に古いかなと思ったけど,Lua のリリースもあまり進んでないこともあり,実際に受講してみることにした.結果的に何も問題なく,Lua 5.3 でも学ぶことができた.
- 01 : Luaとはなにか?
- 02 : はじめてのLuaプログラミング
- 03 : 変数とデータ型について
- 04 : 数値データを扱ってみよう
- 05 : 文字列データを扱ってみよう
- 06 : テーブルデータを扱ってみよう
- 07 : if文で条件分岐をしてみよう
- 08 : 条件式をマスターしよう
- 09 : ループ処理をしてみよう (1)
- 10 : ループ処理をしてみよう (2)
- 11 : 関数をつくってみよう (1)
- 12 : 関数をつくってみよう (2)
- 13 : 数値の便利な命令を使ってみよう
- 14 : 文字列の便利な命令を使ってみよう (1)
- 15 : 文字列の便利な命令を使ってみよう (2)
- 16 : テーブルの便利な命令を使ってみよう
- 17 : 日付/時刻の便利な命令を使ってみよう
レッスンごとに写経した Lua コードは GitHub に push してある.今回の記事では全てをまとめるのではなく,個人的に Lua の特徴として印象に残った部分に限定してまとめておこうと思う.
03 : 変数とデータ型について
Lua で変数を使う場合,以下のように多重代入 (multiple assignments) も実装できる.
x, y = 10, 15 -- 10 print(x) -- 15 print(y)
06 : テーブルデータを扱ってみよう
Lua の特徴的な機能に「テーブル」がある.配列 / 連想配列 / 構造体に似ていると表現することもできるけど,異なる型を並べることができたり,関数自体を設定することもできたり,幅広く使える.以下の例はシンプルだけど,実行結果は 234
となる.テーブルに対する添字が「"1" 開始」という点は覚えておく必要がありそう.
a = {23, 234, "hello"} -- 234 print(a[2])
テーブルにキー名を指定したデータを登録する場合,user["name"]
のように実装することもできるし,よりシンプルに user.name
と実装することもできる.
user = {name = "kakakakakku", score = 120} -- kakakakakku print(user["name"]) -- kakakakakku print(user.name)
10 : ループ処理をしてみよう (2)
テーブルをループする場合,イテレータと呼ばれる ipairs
や pairs
を使う.
a = {12, 24, "hey"} b = {name = "kakakakakku", score = 120} -- 1 12 -- 2 24 -- 3 hey for i, value in ipairs(a) do print(i, value) end -- score 120 -- name kakakakakku for i, value in pairs(b) do print(i, value) end
12 : 関数をつくってみよう (2)
Lua の関数には可変長引数 ...
を使える.覚えておこう.
function sum(...) local a = {...} local total = 0 for i = 1, #a do total = total + a[i] end return total end -- 9 -- 26 print(sum(2, 7)) print(sum(2, 7, 8, 9))
まとめ
- ドットインストールで「Lua 入門」を受講した
- 2013年に公開されたレッスンだけど,現在でも色褪せず,基礎の基礎を学ぶことができた
- 今後は Lua Reference Manual を参考により実践的な実装を学んでいく予定
ドットインストール関連
最近だと textlint のレッスンも受講した.Step by Step に第一歩を踏み出すときにドットインストールは本当に便利!