LuLua · Lesson 8 of 8

Lua Cheatsheet

The whole language on one page — it fits.

Lua
-- ── Basics ──────────────────────────────
local x = 42               -- ALWAYS use local
local name = "Ada"
local ok = true
local nothing = nil
print("Hi " .. name)       -- .. concatenates
print(#name)               -- # = length
print(10 // 3, 10 % 3, 2 ^ 8)   -- floor div, mod, power

-- ── Control flow ────────────────────────
if x > 10 then
  print("big")
elseif x > 5 then
  print("medium")
else
  print("small")
end
-- ~= is NOT EQUAL. and / or / not.
-- only nil and false are falsy (0 is truthy!)
local v = maybe or "default"     -- idiom

for i = 1, 5 do print(i) end     -- INCLUSIVE both ends
for i = 10, 1, -1 do end         -- step
while x > 0 do x = x - 1 end     -- no x-- or x -= 1
repeat x = x + 1 until x == 5

-- ── Functions ───────────────────────────
local function divide(a, b)
  if b == 0 then return nil, "div by zero" end
  return a / b                   -- multiple returns
end
local result, err = divide(10, 2)
local double = function (n) return n * 2 end
local function sum(...) return select("#", ...) end
Lua
-- ── Tables (the only data structure) ────
local list = { "a", "b", "c" }   -- array: 1-INDEXED
list[1]                          -- "a"
#list                            -- 3
table.insert(list, "d")          -- append
table.remove(list, 1)
table.sort(list)
table.concat(list, ", ")

local map = { name = "Ada", age = 17 }
map.name; map["name"]            -- same
map.email = "a@b.c"              -- add
map.age = nil                    -- delete

for i, v in ipairs(list) do end  -- arrays (stops at nil)
for k, v in pairs(map) do end    -- everything, any order

-- ── Strings ─────────────────────────────
s:upper(); s:lower(); s:sub(1, 5); s:rep(2)
s:find("pat"); s:gsub("old", "new")
string.format("%s: %.2f", name, 3.14159)
for w in s:gmatch("%a+") do end  -- iterate words
-- patterns: %d digit %a letter %s space %w alnum + * -

-- ── OOP pattern ─────────────────────────
local Dog = {}
Dog.__index = Dog
function Dog.new(name)
  return setmetatable({ name = name }, Dog)
end
function Dog:bark()              -- colon = implicit self
  return self.name .. " woofs"
end
local rex = Dog.new("Rex")
rex:bark()

-- ── Stdlib highlights ───────────────────
math.floor(3.7); math.max(1, 5); math.random(1, 6)
os.time(); os.date("%Y-%m-%d")
local f = io.open("f.txt", "r")
local text = f:read("a"); f:close()
pcall(risky)                     -- protected call (try/catch)