コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

スマートフォン勉強会@関西#14で話をしました (1)

2011/3/16(土)に、スマートフォン勉強会@関西#14でLuaridaについて話をさせていただきました。その内容を報告もかねて書きたいと思います。発表のスライドはここからダウンロードできます。

タイトルと目次


「Luaridaで簡単プログラミング」という内容でお話しました。
目次は、こんな感じです。LuaridaはLua言語を用いてプログラムを作るので、Luaの紹介をはじめにしたいと思います。最後の「ひとつご報告は」おまけなので割愛します。

自己紹介


和歌山県有田市というところに住んでいます。有田市は「有田みかん」が有名ですが、実は「太刀魚の漁獲量」も日本一です。それでLuaridaのアイコンは太刀魚とみかんになっています。
Luaridaの名称もLuaとAridaを掛けてLuaridaとなっています。有田市ではスマートフォンを用いた地元PRにも力を入れていて、市が「AR-ARIDA」という情報アプリをリリースしています。ARイメージマーカーという技術で、iPhoneを使ってみかんを育てるsecretARmovieを見たりすることができます。
Android版も早くリリースして欲しいです。待ってま〜す。
次のすまべん関西には、ARマーカ入りのみかん箱を持っていくことになってしまったので、箱、買ってこなきゃ。と言ってもうちの畑のみかんは、もう全部採っちゃって無いよ。

Luarida(ルアリダ)って何?


Luaridaって何?っていう話ですが、簡単に言うとAndroidで走るインタプリタです。実行時にLuaVM用にコンパイルされるので正確にはインタプリタではないですが、そんなようなもんです。
プログラムはLua言語で書きます。Android単体でプログラムが組めて、エディタを用いてプログラムを書くことができます。現在、「sheditor」と「jota text editor」が、Luaridaからのエラーメッセージに対応していただいています。エディタからプログラムを実行でき、且つ、エラーが発生したときには、これらのエディタを選ぶとエラー行が開きます。エラー行が数行ずれることもありますが、これはLuaridaのせいです。

Lua言語をご存知ですか


みなさん、Lua言語をご存知でしょうか。詳しくはこちらを。ゲーム関係や機器の制御用に使われていたりしますが、まだまだマイナーな言語です。去年の10月にLuaridaを発表して、11月のにすまべん関西でAndroidへのLuaVMの実装に関してお話しました。そのときのTIOBE Programming Community IndexLua言語の順位は22位でした。
それが何とLuaridaを発表してからぐんぐんアップして、いまや16位に急上昇しています。
今、2011年4月の順位を見たのですが、何と、何と、さらに急上昇して12位になっています。Delphiを抜いてRubyに迫っていますよ。すごい。詳しくはここを
これはLuaridaの影響かも・・・・、いや、Coronaの影響だと思われます。Coronaというのは、Ansca社が開発しているLua言語でAndroidiPhoneのアプリを作ることができる開発ツールです。詳しくはこちらを。CoronaはBOX2Dもサポートしているんだよなぁ。

Lua言語の簡単な紹介

Lua言語についての紹介です。Lua言語に精通している方から見れば、Lua言語の真骨頂的な話はまったく無いので、こんなのLua言語の説明じゃない・・・。と言われてしまうと思いますが、勘弁してください。Luaridaは「BASICのようにプログラムできる」というところもうたっているので(^^;。


よくある言語と同様に、Lua言語は、whileやrepeat、if then elseif elseといった構文が使えます。whileはdo〜end、ifはthen〜endでブロックを作ります。
また、ループ文はbreakで抜けることができます。for文は独特で、カンマで区切って増減範囲をしていします。そして、ループはdo〜endで包みます。


関数はfunction()で定義します。ただし、ブロックの途中にreturnを書けません。ブロックの途中にreturnしたい場合は、do return end とdo〜endブロックでreturnを括ってください。
if文の条件式は下記の5つです。

  • > : 大なり
  • < : 小なり
  • >= : 大なりイコール
  • <= : 小なりイコール
  • ~= : 異なる

異なるときの記号が ~= となります。また、アンドとオアは、and、or と単語で書きます。
変数には、グローバル変数とローカル変数があります。ブロック内でlocalと書いて宣言するとlocalな変数になります。local変数はブロック内でのみ有効です。ローカルな関数も作れます。


変数にはいろいろなものを代入できます。数値、文字、nil(Cでいうnull)、true、false、関数、テーブル構造体などを代入できます。個人的には、C言語のポインタのようなものとイメージしています。
そして、カンマで区切って複数個の同時代入ができます。a,b=b,aとして変数値のスワップも簡単にできます。さらに、関数の戻り値も同様な考え方で複数個返せます。代入側の数が足りないときには、nilが代入されます。
また、テーブル構造体(と私が勝手に呼んでいるのですが)のような形で、変数を宣言できます。

a = { b=20, c=30 } 

上のように書いた場合、下記のように2通りの呼び出し方ができます。2番目以降の変数名は連想配列の引数として使えます。

x = a.b
x = a["b"]

str="b"
x = a[str]

これは、3重の構造にしても同様です。


配列も作れます。a={}と中身の無いテーブル宣言をすると配列として使えます。配列は1からとなり、a[1]という風に書きます。ただし、上で説明したような a.1 というような書き方はできません。
また、2次配列、3次配列も簡単に作れます。a=nilとするか、a={}とすれば、リンクが切れるので初期化されます。
forループでin pairs(配列)として呼ぶと、配列を順に呼べます(foreach文のようなことができる)。配列値がnilになるまでループします。
関数はfuncion f()〜endとして定義できますが、下記のような書き方もできます。

f = function() 〜 end


下記のようなローカル関数も作ることができます。ローカル変数 g に関数を宣言しています。

function f()
local g
  g = function() 〜 end
end

また、関数の戻り値として配列を返せます。下記のような場合、a[1]=10, a[2]=20, a[3]=30となります。

function f()
local g={ 10,20,30 }
  return g
end
a = f()

そして、代入側に関数名を書けば、変数に関数を代入することができます。配列にも関数を代入することができるので、本当、Cのポインタと一緒ですよね。
下記のように宣言しておけば、

a[1] = function() 〜 end
a[2] = function() 〜 end
a[3] = function() 〜 end

分岐が下記の1行で書くこともできちゃいますね。私はやったことは無いです(^^;。

a[n]


また、関数への可変引数も使えます。(...)と書くと可変引数扱いになります。関数内での読み込みは、複数代入が可能なので、カンマで区切って読み込めます。また、select()を使って、順番に取り込むことも可能です。select("#",...)とすると、可変引数の数が返ってきます。
d={...}などとすると、配列の形でも取り込めます。

コメント文については、上のような感じです。


すまべん関西#14の話の前半について書きました。疲れたです。後半部分は、次回に書きたいと思います。