LoginSignup
42
45

More than 5 years have passed since last update.

Luaを使ってみた時の備忘録

Posted at

スクリプト言語Luaを初めて触ってみたので、メモ。

Luaのダウンロード

http://www.lua.org/

Lua統合開発環境

Lua Development Tools(LDT)

Lua の文法

tutorial.lua
-- ハイフンを2つ書くと1行コメントになる

--[[
複数行コメント
複数行コメント
複数行コメント
]]

-- 標準出力への改行付き出力
print("Hello, world!")

-- 標準出力への改行なし出力
io.write("Hello, world!")
io.write("Hello, everyone!")

-- 改行のみ
print()

-- 値には型があるが、変数には型がない
a = 1


-- リテラルは大文字小文字が区別される
ab = 1
aB = 2
AB = 3
print(ab, aB, AB)


-- 多重代入可能
a,b = 1,2
print(a,b)

-- 値のスワップも簡単
a,b = b,a
print(a,b)


-- 四則演算 + - * /
-- 剰余 %
-- べき乗 ^
x = 10
y = 3

z = x ^ y
print(z)

z = x % y
print(z)

-- 文字列
s1 = "ダブルクォートの中にダブルクォートを書くには\\でエスケープが必要\"こんな感じで\""
print(s1)

s2 = 'シングルクォートの中にシングルクォートを書くには\\でエスケープが必要\'こんな感じで\''
print(s2)

s3 = 'タブとか\t改行も\n書けまっせ'
print(s3)

-- 文字列の連結は「..」演算子
a = 1
print("a="..a)

--ヒアドキュメント
s = [[複数行文字列も
こうやって
代入可能]]
print(s)

s4 = [[この記号で囲むと、エスケープ\tシーケンスも\nそのまま表示されます]]
print(s4)


-- テーブル(配列/連想配列)
-- 添字は1から始まる

-- テーブル(配列 的使い方)
a = {1,2,3,"Hello, World!"}
print(a[1])
print(a[2])
print(a[3])
print(a[4])

-- 要素の個数 #
print(#a)

-- テーブル(連想配列 的使い方)
users = {name="Bob", age = 18}
print(users["name"], users["age"])
print(users.name, users.age)

-- 条件分岐 if
-- 偽:false nil
-- 真: (上記以外)    
score = 70
if score > 60 then
    print("score > 60")
elseif score > 40 then
    print("score > 40")
else
    print("score <= 40")
end

-- 関係演算子 < > >= <= == ~=(否定)
-- 論理演算子 or and not 
score = 75
if score > 40 and score < 100 then
    print("ok!")
end

-- 繰り返し while
i = 0 
while i < 10 do
  print(i)
  i = i + 1
end

print()

-- 繰り返し repeat
i = 0
repeat
    print(i)
    i = i + 1
until i >=10

print()

-- ループ脱出 break
i = 0 
while i < 10 do
  print(i)
  i = i + 1
  if i > 4 then
    break
  end
end

print()

-- 繰り返し for
for i=0, 9 do
    print(i)
end

print()

-- 繰り返し for 増分あり
for i=0, 9, 2 do
    print(i)
end

print()

-- 繰り返し for テーブル(順番と値)
a = {12,24,"hey"}
for i, value in ipairs(a) do
    print(i, value)
end

print()


-- 繰り返し for テーブル(キーと値)
users = {name="Bob", age = 18}
for key, value in pairs(users) do
    print(key, value)
end

print()


-- 関数 引数・返り値なし
function greet()
    print("Hello!")
end

greet()

-- 関数 引数・返り値あり
function multi(x,y)
    return x * y
end

print(multi(12,10))

-- 複数の値を返すことも可能
function calc4(x,y)
    return x + y, x - y, x * y, x / y
end

a,b,c,d = calc4(12,4)
print(a,b,c,d)

print() 

-- local宣言しないと、関数内で宣言された変数もグローバル変数になるので注意
g = 1
function test()
    local g = 2
    print(g)
end

test()
print(g)

print()

-- 可変長引数
function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(1,2,3,4,5,6))

print() 


-- 数値関数
print(math.min(1,2,3))
print(math.max(1,2,3))

print(math.ceil(2.1))
print(math.floor(2.1))

print(math.random()) -- 0 ~ 1 の実数
print(math.random(100)) -- 0 ~ 100 の整数
print(math.random(20,800)) -- 20 ~ 800 の整数

print()

-- 文字列関数
s = "Hello, world!"
-- 文字列長
print(string.len(s))
print(#s)

-- 部分文字列
print(string.sub(s,3,5))

-- 検索
print(string.find(s, "wor"))

-- 置換
print(string.gsub(s, "w", "W"))

-- 大文字化/小文字化
print(string.upper(s))
print(string.lower(s))

-- 逆順
print(string.reverse(s))

-- 文字列フォーマット
x = 10
y = 21.111
name = "Mike"
s = string.format("name:%s x:%10d y:%f", name, x, y)    -- 右寄せ
print(s)

s = string.format("name:%s x:%-10d y:%f", name, x, y)   -- 左寄せ
print(s)

s = string.format("name:%s x:%010d y:%f", name, x, y)   -- 0埋め
print(s)

-- テーブル操作

-- ソート
a ={2, 25, 42, 1}

table.sort(a)
for i, v in ipairs(a) do
    print(v)
end
print()

-- 挿入
a ={2, 25, 42, 1}

table.insert(a,"last")

for i, v in ipairs(a) do
    print(v)
end

table.insert(a,4, "foo")

for i, v in ipairs(a) do
    print(v)
end
print()

-- 削除
a ={2, 25, 42, 1}

table.remove(a,3)

for i, v in ipairs(a) do
    print(v)
end
print()

-- 日付・時刻
-- 基準日からの秒数
t = os.time()
print(t)

-- システム日時
t = os.date()
print(t)

t = os.date("%Y-%m-%d")
print(t)

-- システム日時の各要素をテーブルで取得
t = os.date("*t")
for key,value in pairs(t) do
  print(key,value)
end
print()


42
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
45