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 cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שצריך לבדוק פעולה על טבלה, פונקציית מחרוזת או מילת מפתח של בקרת זרימה.
איך טבלה ב-Lua יכולה להיות גם מערך וגם map?
{10, 20, 30}) הטבלה מתנהגת כמו מערך; כשמשתמשים במפתחות מחרוזת ({name = "Ada"}) היא מתנהגת כמו map. אפשר אפילו לשלב את שניהם באותה טבלה. זו הסיבה ש-Lua צריכה רק טיפוס מובנה אחד: הטבלה מכסה מערכים, מילונים, קבוצות ואובייקטים.למה ב-Lua האינדקסים מתחילים מ-1?
t[1] הוא האיבר הראשון ו-#t הוא מספר האיברים. אופרטור האורך # ופונקציות ספרייה כמו table.insert ו-ipairs מניחים כולם את המוסכמה הזו, ולכן היצמדות אליה שומרת על קוד המערכים שלכם עובד כמצופה.אפשר לתרגל Lua אונליין?
כן. פתחו את עורך האונליין של Lua כדי להריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין Lua. כשתרצו מסגרת מסודרת, קורס Lua האינטראקטיבי והחינמי של Coddy לוקח אתכם צעד אחר צעד ממשתנים וטבלאות ועד פונקציות ו-metatables.
האם דף העזר הזה מתאים למתחילים?
כן. הוא מסודר מהנושאים הנפוצים ביותר (משתנים, מחרוזות, טבלאות, בקרת זרימה) ועד המתקדמים (הספריות הסטנדרטיות ו-metatables), כך שאפשר להשתמש בחלקים העליונים כבר מהיום הראשון ולהתקדם לשאר בהמשך.