Luaと一ヶ月程戯れてみた感想
Luaを触りだして一ヶ月くらいたつので感想をメモ。 一言で言うと、 楽しい!! な んだけどせっかくなのでもう少し書いてみる。
|
入門Luaプログラミング |
多分5-6回読み返したかな。最初ピンとこなかった部分も何回か読むと、あぁそういうこ とねと理解できるところがありました。ただやはり入門編なので、そこのところをもうち ょっと詳しく、という部分が書かれていなかったので、ついカッとなって
|
Programming in Lua |
を買ってしまった。別に後悔はしてない。
で、pythonと比べていいところ、物足らない/不満なところを今の時点での感想として書 いてみる。
いいところ
シンプル、必要最小限の機能、拡張の容易さ
本当に必要最小限しかないが、簡単にLuaレベルでもCレベルでも拡張できるので、必 要なものは自分で作る楽しさがある。次はどの機能を追加してやろうかな、と楽しみ ながら自分が使いたい機能を盛り込むことができる。
Luaレベルでは、setmetatable()で、+やら-やら配列へのアクセスやら代入やらの動 作をoverrideできるし、モジュール(tableモジュールとかね)ヘ自分でメソッドの追 加もできるし、オブジェクト風のアクセスも可能。またCレベルではLuaとCとのスタ ックでの値の受け渡しさえ理解できれば自分で拡張できます。
※ 一応ライブラリ類も公開されているものがあって(LuaSocketとか)それを使うこと も可能ですよ。
物足りない/不満なところ
end!end!!end!!!
pythonで慣れちゃってるとやっぱりendが無駄な気がする。 もちろんthenやらdoやらも同じ。
変数のスコープのデフォルトがglobalなこと
いちいちlocal宣言しないとglobalスコープになってしまうこと。 うっかりブロック構文内の一時変数(のつもりのもの)でブロック外の変数を書き換え ちゃいそう。
空文字列、空配列、0がif文の判定でfalseとして扱われないこと
ついつい、if hoge then print("hoge") end とかしちゃうけど、hogeがnil/false以 外だとif文はtrue判定になってしまう。
テーブルは同じ値であっても別々のものが代入されるので t={}; print(t == {}) としてもfalseが返ってくること。
空配列はif文でfalseとならないからといって、 t == {} では判定できない。こ の辺はちょっと直感的じゃないような気がする。
仕方ないのでnext(t)がnilかどうかで判定している。
未定義の変数も参照できる(nilが返ってくる)。ミスタイプしても気づきにくい。
でもこれを変えちゃうと、言語仕様を色々変えないといけなくなっちゃうから無理かな。
大人数で開発する時にはこの辺のルールをちゃんと決めてからやらないとはまりそうな気がするな。
でも、pythonだとbuttery includedと言われるくらい最初から色々標準でライブラリがつ いてきて、それはそれで楽チンでいいんだけど、使いたい機能がなくって、じゃあ自分で どう実現しようかなって考えるのも(時間さえあれば)楽しくていいもんだな、と思います 。

