kakakakakku blog

Weekly Tech Blog: Keep on Learning!

ドットインストールで「Lua 入門」を受講した

先月に「ngx_http_mirror_module」の検証記事を書いた通り,最近 nginx を調べ直している.次に「lua-nginx-module」を検証する予定だけど,今まで Lua 自体をあまり書いたことがなく,まずは Lua の基礎を学ぶことにした.まさに Yak Shaving!

kakakakakku.hatenablog.com

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 がリリースされている.

www.lua.org

エディタは VS Code + Lua Extension にした.

marketplace.visualstudio.com

ドットインストール : 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 の特徴として印象に残った部分に限定してまとめておこうと思う.

github.com

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)

テーブルをループする場合,イテレータと呼ばれる ipairspairs を使う.

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 を参考により実践的な実装を学んでいく予定

www.lua.org

ドットインストール関連

最近だと textlint のレッスンも受講した.Step by Step に第一歩を踏み出すときにドットインストールは本当に便利!

kakakakakku.hatenablog.com