Γρήγορη αναφορά

Lua Cheatsheet

Πλήρης οδηγός αναφοράς για τη Lua: βασική σύνταξη, πίνακες και arrays, βρόχοι, metatables, αντικειμενοστραφής προγραμματισμός και τυπική βιβλιοθήκη.

· Δημοσιεύτηκε

Η Lua είναι μια ισχυρή, αποδοτική, ελαφριά και ενσωματώσιμη γλώσσα σεναρίων σχεδιασμένη για την επέκταση εφαρμογών.

Βασική Σύνταξη

Σχόλια

-- Μονόγραμμο σχόλιο

--[[
  Πολύγραμμο σχόλιο
--]]

Συντομογραφία Κλήσης Συναρτήσεων

Οι παρενθέσεις μπορούν να παραλειφθούν όταν η συνάρτηση δέχεται ακριβώς μία συμβολοσειρά ή πίνακα:

print("Hello World")  <==>  print "Hello World"
dofile('app.lua')     <==>  dofile 'app.lua'
config({ x = 1 })     <==>  config{ x = 1 }

Πίνακες (Tables & Arrays)

Οι πίνακες είναι η μοναδική δομή δεδομένων στη Lua. Τα arrays χρησιμοποιούν ευρετηρίαση από το 1:

-- Κενός πίνακας
local t = {}

-- Πίνακας κλειδιού-τιμής (λεξικό)
local user = { name = "Alice", age = 30 }
user.role = "admin"
user["email"] = "[email protected]"

-- Ακολουθιακός πίνακας (ευρετήριο από το 1)
local fruits = { "apple", "banana", "cherry" }
print(fruits[1])  -- τυπώνει "apple"
print(#fruits)    -- τελεστής μήκους (3)

Έλεγχος Ροής & Βρόχοι

Συνθήκες

Μόνο το false και το nil είναι falsy στη Lua. Το 0 και το "" είναι truthy:

if score >= 90 then
  grade = "A"
elseif score >= 80 then
  grade = "B"
else
  grade = "C"
end

Βρόχοι

-- Βρόχος While
local count = 1
while count <= 5 do
  count = count + 1
end

-- Βρόχος Repeat...until (εκτελείται τουλάχιστον μία φορά)
repeat
  count = count - 1
until count == 0

-- Αριθμητικός βρόχος for: for var = start, stop [, step]
for i = 1, 10, 2 do
  print(i) -- 1, 3, 5, 7, 9
end

-- Γενικός βρόχος for: ipairs (πίνακας) και pairs (λεξικό)
for index, value in ipairs(fruits) do
  print(index, value)
end

for key, value in pairs(user) do
  print(key, value)
end

Συναρτήσεις

Ορισμοί & Πολλαπλές Τιμές Επιστροφής

-- Πολλαπλές επιστροφές
local function min_max(a, b)
  if a < b then
    return a, b
  else
    return b, a
  end
end

local minimum, maximum = min_max(10, 5)

-- Μεταβλητός αριθμός ορισμάτων (varargs)
local function sum(...)
  local s = 0
  for _, v in ipairs({...}) do
    s = s + v
  end
  return s
end

Metatables & Αντικειμενοστραφής Προγραμματισμός

Metatables & Metamethods

local Vector = {}
Vector.__index = Vector

function Vector.new(x, y)
  local instance = setmetatable({}, Vector)
  instance.x = x
  instance.y = y
  return instance
end

-- Metamethod πρόσθεσης διανυσμάτων
function Vector.__add(a, b)
  return Vector.new(a.x + b.x, a.y + b.y)
end

function Vector:__tostring()
  return string.format("(%d, %d)", self.x, self.y)
end

local v1 = Vector.new(1, 2)
local v2 = Vector.new(3, 4)
local v3 = v1 + v2
print(v3) -- "(4, 6)"

Αναφορά Metamethods

Metamethod Συμβάν Ενεργοποίησης
__index Ανάγνωση μη υπαρκτού πεδίου (t[k])
__newindex Ανάθεση σε μη υπαρκτό πεδίο (t[k] = v)
__tostring Μετατροπή σε συμβολοσειρά (tostring(t))
__call Κλήση πίνακα ως συνάρτηση (t())
__add, __sub Πρόσθεση (+), αφαίρεση (-)
__mul, __div Πολλαπλασιασμός (*), διαίρεση (/)
__eq, __lt, __le Σύγκριση (==, <, <=)
__concat Συνένωση (..)

APIs Τυπικής Βιβλιοθήκης

Συναρτήσεις Συμβολοσειρών

string.len("hello")             -- 5 (#"hello" also works)
string.lower("HELLO")           -- "hello"
string.upper("hello")           -- "HELLO"
string.sub("hello", 2, 4)       -- "ell"
string.format("%s = %d", "x", 5)-- "x = 5"
string.gsub("banana", "a", "o") -- "bonono"
string.find("hello world", "wor") -- 7, 9

Συναρτήσεις Πινάκων

table.insert(fruits, "orange")     -- Προσάρτηση στο τέλος
table.insert(fruits, 1, "grape")   -- Εισαγωγή στο δείκτη 1
table.remove(fruits, 1)            -- Αφαίρεση πρώτου στοιχείου
table.concat(fruits, ", ")         -- Ένωση συμβολοσειρών: "apple, banana"
table.sort(fruits)                 -- Επιτόπια ταξινόμηση πίνακα

Μαθηματικές Συναρτήσεις

math.abs(-10)         -- 10
math.floor(3.7)       -- 3
math.ceil(3.2)        -- 4
math.max(1, 9, 4)     -- 9
math.random(1, 100)   -- Τυχαίος ακέραιος μεταξύ 1 και 100

Αναφορές

Σχετικά θέματα