LÖVE (Love2D) LuaJIT言語編:3.値と型

(2018.7.12. 公開)

 Lua/LuaJIT で扱うデータのことを「値」と呼ぶ。値には、以下の8つの「型」がある。

 ここでは最初の6つについて解説する。「スレッド」「ユーザーデータ」は、やや高度な話題になるので、この「LuaJIT言語編」では取り扱わない。

3-1. 数値

 Lua/LuaJIT の数値は、以下の範囲の数である。技術的には「64ビット倍精度浮動小数点数」と呼ばれる。

 有効数字は約16ケタである。計算機の内部では2進数の小数(53ケタ)で表されており、最後のケタは丸められる。

3-2. 文字列

 文字列は、文字を並べたものである。計算機の内部では、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" エラーになる(数値の形式が誤っている、という意味)。これは、ピリオドが小数点と解釈されるためである。

3-3. 論理型

 論理型は、true, false の2つの値のみを持つ。たとえば「数値 a が数値 b よりも大きいか?」のように、ある条件判断が「真(正しい)か偽(誤り)か」を示すために用いる。

3-4. Nil型

 Nil型は、nil というただ一つの値を持つ。通常、「役に立つ値を持たない」ことを示すために用いる。

3-5. テーブル

 テーブルは、複数の値を1つにまとめるためのデータ構造である。テーブルには、値を格納するための「フィールド」が0個以上ある。それぞれの「フィールド」には、それらを区別するための「キー」がついている。「キー」としては、nil 以外の任意の値を使うことができる。

 なお、数値をキーとして用いる時には、1から始まる連続した整数を使うとよい。そのようなキーは、Lua/LuaJIT の処理系の中で特別扱いされており、高速に処理できるようになっている。1から始まる連続した整数をキーとして持つテーブルを「配列」と呼ぶ。(Lua の本来の用語では「シーケンス」だが、ここでは「配列」と呼ぶことにする。)

 下は、テーブルの一例である。

キー 1 2 3 "dog" "cat"
フィールド (値1) (値2) (値3) (値4) (値5)

 それぞれの「フィールド」をどのように使うかは、「変数」のところで説明する。

3-6. 関数

 「関数」とは、プログラムの一部をまとめて取り出したもので、0個以上の値を受け取って、一定の処理を行い、結果として0個以上の値を返す。関数が受け取る値のことを「引数(ひきすう)」と呼び、返す値のことを「戻り値(もどりち)」と呼ぶ。「関数」には、Lua/LuaJIT 言語に組み込まれているもの、LÖVE に組み込まれているもの、自分で定義したものなどがある。

 Lua/LuaJIT では、「関数」がデータ型の一種となっている。このことから、関数自体を変数(後述)に入れたり、テーブルのフィールドに入れたり、別の関数から戻り値として返したりすることができる。高度な Lua/LuaJIT プログラミングでは、これらのテクニックが多用されている。

目次