Lua Academy · Lekcja

Instrukcje if, elseif i else

Proszę pisać logikę rozgałęzień warunkowych z użyciem składni if/elseif/else języka Lua.

Lekcja 1 z 412 kroki

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
end

if/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")
end

Operatory 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)   -- Guest

Idiom 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"))  -- no

Zagnież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")
end

Klauzule 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 negative

Poró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")
end

Ró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")
end

Poró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)   -- false

Typowe 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, World

Szybkie sprawdzenie

Które wartości są fałszywe w Lua?

Podsumowanie: instrukcje warunkowe

Podsumowanie:

  • if ... elseif ... else ... end — pełna forma rozgałęzienia
  • Tylko nil i false są wartościami fałszywymi
  • and/or stosują 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
Bezpłatny start

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

  1. Instrukcje if, elseif i else
  2. Pętle while i repeat-until
  3. Pętla numeryczna for
  4. for ogólne i break
← Powrót do Lua Academy