Lua Academy · Oppitunti

Luan tietotyyppien yleiskatsaus

Tutustu nil-, boolean-, number-, string-, table-, function- ja userdata-tyyppeihin.

Oppitunti 1/412 vaihetta

Luan tietotyyppien yleiskatsaus 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.

Tervetuloa Luaan

Lua on kevyt, nopea ja upotettava komentosarjakieli, jota käytetään pelimoottoreissa, verkkopalvelimissa ja sulautetuissa järjestelmissä. Ennen varsinaisten ohjelmien kirjoittamista on tärkeää ymmärtää, miten Lua esittää tietoja.

Luassa on 8 perustyyppiä: nil, boolean, number, string, table, function, userdata ja thread. Jokainen Lua-arvo kuuluu täsmälleen yhteen näistä tyypeistä.

-- Check the type of any value with type()
print(type(42))        -- number
print(type("hello"))   -- string
print(type(true))      -- boolean
print(type(nil))       -- nil

nil: arvon puuttuminen

nil on Luan tapa esittää tyhjää tai arvon puuttumista. Se on tyyppinsä ainoa arvo. Muuttujat, joille ei ole koskaan annettu arvoa, sisältävät automaattisesti arvon nil.

Arvon nil antaminen globaalille muuttujalle käytännössä poistaa muuttujan. Tauluissa avaimen arvoksi asetettu nil poistaa kyseisen alkion kokonaan.

-- Unassigned variables are nil
print(x)          -- nil

x = 10
print(x)          -- 10

x = nil
print(x)          -- nil (variable is gone)

boolean: true ja false

boolean-tyypillä on täsmälleen kaksi arvoa: true ja false. Luan totuusarvosäännöt ovat yksinkertaiset mutta tärkeät: ainoastaan nil ja false ovat epätosia. Kaikki muu — myös luku 0 ja tyhjä merkkijono "" — on totta.

Tämä poikkeaa monista kielistä, joissa 0 tai "" tulkitaan epätosiksi.

-- Lua truthiness examples
if 0 then print("0 is truthy!") end       -- prints!
if "" then print("empty str is truthy!") end -- prints!
if nil then print("nil") else print("nil is falsy") end
if false then print("false") else print("false is falsy") end

number: kokonaisluvut ja liukuluvut

Lua 5.3+:ssa number-tyypillä on kaksi alatyyppiä: integer ja float. Kokonaisluvut ovat tarkkoja 64-bittisiä arvoja, kun taas liukuluvut käyttävät IEEE 754 -standardin mukaista kaksinkertaista tarkkuutta. Lua 5.1:ssä ja 5.2:ssa kaikki luvut ovat double-liukulukuja.

math.type()-funktio erottaa nämä kaksi alatyyppiä toisistaan. Jako operaattorilla / palauttaa aina liukuluvun, kun taas // (lattiajako) palauttaa kokonaisluvun, jos molemmat operandit ovat kokonaislukuja.

print(type(10))       -- number
print(type(10.5))     -- number
print(math.type(10))  -- integer
print(math.type(10.5))-- float
print(10 / 3)         -- 3.3333...
print(10 // 3)        -- 3  (floor division)

string: tekstiä Luassa

Luan merkkijonot ovat muuttumattomia tavujonoja. Ne voi rajata yksinkertaisilla tai kaksinkertaisilla lainausmerkeillä tai monirivisissä merkkijonoissa pitkillä hakasuluilla [[...]]. Pitkillä hakasuluilla rajatut merkkijonot ohittavat ensimmäisen rivinvaihdon ja säilyttävät kaiken muun sellaisenaan.

Luan merkkijonot ovat internoituja, joten samanlaiset merkkijonot jakavat muistia. Pituusoperaattori # palauttaa tavujen määrän.

local s1 = 'single quotes'
local s2 = "double quotes"
local s3 = [[multi-line
long string]]

print(#s1)           -- 13
print(type(s1))      -- string
print(s1 .. " works") -- concatenation with ..

table: yleiskäyttöinen säilö

table-tyyppi on Luan ainoa yhdistelmätietorakenne, mutta se on tarpeeksi tehokas taulukoiden, sanakirjojen, olioiden, joukkojen ja monen muun rakenteen toteuttamiseen. Taulut ovat assosiatiivisia taulukoita: ne yhdistävät avaimia arvoihin, ja avaimena voi olla mikä tahansa muu kuin nil- tai NaN-arvo.

Taulut luodaan aaltosulkeilla {}. Taulukkomaiset taulut käyttävät kokonaislukuavaimia alkaen luvusta 1.

-- Array style
local fruits = {"apple", "banana", "cherry"}
print(fruits[1])   -- apple (1-indexed!)

-- Dictionary style
local person = {name = "Alice", age = 30}
print(person.name) -- Alice
print(person["age"]) -- 30

function: ensimmäisen luokan arvot

Luan funktiot ovat function-tyypin ensimmäisen luokan arvoja. Niitä voi tallentaa muuttujiin, välittää argumentteina ja palauttaa muista funktioista. Tämän ansiosta Lua soveltuu luontevasti funktionaalisen ohjelmoinnin malleihin.

Funktioita voi määrittää avainsanalla function tai nimettömiä funktioita voi sijoittaa muuttujiin. Molemmat muodot vastaavat toisiaan.

-- Two equivalent ways to define a function
function greet(name)
  return "Hello, " .. name
end

local greet2 = function(name)
  return "Hello, " .. name
end

print(type(greet))   -- function
print(greet("Lua"))  -- Hello, Lua

userdata ja thread

userdata edustaa isäntäsovelluksen hallinnoimaa mielivaltaista C-dataa. Userdata-arvoja ei voi luoda puhtaassa Luassa, vaan ne tulevat C-laajennuksista tai upotusympäristöistä, kuten pelimoottoreista. Niiden avulla C-koodi voi tarjota olioita Lua-komentosarjojen käyttöön.

thread edustaa korutiineja eli itsenäisiä suorituspolkuja, joilla on omat pinonsa. Tutustumme korutiineihin omassa oppitunnissaan. Tässä vaiheessa riittää tietää, että coroutine.create() palauttaa thread-tyyppisen arvon.

-- thread type via coroutine
local co = coroutine.create(function()
  print("coroutine body")
end)

print(type(co))  -- thread

-- userdata comes from C, not creatable in pure Lua
-- type(io.stdin) == "file" is a userdata variant

Arvojen tarkasteleminen type()-funktion avulla

Sisäänrakennettu type()-funktio palauttaa aina merkkijonon, joka ilmoittaa argumenttinsa tyypin. Tämä on hyödyllistä puolustavassa ohjelmoinnissa ja virheenkorjauksessa. Palautettua merkkijonoa voi verrata suoraan tyyppien nimiin.

Huomaa, että type(nil) palauttaa merkkijonon "nil", ei itse arvoa nil. Näin voit tarkistaa turvallisesti, sisältääkö muuttuja arvon nil, ilman virheitä.

local values = {42, "hi", true, nil, {}, function() end}

-- Note: nil in table stops ipairs early
for i = 1, 3 do
  print(i, type(values[i]))
end
-- 1  number
-- 2  string
-- 3  boolean

Erot muiden kielten tyyppeihin

Jos tunnet JavaScriptin, Pythonin tai Javan, jotkin Luan tyyppisäännöt saattavat yllättää. type()-funktio ei näe erillistä kokonaislukutyyppiä — sekä kokonaisluvut että liukuluvut palauttavat arvon "number". Taulukoilla ei ole omaa tyyppiä, vaan ne ovat yksinkertaisesti tauluja. Luokkia ei ole — oliot ovat tauluja, joihin liittyy metatauluja.

Näiden erojen ymmärtäminen ehkäisee yleisiä virheitä kielten välillä siirryttäessä.

-- No separate array type
local arr = {1, 2, 3}
print(type(arr))      -- table (not array!)

-- No separate integer type visible
print(type(1))        -- number
print(type(1.0))      -- number

-- math.type distinguishes
print(math.type(1))   -- integer
print(math.type(1.0)) -- float

Pikatarkistus

Mitä type(0) palauttaa Luassa?

Kertaus: Luan tietotyypit

Olet oppinut kaikki 8 Luan tyyppiä:

  • nil — arvon puuttuminen; epätosi
  • boolean — true/false; vain nil ja false ovat epätosia
  • number — kokonaisluku tai liukuluku; käytä math.type()-funktiota niiden erottamiseen
  • string — muuttumattomat tavujonot; käytä operaattoria .. yhdistämiseen
  • table — yleiskäyttöinen säilö taulukoille ja sanakirjoille
  • function — ensimmäisen luokan arvot, jotka voi tallentaa muuttujiin
  • userdata — Lualle näkyvä C-data
  • thread — korutiinien käsittelijät

Seuraavaksi: muuttujien määrittäminen — globaali ja paikallinen näkyvyysalue.

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 ”Luan tietotyyppien yleiskatsaus” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Luan tietotyyppien yleiskatsaus”. 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 ”Luan tietotyyppien yleiskatsaus”?

Tutustu nil-, boolean-, number-, string-, table-, function- ja userdata-tyyppeihin. 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 ”Luan tietotyyppien yleiskatsaus”-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. Luan tietotyyppien yleiskatsaus
  2. Muuttujien määrittäminen Luassa
  3. Aritmeettiset ja relaatio-operaattorit
  4. Tyyppien pakotus ja muuntaminen
← Takaisin: Lua Academy