kazayomi::lua::0004

ゼロからはじめる変数入門


<-Prev(0003) [0004] Next(0005)->

変数って何?って言う人に対しては、
『何でも入れられる箱の様なものです 』とかいう、言い古された表現があります。

不親切極まりないけど、Luaの場合、
(C言語の様な)厳密な定義を知る必要が無い言語だってのはありがたいこってす。

Lua言語での変数の扱いはとっても簡単です。
代入式はこんな感じ。

変数名 = 値 

変数宣言や型宣言という概念はなく、
使いたい時に代入してやれば、簡単に使えますが、
便利さ故に使い方によっては危険です。

早速簡単なサンプルを組んでみましょう。

[int.lua]
1
2
3
4
5
6
7
8
x = 7
y = x - 2
print("x = " .. x)
print("y = " .. y)
print("x + y = " .. x + y)
print("x - y = " .. x - y)
print("x * y = " .. x * y)
print("x / y = " .. x / y)

ただの数字いじりのプログラムです。
これを実行してみると、以下のような表示が得られます。

x = 7
y = 5
x + y = 12
x - y = 2
x * y = 35
x / y = 1.4

簡単に説明すると、
1行目でxという名前の変数を用意して、そこに実数7を代入し、
2行目でyという名前の変数を用意して、そこに(x - 2)を代入しています。
ここでは直ちにxは7として評価され、
次に7マイナス2の計算結果として5がyに代入されるわけです。
この1行目や2行目の様な文を代入式と呼びます。
数学ではこういう形を"等式"と呼ぶことがありますが、
代入式と等式は似て非なるもので、要注意です。

左辺には必ず変数あるいは変数リスト(後述)の何れかのみが来、
そうでなければ解析段階でプログラムがエラーを吐きます。
右辺には値あるいは値リスト(これも後述)の何れかが来、
x - 2のような変数を含んだ計算式も値として評価されます。

ここでは変数名としてxとyを選んでいますが、
もちろん名前は何だってかまいません。
ただし、半角英字で始まり、半角英数字またはアンダースコア(_)のみで構成されている必要があります。
また、小文字と大文字は違う文字として扱われます。

可能な変数名の例を挙げると、
foo
bar
hoge
x0x
Hensuu
variable_number
など、キリがありませんが、
これらみたいな分かりにくい名前を付けるべきではありません。
しかしこれも後述しますが、
他の場所で使ってる変数名が被ってしまうと、
よろしくないことが起こるので、
長すぎず短すぎず分かりやすくて重複しない名前を考える必要があります。

変数名として使えない例を挙げるなら、
1sec (数字で始まる変数名は無効)
変数 (漢字は英数字じゃない上に全角文字だコノヤロ!)
$var (変数名をドル記号($)で始める言語もあるけどLuaでは無効)
などなどで、
例外として、
_x
__inner_var
みたいなアンダースコアで始まる変数名は一応可能ですが、
言語処理プログラム側の内部処理用に使われる恐れがあるため、
使わないことが推奨されています。

変数名に使えない例外として更に、
プログラム中で特別な意味を持った、
キーワード(予約語)というものもありますが、
やっぱりキリが無いので後述して、プログラムの続きを解説します。

3行目では、変数xの中身を確かめる為に、print関数を呼びだしています。
ところで、..(ダブルドット)という、
見覚えのない怪しい記号が登場しています。

これはLua言語の中では..の左辺と右辺を、
文字列として結合せよという意味を持った演算記号で、
"文字列1" .. "文字列2"
のように記述すると、
"文字列1文字列2"
のように評価されます。

ここでは左辺"x = "と右辺の変数xの中身を文字列として結合しています。
左辺の二重引用符の中のxはただの文字列なので、変数の中身は評価されません。

ところで、数値計算用の表記ならまだしも、
文字列結合の表記方は言語によって本当にマチマチで、
数値みたいに+(プラス)で繋ぐ場合や、
.(ドット)で繋ぐ場合もありますが、
どちらでもエラーになるので要注意。

4行目から8行目も、3行目と同様で、
左側の文字列と右側の計算結果を結合して表示しています。

*(アスタリスク)や/(スラッシュ)は、
見覚えのないかたもいらっしゃるかも知れませんが、
乗算の×や除算の÷のような記号は、
半角文字として用意されていないために、
乗算を * 、除算を / で記述するように定義されています。

コレはプログラミングに限らず、
コンピュータ上での計算式の記述でよく採用されているので、この期に覚えてしまう とよいでしょう。

この辺でこの章を打ちきって、
次章では数値いじりを深めます。

<-Prev(0003) [0004] Next(0005)->