ゲーム開発

【Lua】小ネタ

Luaの言語仕様/ドキュメント/リファレンス

Luaの各種情報は公式サイトのドキュメントページから参照可能です。(ユーザ登録等は不要です)

https://www.lua.org/docs.html

※何故かうちのGoogleさんは検索結果に表示してくれない…

Luaのバージョンを確認する

デバッグ用途等でLuaバージョンをプログラムで表示したい場合があるかと思います。
その場合は以下のグローバル変数を出力することで確認することが可能です。

print(_VERSION)
> Lua 5.1
Lua 5.4 Reference Manual

コーディング規約

以下の2つから好みに合わせて選ぶのが良いと思います。(私は②派です)

①Luaユーザコミュニティが提供するスタイルガイド
http://lua-users.org/wiki/LuaStyleGuide

②LuaRocks(Luaのパッケージマネージャ)が提供するスタイルガイド
https://github.com/luarocks/lua-style-guide


※環境によっては独自にコーディング規約を設けている場合もあるので(Roblox等)、その場合はそちらを優先した方が良いです。

ブロックコメント

-- 通常のコメントは'-'(半角ハイフン)二つ

--[[
ブロックコメントは
'-'(半角ハイフン)二つと
'['(半角 角括弧)二つ
--]]

小数点の切り上げ・切り捨て

Luaは標準でmathライブラリがあるので、小数点の切り捨て・切り上げに限らず大体何でもできます。

-- 切り捨て
math.floor(1.5)
> 1

-- 切り上げ
math.ceil(1.5)
> 2

ラムダ式を作る

名前を付けずに関数を作ればいいと思っていましたが、Wikipedia先生によるとLuaは「すべての関数が本質的に無名関数」らしいです。

よくわからないので構文と例文だけ書いときます。

Luaでの無名関数の構文は以下です。

function(仮引数, ...) 処理A; ...; 処理Z end


例えば以下のように使えます。

-- 例:2乗する関数
(function(x) return x * x end)(5)
> 25

-- 例:テーブルのキーと値を全てprint
(function(tbl) for k, v in pairs(tbl) do print(k..':'..v) end end)({a = '123', b = '456'})
> a:123
> b:456

-- 当然変数への代入も可能
myFunc = function(x) return x * x end

3項演算子っぽいことをする

Luaに3項演算子は無いらしいので、andとor演算子の挙動を利用して3項演算子っぽいことをします。

構文は以下です。

条件式 and 真の時の値 or 偽の時の値


例えば以下のように使えます。

-- 数値型以外の場合は0に補正する三項演算子(もどき)
y = (type(x) == 'number') and x or 0

-- x = 123.456の時
print(y)
> 123.456

-- x = 'abcdef'の時
print(y)
> 0


因みにandとorの挙動は以下です。

論理演算子記述例意味
andx and yxが真の場合:yを返す
xが偽の場合:xを返す
orx or yxが真の場合:xを返す
xが偽の場合:yを返す
真:false, nil以外の値、偽:false, nil

初見は「??」ってなりました…

以下に日本語で整理しておきます。
(頭悪いとか言わないで自覚してるから)

x and y
xが偽の場合はyに関わらず偽なので偽(x)を返す
xが真の場合はyの真偽で決まるのでyを返す

x or y
xが真の場合はyに関わらず真なので真(x)を返す
xが偽の場合はyの真偽で決まるのでyを返す

参考

http://www.nct9.ne.jp/m_hiroi/light/lua03.html

https://ie.u-ryukyu.ac.jp/~e085739/lua.hajime.2.html

無名関数(Wikipedia)

Lua で3項演算子

コメント

タイトルとURLをコピーしました