Instrukcje if, elseif i else
Proszę pisać logikę rozgałęzień warunkowych z użyciem składni if/elseif/else języka Lua.
Instrukcje if, elseif i else to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podstawowa instrukcja if
Instrukcja if sprawdza warunek i wykonuje zawarty w niej blok, gdy warunek ma wartość prawdziwą. W Lua tylko false i nil są wartościami fałszywymi; wszystko inne — w tym 0 i "" — jest wartością prawdziwą. Blok należy zakończyć słowem end.
local score = 85
if score >= 90 then
print("A grade")
end
if score >= 60 then
print("Passing") -- prints
end
if 0 then
print("0 is truthy!") -- prints in Lua
endif/elseif/else
Za pomocą elseif można połączyć wiele warunków, a za pomocą else zdefiniować przypadek domyślny. Lua sprawdza warunki od góry do dołu i wykonuje tylko pierwszą pasującą gałąź. W przeciwieństwie do konstrukcji switch/case z innych języków, elseif w Lua jest pojedynczym słowem kluczowym (a nie połączeniem else if).
local score = 75
if score >= 90 then
print("A")
elseif score >= 80 then
print("B")
elseif score >= 70 then
print("C") -- prints
elseif score >= 60 then
print("D")
else
print("F")
endOperatory logiczne w warunkach
Lua używa and, or i not jako operatorów logicznych. Stosują one ewaluację z krótkim spięciem: and zwraca pierwszą wartość fałszywą lub ostatnią wartość, a or zwraca pierwszą wartość prawdziwą lub ostatnią wartość. Umożliwia to typowe wzorce wartości domyślnych.
local age = 25
local hasID = true
if age >= 18 and hasID then
print("Entry allowed")
end
-- or for defaults
local name = nil
local display = name or "Guest"
print(display) -- GuestIdiom ternarny z and/or
Lua nie ma operatora ternarnego, ale wzorzec and/or stanowi jego przybliżenie: condition and trueVal or falseVal. Działa to, o ile trueVal nie jest równe false ani nil. Aby bezpieczniej realizować logikę ternarną, należy użyć funkcji if w wyrażeniu.
local x = 10
local label = (x > 5) and "big" or "small"
print(label) -- big
-- Safe ternary function
local function ternary(cond, t, f)
if cond then return t else return f end
end
print(ternary(false, "yes", "no")) -- noZagnieżdżone instrukcje if
Instrukcje if można zagnieżdżać wewnątrz innych gałęzi. Każdy zagnieżdżony blok wymaga własnego end. Głębokie zagnieżdżenia często sygnalizują możliwość użycia wcześniejszych zwrotów lub klauzul ochronnych w celu uproszczenia logiki.
local loggedIn = true
local isAdmin = false
if loggedIn then
if isAdmin then
print("Admin dashboard")
else
print("User dashboard") -- prints
end
else
print("Login required")
endKlauzule ochronne
Klauzula ochronna to wcześniejszy zwrot obsługujący nieprawidłowe lub brzegowe przypadki na początku funkcji, dzięki czemu zmniejsza zagnieżdżenie. Ten wzorzec pozostawia kod głównej ścieżki bez wcięcia i ułatwia jego odczytywanie.
local function processAge(age)
if type(age) ~= "number" then
return nil, "age must be a number"
end
if age < 0 then
return nil, "age cannot be negative"
end
-- happy path
return math.floor(age)
end
print(processAge(25.7)) -- 25
print(processAge(-1)) -- nil age cannot be negativePorównywanie wartości
Operatory porównań w Lua: == (równe), ~= (różne), <, >, <=, >=. Uwaga: ~= oznacza w Lua „różne” — nie !=. Porównania ciągów znaków wykorzystują porządek leksykograficzny. Nie można bezpośrednio porównywać ciągów znaków z liczbami.
print(1 == 1) -- true
print(1 ~= 2) -- true
print("abc" < "abd") -- true (lexicographic)
print("10" == 10) -- false (different types)
-- Safe nil check
local val = nil
if val == nil then
print("no value")
endRówność ciągów znaków
Dwa ciągi znaków są równe w Lua wtedy i tylko wtedy, gdy mają taką samą zawartość bajtową i długość. Lua internuje ciągi znaków, dlatego równe ciągi często wskazują ten sam obszar pamięci, co sprawia, że == może działać jako szybkie porównanie wskaźników. Nie należy porównywać ciągów za pomocą is ani równości referencji — == zawsze porównuje wartości.
local s1 = "hello"
local s2 = "hel" .. "lo"
print(s1 == s2) -- true (same content)
print(s1 == "Hello") -- false (case sensitive)
-- Check for empty string
local name = ""
if name == "" or name == nil then
print("name is empty or nil")
endPorównywanie tabel i funkcji
Tabele i funkcje są porównywane przez referencję, a nie na podstawie zawartości. Dwie różne literały tabel o identycznej zawartości są nierówne, chyba że reprezentują ten sam obiekt. Do definiowania niestandardowej równości tabel należy używać metod metatabel, takich jak __eq.
local t1 = {1, 2, 3}
local t2 = {1, 2, 3}
local t3 = t1
print(t1 == t2) -- false (different objects)
print(t1 == t3) -- true (same reference)
local f1 = function() end
local f2 = function() end
print(f1 == f2) -- falseTypowe wzorce
Typowe idiomy Lua związane z warunkami: należy używać assert() do sprawdzania warunków wstępnych, stosować sztuczkę and/or dla krótkich wartości domyślnych oraz unikać podwójnych negacji (not not x) do konwersji dowolnej wartości na wartość logiczną.
-- assert pattern
local function sqrt(n)
assert(n >= 0, "sqrt of negative")
return math.sqrt(n)
end
-- Convert to boolean
local val = 42
local boolVal = not not val
print(boolVal) -- true
-- Default parameter
local function greet(name)
name = name or "World"
print("Hello, " .. name)
end
greet() -- Hello, WorldSzybkie sprawdzenie
Które wartości są fałszywe w Lua?
Podsumowanie: instrukcje warunkowe
Podsumowanie:
if ... elseif ... else ... end— pełna forma rozgałęzienia- Tylko
nilifalsesą wartościami fałszywymi and/orstosują ewaluację z krótkim spięciem i zwracają wartości operandów~=oznacza w Lua „różne” (a nie !=)- Tabele i funkcje są porównywane przez referencję, a ciągi znaków — według wartości
- Klauzule ochronne pomagają ograniczyć zagnieżdżenia
Ucz się Lua dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 40
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Instrukcje if, elseif i else” jest bezpłatna?
Tak — pełny tekst „Instrukcje if, elseif i else” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Instrukcje if, elseif i else”?
Proszę pisać logikę rozgałęzień warunkowych z użyciem składni if/elseif/else języka Lua. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Instrukcje if, elseif i else”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Instrukcje if, elseif i else
- Pętle while i repeat-until
- Pętla numeryczna for
- for ogólne i break