Lua Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World והרצת קוד
Lua מינימליסטית: משפט אחד כבר רץ.
| פעולה | תחביר |
|---|---|
| הדפסת שורה | print("Hello, World!") |
| הדפסת כמה ערכים | print("x", 1, true) |
| כתיבה בלי ירידת שורה | io.write("Hi") |
| הערה | -- this is a comment |
| הערה מרובת שורות | --[[ ... ]] |
| שרשור מחרוזות | print("Hi " .. name) |
| הרצת קובץ | lua app.lua |
| Shell אינטראקטיבי | lua |
משתנים וטיפוסים
משתנים הם גלובליים כברירת מחדל; הצהירו על משתנים מקומיים עם local.
| פעולה | תחביר |
|---|---|
| משתנה מקומי | local age = 30 |
| משתנה גלובלי | count = 0 |
| השמה מרובה | local a, b = 1, 2 |
| שמונת הטיפוסים | nil, boolean, number, string, table, function, userdata, thread |
| Nil / בוליאניים | nil, true, false |
| בדיקת טיפוס | type(x) מחזיר "number" |
| המרה למספר | tonumber("42") |
| המרה למחרוזת | tostring(42) |
מחרוזות
מחרוזות אינן ניתנות לשינוי; גם מירכאות בודדות וגם כפולות עובדות.
| פעולה | תחביר |
|---|---|
| אורך | #s או string.len(s) |
| שרשור | s1 .. s2 |
| אותיות גדולות / קטנות | s:upper(), s:lower() |
| תת-מחרוזת | s:sub(1, 3) |
| חיפוש תת-מחרוזת | s:find("ell") |
| החלפה (gsub) | s:gsub("a", "b") |
| עיצוב | string.format("%05d", 42) |
| מחרוזת ארוכה | [[ multi\nline ]] |
טבלאות (מבנה הנתונים המרכזי)
טבלאות הן הטיפוס המובנה היחיד של Lua: הן משמשות כמערכים, כ-maps וכאובייקטים.
| פעולה | תחביר |
|---|---|
| טבלה ריקה | local t = {} |
| בסגנון מערך (מתחיל מ-1) | local t = {10, 20, 30} |
| גישה לאיבר במערך | t[1] (האיבר הראשון) |
| טבלה בסגנון map | local u = {name = "Ada", age = 30} |
| גישה לערך ב-map | u.name או u["name"] |
| הגדרת ערך | t[4] = 40, u.email = "a@x.com" |
| אורך החלק המערכי | #t |
| מעבר על מערך (ipairs) | for i, v in ipairs(t) do ... end |
| מעבר על כל המפתחות (pairs) | for k, v in pairs(u) do ... end |
| טבלה מקוננת | local m = {a = {1, 2}} |
בקרת זרימה
בלוקים נסגרים ב-end; רק nil ו-false נחשבים שקריים.
| פעולה | תחביר |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| אופרטורים לוגיים | and, or, not |
| for מספרי | for i = 1, 10 do ... end |
| for עם קפיצה | for i = 10, 1, -1 do ... end |
| לולאת while | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| אופרטור לא שווה | if a ~= b then ... end |
פונקציות
פונקציות הן ערכים מדרגה ראשונה ויכולות להחזיר כמה תוצאות.
| פעולה | תחביר |
|---|---|
| הגדרת פונקציה | function add(a, b) return a + b end |
| פונקציה מקומית | local function square(x) return x * x end |
| פונקציה אנונימית | local f = function(x) return x * 2 end |
| כמה ערכי החזרה | function bounds() return 1, 10 end |
| קבלת כמה ערכי החזרה | local lo, hi = bounds() |
| פונקציה עם מספר משתנה של ארגומנטים | function sum(...) ... end |
| איסוף ה-varargs | local args = {...} |
| מתודה (תחביר נקודתיים) | function obj:greet() ... end |
ספריית string
פונקציות נפוצות מספריית string (אפשר לקרוא להן גם כ-s:fn()).
| פונקציה | מה היא עושה |
|---|---|
string.len(s) | אורך המחרוזת |
string.sub(s, i, j) | תת-מחרוזת מאינדקס i עד j |
string.upper(s) | עותק באותיות גדולות |
string.rep(s, n) | חזרה על המחרוזת n פעמים |
string.find(s, p) | חיפוש תבנית, מחזירה התחלה/סוף |
string.match(s, p) | מחזירה את ההתאמה הראשונה לתבנית |
string.gsub(s, p, r) | החלפת כל ההתאמות לתבנית |
string.format(fmt, ...) | עיצוב ערכים לתוך מחרוזת |
ספריות table ו-math
פונקציות עזר לעבודה עם טבלאות בסגנון מערך ועם מספרים.
| פונקציה | מה היא עושה |
|---|---|
table.insert(t, v) | הוספת ערך לסוף |
table.insert(t, i, v) | הכנסת v במיקום i |
table.remove(t, i) | הסרה והחזרה של האיבר במיקום i |
table.concat(t, ", ") | חיבור האיברים למחרוזת |
table.sort(t) | מיון המערך במקום |
math.floor(x) / math.ceil(x) | עיגול למטה / למעלה |
math.max(...) / math.min(...) | הארגומנט הגדול / הקטן ביותר |
math.random(1, 6) | מספר שלם אקראי בטווח |
Metatables (בקצרה)
Metatables מאפשרות להתאים אישית את ההתנהגות של טבלאות: אופרטורים, גישה לאינדקסים ועוד.
| פעולה | תחביר |
|---|---|
| הגדרת metatable | setmetatable(t, mt) |
| קבלת metatable | getmetatable(t) |
| ערך חלופי למפתחות חסרים | mt.__index = defaults |
| ברירת מחדל דרך פונקציה | mt.__index = function(t, k) ... end |
| התאמה אישית של חיבור | mt.__add = function(a, b) ... end |
| התאמה אישית של tostring | mt.__tostring = function(t) ... end |
| OOP מבוסס prototype | mt.__index = ClassTable |
התחביר של Lua שהכי שימושי, בעמוד אחד. ה-Lua cheat sheet הזה הוא דף עזר מהיר לליבת השפה: משתנים וטיפוסים, מחרוזות, בקרת זרימה, פונקציות, והטבלאות שמשמשות כמבנה הנתונים היחיד והגמיש של Lua, וגם הצצה לספריות הסטנדרטיות ול-metatables.
כל מה שכאן הוא Lua סטנדרטי ורץ על מפרש רגיל. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של Lua, בלי צורך בהתקנה.
שאלות נפוצות על ה-Lua cheat sheet
האם ה-Lua cheat sheet הזה בחינם?
איך טבלה ב-Lua יכולה להיות גם מערך וגם map?
{10, 20, 30}) הטבלה מתנהגת כמו מערך; כשמשתמשים במפתחות מחרוזת ({name = "Ada"}) היא מתנהגת כמו map. אפשר אפילו לשלב את שניהם באותה טבלה. זו הסיבה ש-Lua צריכה רק טיפוס מובנה אחד: הטבלה מכסה מערכים, מילונים, קבוצות ואובייקטים.למה ב-Lua האינדקסים מתחילים מ-1?
t[1] הוא האיבר הראשון ו-#t הוא מספר האיברים. אופרטור האורך # ופונקציות ספרייה כמו table.insert ו-ipairs מניחים כולם את המוסכמה הזו, ולכן היצמדות אליה שומרת על קוד המערכים שלכם עובד כמצופה.