(2018.7.12. 公開)
Lua/LuaJIT で扱うデータのことを「値」と呼ぶ。値には、以下の8つの「型」がある。
ここでは最初の6つについて解説する。「スレッド」「ユーザーデータ」は、やや高度な話題になるので、この「LuaJIT言語編」では取り扱わない。
Lua/LuaJIT の数値は、以下の範囲の数である。技術的には「64ビット倍精度浮動小数点数」と呼ばれる。
2.2250738585072014 x 10-308 ... 1.7976931348623157 x 10308
-2.2250738585072014 x 10-308 ... -1.7976931348623157 x 10308
0
有効数字は約16ケタである。計算機の内部では2進数の小数(53ケタ)で表されており、最後のケタは丸められる。
文字列は、文字を並べたものである。計算機の内部では、1バイト=8ビットの整数 (0から255) の並びとして表されている。半角の英数字・記号は、すべて1バイトで表される。
日本語の文字は、UTF-8 文字コードを使って、1文字3バイトで表される(一部例外あり)。Lua/LuaJIT の文字列機能は、「1文字=1バイト」であることを前提にしているので、そのままでは日本語の文字を「1文字ずつ」扱うことはできない。
数値と文字列は、必要な場合には自動的に変換される。たとえば、2つの数値を加える +
で文字列を加えようとすると、文字列が数値に変換される。逆に、2つの文字列を連結する ..
で数値を連結しようとすると、数値が文字列に変換される。
"1" + "2" --> 3
1 .. 2 --> "12"
2つ目の例で、スペースを入れずに 1..2
とすると "malformed number" エラーになる(数値の形式が誤っている、という意味)。これは、ピリオドが小数点と解釈されるためである。
論理型は、true
, false
の2つの値のみを持つ。たとえば「数値 a
が数値 b
よりも大きいか?」のように、ある条件判断が「真(正しい)か偽(誤り)か」を示すために用いる。
Nil型は、nil
というただ一つの値を持つ。通常、「役に立つ値を持たない」ことを示すために用いる。
テーブルは、複数の値を1つにまとめるためのデータ構造である。テーブルには、値を格納するための「フィールド」が0個以上ある。それぞれの「フィールド」には、それらを区別するための「キー」がついている。「キー」としては、nil
以外の任意の値を使うことができる。
なお、数値をキーとして用いる時には、1から始まる連続した整数を使うとよい。そのようなキーは、Lua/LuaJIT の処理系の中で特別扱いされており、高速に処理できるようになっている。1から始まる連続した整数をキーとして持つテーブルを「配列」と呼ぶ。(Lua の本来の用語では「シーケンス」だが、ここでは「配列」と呼ぶことにする。)
下は、テーブルの一例である。
キー | 1 |
2 |
3 |
"dog" |
"cat" |
フィールド | (値1) |
(値2) |
(値3) |
(値4) |
(値5) |
それぞれの「フィールド」をどのように使うかは、「変数」のところで説明する。
「関数」とは、プログラムの一部をまとめて取り出したもので、0個以上の値を受け取って、一定の処理を行い、結果として0個以上の値を返す。関数が受け取る値のことを「引数(ひきすう)」と呼び、返す値のことを「戻り値(もどりち)」と呼ぶ。「関数」には、Lua/LuaJIT 言語に組み込まれているもの、LÖVE に組み込まれているもの、自分で定義したものなどがある。
Lua/LuaJIT では、「関数」がデータ型の一種となっている。このことから、関数自体を変数(後述)に入れたり、テーブルのフィールドに入れたり、別の関数から戻り値として返したりすることができる。高度な Lua/LuaJIT プログラミングでは、これらのテクニックが多用されている。
目次