Lua Academy · Oppitunti

if-, elseif- ja else-lauseet

Kirjoittakaa ehtoh haarautuvaa logiikkaa Luan if/elseif/else-syntaksilla.

Oppitunti 1/412 vaihetta

if-, elseif- ja else-lauseet on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Perusmuotoinen if-lause

if-lause arvioi ehdon ja suorittaa lohkonsa, kun ehto on tosiarvoinen. Luassa vain false ja nil ovat epätosiarvoisia; kaikki muut arvot, myös 0 ja "", ovat tosiarvoisia. Lopettakaa lohko sanalla 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

Ketjuttakaa useita ehtoja elseif-rakenteilla ja määrittäkää vaihtoehtoinen käsittely else-rakenteella. Lua arvioi ehdot ylhäältä alaspäin ja suorittaa vain ensimmäisen ehdon täyttävän haaran. Toisin kuin muiden kielten switch/case-rakenteissa, Luassa elseif on yksi avainsana, ei yhdistelmä 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

Loogiset operaattorit ehdoissa

Lua käyttää loogisina operaattoreina sanoja and, or ja not. Ne käyttävät oikosulkulaskentaa: and palauttaa ensimmäisen epätosiarvoisen arvon tai viimeisen arvon; or palauttaa ensimmäisen tosiarvoisen arvon tai viimeisen arvon. Tämä mahdollistaa Lua-kielelle tyypilliset oletusarvorakenteet.

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

Kolmiarvoisen ehdon idiomi and/or-operaattoreilla

Luassa ei ole kolmiarvo-operaattoria, mutta rakenne and/or jäljittelee sitä: condition and trueVal or falseVal. Tämä toimii, kunhan trueVal ei ole false eikä nil. Turvallisempaan kolmiarvoiseen logiikkaan voitte käyttää upotettua if-funktiota.

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

Sisäkkäiset if-lauseet

Voitte sijoittaa if-lauseita muiden haarojen sisään. Jokainen sisäkkäinen lohko tarvitsee oman end-sanansa. Syvä sisäkkäisyys on usein merkki siitä, että logiikkaa voisi yksinkertaistaa aikaisilla paluuarvoilla tai suojalauseilla.

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

Suojalauseet

Suojalause on funktion alussa suoritettava aikainen paluu, joka käsittelee virheelliset tai poikkeavat tapaukset ja vähentää sisäkkäisyyttä. Tämän rakenteen ansiosta varsinainen suorituspolku pysyy sisentämättömänä ja helpompana lukea.

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

Arvojen vertaileminen

Luan vertailuoperaattorit ovat: == (yhtä suuri), ~= (eri suuri), <, >, <= ja >=. Huomioikaa, että ~= tarkoittaa Luassa eri suurta, ei !=. Merkkijonoja verrataan leksikografisessa järjestyksessä. Merkkijonoja ja lukuja ei voi verrata suoraan toisiinsa.

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

Merkkijonojen yhtäsuuruus

Kaksi merkkijonoa ovat Luassa yhtä suuret, jos ja vain jos niiden tavusisältö ja pituus ovat samat. Lua säilöö merkkijonot yksikäsitteisinä, joten yhtä suuret merkkijonot viittaavat usein samaan muistialueeseen, mikä tekee ==-vertailusta nopean osoitinvertailun. Älkää koskaan verratko merkkijonoja operaattorilla is tai viitevertailulla – == vertaa aina arvoja.

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

Taulukoiden ja funktioiden vertailu

Taulukoita ja funktioita verrataan viitteiden, ei sisällön, perusteella. Kaksi eri taulukkoliteraalia, joilla on sama sisältö, eivät ole yhtä suuria, elleivät ne ole sama olio. Voitte määrittää taulukoille mukautetun yhtäsuuruuden metametodeilla, kuten __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

Tyypilliset rakenteet

Yleisiä Lua-idiomeja ehtojen yhteydessä ovat assert()-funktion käyttäminen esiehtojen tarkistamiseen, and/or-tempun käyttäminen lyhyisiin oletusarvoihin sekä kaksoiskieltojen (not not x) välttäminen, kun haluatte muuntaa minkä tahansa arvon totuusarvoksi.

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

Pikatarkistus

Mitkä arvot ovat Luassa epätosiarvoisia?

Kertaus: ehdolliset rakenteet

Yhteenveto:

  • if ... elseif ... else ... end – täydellinen haarautumisrakenne
  • Vain nil ja false ovat epätosiarvoisia
  • and/or käyttävät oikosulkulaskentaa ja palauttavat operandien arvot
  • ~= tarkoittaa Luassa eri suurta, ei !=
  • Taulukoita ja funktioita verrataan viitteiden perusteella, merkkijonoja arvojen perusteella
  • Vähentäkää sisäkkäisyyttä käyttämällä suojalauseita
Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”if-, elseif- ja else-lauseet” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “if-, elseif- ja else-lauseet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”if-, elseif- ja else-lauseet”?

Kirjoittakaa ehtoh haarautuvaa logiikkaa Luan if/elseif/else-syntaksilla. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”if-, elseif- ja else-lauseet”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. if-, elseif- ja else-lauseet
  2. while- ja repeat-until-silmukat
  3. Numeerinen for-silmukka
  4. Geneerinen for ja break
← Takaisin: Lua Academy