Ghi chú học Lua

Tổng quan về Lua

Mục đích thiết kế: Cung cấp khả năng mở rộng linh hoạt cho ứng dụng

  • Độ nhẹ
  • Khả năng mở rộng
  • Hướng thủ tục
  • Quản lý bộ nhớ tự động
  • Builtin pattern matching
  • Closure (hỗ trợ trừu tượng dữ liệu, hàm ảo, kế thừa và overload)

Ứng dụng phổ biến

  • Phát triển game
  • Script ứng dụng độc lập
  • Web application scripting
  • Mở rộng và plugin cơ sở dữ liệu
  • Hệ thống an ninh (IDS)

Ví dụ Hello World

print("xin chào, Lua")
os.execute("lua hello.lua")

Chú thích

  • -- Chú thích một dòng
  • --[[ Chú thích nhiều dòng --]]

Biến toàn cục

Mặc định không có tiền tố là biến toàn cục

Kiểu dữ liệu

  • nil: giá trị vô hiệu
  • boolean: true/false (nil cũng là false)
  • number: double precision
  • string: hỗ trợ chuỗi đa dòng [[...]], toán tử + chuyển đổi sang số, .. nối chuỗi, # tính độ dài
  • function: giá trị thứ nhất, có thể là hàm ẩn danh
  • userdata: cấu trúc C
  • thread: coroutine
  • table: mảng liên kết, chỉ số bắt đầu từ 1

Biến

-- Biến toàn cục
giaTri = 5

-- Biến cục bộ
local giaTri = 5

-- Gán đa giá trị
a, b = 1, 2
a, b = b, a
a, b = hamTraVeHaiGiaTri()

Thao tác bảng

trangWeb = {}
trangWeb['diaChi'] = 'www.google.com'
print(trangWeb.diaChi)

Vòng lặp

-- Vòng while
while giaTri > 0 do
    print(giaTri)
    giaTri = giaTri - 1
end

-- Vòng for số học
for index = 1, 10, 2 do
    print(index)
end

-- Vòng for tổng quát
for khoa, giaTri in pairs(bangDuLieu) do
    print(khoa, giaTri)
end

Quyết định

if dieuKien then
    if dieuKienCon then
        print("Đúng")
    end
else
    print("Sai")
end

Hàm

function tinhTong(a, b)
    return a + b
end

print(tinhTong(3,4))

Thao tác chuỗi

  • string.upper()
  • string.gsub()
  • string.reverse()
  • string.format()
  • string.rep()

Mảng

mangMotChieu = {"A", "B"}
mangHaiChieu = {{1,2}, {3,4}}

for i = 1, #mangHaiChieu do
    for j = 1, #mangHaiChieu[i] do
        print(mangHaiChieu[i][j])
    end
end

Iterator

for khoa, giaTri in ipairs(mang) do
    print(khoa, giaTri)
end

Table

bang = {ten = "Nguyen Van A", tuoi = 25}
table.insert(bang, "moi")
table.remove(bang, 1)
table.sort(bang)

Mô-đun

modun = {}
modun.hangSo = "Giá trị cố định"

function modun.hamCong()
    print("Hàm công khai")
end

local function hamTu()
    print("Hàm riêng tư")
end

function modun.goiHamTu()
    hamTu()
end

return modun

Metatable

setmetatable(bang, {
    __index = function(t, k) 
        return "Giá trị mặc định" 
    end
})

Coroutine

coroutine.create(function()
    print("Coroutine đang chạy")
end)

I/O

-- Đọc file
file = io.open("duLieu.txt", "r")
print(file:read())
file:close()

-- Ghi file
file = io.open("ketQua.txt", "w")
file:write("Nội dung mới")
file:close()

Xử lý lỗi

pcall(hamCoiNghi)
xpcall(hamCoiNghi, hamXuLy)

Database

require "luasql.mysql"
env = luasql.mysql()
conn = env:connect("tenCSDL", "taiKhoan", "matKhau", "diaChi", 3306)
conn:execute("SET NAMES UTF8")

cur = conn:execute("SELECT * FROM bangDuLieu")
file = io.open("ketQua.txt", "w+")

while row do
    file:write(string.format("%d %s\n", row.id, row.ten))
    row = cur:fetch(row, "a")
end

file:close()
conn:close()
env:close()

Thẻ: lua table coroutine module Database

Đăng vào ngày 5 tháng 7 lúc 08:37