前回の"function OnFrame()"〜"end"を次のように書きなおす。
function OnFrame() out(0, 1); out(1, 1+2); out(2, 1 + 1 == 2); out(3, 1 + 1 == 3); out(4, 1 > 2); out(5, 1 == "1"); out(6, "さばとたん"); out(7, "さばとたん".."かわいいよ"); out(8, nil); end
上の例で"1"であるとか"さばとたん"であるとかいった部分を「値」という。値はLuaの基本的な構成要素である。 値は以下の8つの「型」と呼ばれる種類に分けられるが、とりあえずはnil boolean number stringがわかればよい。 tableとfunctionについてはそれぞれ○課と○課で説明する。また、coroutineとuserdataは滅多に使わない。 型の一覧は以下の通り
名前 | 説明 |
nil | 空を意味する値。のちに説明する変数の初期値 |
boolean | おもに関係演算(等しい,等しくない,以上,以下など)の結果を示す。true/falseの2つの値だけがこの型 |
number | 数字を表わす型。通常使用の範囲では-〜+までほぼ無限に使える。また、整数でも小数でもかまわない |
string | 文字列を表す型。 |
table | あとでやる |
function | あとでやる |
coroutine | あとでもやらない |
userdata | あとでもやらない |
さて、値は、他の値との間で演算を行うことができる。演算には「算術演算」「関係演算」「論理演算」「連結演算」の種類がある。
算術演算は、通常の数字同士の演算であり、演算を行う値の型が2つともnumberである必要がある。 上の例では"out(1, 1+2)"の"1+2"がこれに当てはまる。算術演算の意味については常識の通りである。 算術演算の一覧は以下の通り
記号 | 意味 |
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
^ | 累乗計算 |
関係演算とは、二つの値が等しいか、等しくないか、どちらが大きいか、などを比較する演算である。 上の例では"out(2, 1 + 1 == 2)"から"out(4, 1 > 2)"までの3行がこの関係演算の例である。また、前述のとおり、関係演算の結果は常にboolean型の値であるtrueかfalseかのどちらかとなる。 関係演算の一覧は以下の通り
== | 左辺と右辺が等しければtrue,それ以外はfalse |
~= | 左辺と右辺が等しくなければtrue,それ以外はfalse |
< | 左辺が右辺より小さければtrue,それ以外はfalse |
> | 左辺が右辺より大きければtrue,それ以外はfalse |
<= | 左辺が右辺以下ならtrue,それ以外はfalse |
>= | 左辺が右辺以上ならtrue,それ以外はfalse |
なお、"=="と"~="は左辺と右辺がそれぞれいかなる型であってもかまわないが、 "<"以下の4つについては左辺と右辺が両方ともnumberか両方ともstringでないとエラーとなる。
論理演算はひとまず省略する
連結演算は、つまるところstring型同士の足し算である。".."の1つだけが連結演算に分類される。 左辺と右辺はともにstring型でなくてはならない。
さて、以上で説明した値は、より便利に扱うために「変数」と呼ばれる方法で名前を付けて保存し、扱うことができる。 "function OnFrame()"〜"end"を今度は以下のように書き換える
function OnFrame() variable = 1; out(1, variable); variable = "さばとたん"; out(2, variable); sabato = "かわいい"; out(3, variable..sabato); out(4, hoge); end
"variable = 1"のような、"「変数名」= 値"の構文によって変数に値を入れる(代入する)ことができる。 そして、
variable = 1; out(1, variable); variable = "さばとたん"; out(2, variable);
でわかるように、変数に新しい値を代入すると前の値はきれいさっぱり消える。 代入する場合を除いては変数は値とほぼ同様に演算したり表示したりできる。 なお、
out(4, hoge);
で表示されるように、未だ一度も値を代入していない変数の値は"nil"である。この行の前でhogeに好きな値を代入して実験すべし。
変数の名前に使える文字はアルファベットの大文字小文字及び_(アンダーバー)と数字である。ただし、数字は変数名の先頭に来てはならない。