Lua Academy · Les

Basisprincipes van strings: concat en lengte

Gebruik .. voor concatenatie, # voor de lengte en string.rep/reverse

Les 1 van 412 stappen

Basisprincipes van strings: concat en lengte is een gratis Lua Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Tekenreeksen samenvoegen met ..

Lua gebruikt .. (twee punten) om tekenreeksen samen te voegen. Dit werkt met tekenreeksen en getallen (getallen worden automatisch omgezet). In tegenstelling tot + in veel talen is + in Lua alleen rekenkundig — + gebruiken op tekenreeksen veroorzaakt een fout.

local first = "Hello"
local second = "World"
print(first .. ", " .. second .. "!")  -- Hello, World!

-- Numbers auto-converted
local age = 30
print("Age: " .. age)   -- Age: 30

-- Bad: print("x" + "y")  ERROR: arithmetic on string

Lengteoperator #

De operator # geeft de lengte van een tekenreeks in bytes terug. Voor ASCII-tekenreeksen is dit gelijk aan het aantal tekens. Voor UTF-8-tekenreeksen met meerdere bytes telt # bytes, geen tekens — een UTF-8-emoji telt als 4. Gebruik een UTF-8-bibliotheek voor lengtes die precies het aantal tekens aangeven.

print(#"hello")        -- 5
print(#"")             -- 0
print(#"café")         -- 5 (c,a,f,é=2bytes)

local s = "Lua"
for i = 1, #s do
  io.write(string.byte(s, i) .. " ")
end
print()  -- 76 117 97

string.rep en string.reverse

string.rep(s, n, sep) herhaalt tekenreeks s precies n keer, met een optioneel scheidingsteken. string.reverse(s) keert de bytevolgorde van de tekenreeks om. Beide geven nieuwe tekenreeksen terug — Lua-tekenreeksen zijn onveranderlijk.

print(string.rep("ab", 3))       -- ababab
print(string.rep("ha", 3, "-"))  -- ha-ha-ha
print(string.rep("x", 0))        -- (empty)
print(string.reverse("hello"))   -- olleh
print(string.reverse("12345"))   -- 54321

string.upper en string.lower

string.upper(s) en string.lower(s) zetten ASCII-tekens om. Ze verwerken Unicode niet — niet-ASCII-tekens blijven ongewijzigd. Zet voor een hoofdletterongevoelige vergelijking beide tekenreeksen om naar kleine letters voordat je ze vergelijkt.

print(string.upper("hello"))     -- HELLO
print(string.lower("WORLD"))     -- world
print(string.upper("Lua 5.4!"))  -- LUA 5.4!

-- Case-insensitive comparison
local a = "Hello"
local b = "hello"
print(a:lower() == b:lower())    -- true

Syntaxis voor methoden met dubbele punt

Je kunt tekenreeksfuncties met dubbelepuntnotatie aanroepen op tekenreekswaarden: s:upper() in plaats van string.upper(s). Dit werkt omdat tekenreeksen een metatabel hebben met __index = string, waardoor alle functies uit de tekenreeksbibliotheek als methoden op elke tekenreeks toegankelijk zijn.

local s = "  hello world  "
print(s:upper())         -- HELLO WORLD
print(s:len())           -- 15
print(s:rep(2, "|"))     -- same as string.rep(s,2,"|")

-- Chain calls
print(("lua"):upper():reverse())  -- AUL

Onveranderlijkheid van tekenreeksen

Lua-tekenreeksen zijn onveranderlijk. Je kunt tekens niet direct wijzigen. Elke bewerking op een tekenreeks maakt een nieuwe tekenreeks. Gebruik bij veelvuldig samenvoegen binnen lussen een tabel om onderdelen te verzamelen en aan het einde table.concat toe te passen — dit is veel efficiënter dan herhaaldelijk .. gebruiken.

-- Efficient string building
local parts = {}
for i = 1, 5 do
  parts[i] = "item" .. i
end
local result = table.concat(parts, ", ")
print(result)  -- item1, item2, item3, item4, item5

-- Slow! Creates 5 intermediate strings:
-- local s = ""
-- for i = 1, 5 do s = s .. "item" .. i end

table.concat voor samenvoegen

table.concat(t, sep, i, j) voegt array-elementen samen tot een tekenreeks met een scheidingsteken. Dit werkt alleen met waarden van het type tekenreeks en getal — tabellen of booleans veroorzaken een fout. Dit is de snelste manier om tekenreeksen uit veel onderdelen op te bouwen.

local parts = {"one", "two", "three", "four"}
print(table.concat(parts, ", "))          -- one, two, three, four
print(table.concat(parts, " | ", 2, 3))  -- two | three

-- Building CSV
local row = {1, "Alice", 95, true}
-- Need tostring for non-string values:
for i, v in ipairs(row) do row[i] = tostring(v) end
print(table.concat(row, ","))

Tekenreeksen vergelijken

Tekenreeksen worden lexicografisch vergeleken op basis van hun bytewaarden. Hoofdletters komen in ASCII vóór kleine letters (A=65, a=97), dus "Z" < "a" is waar. Gebruik string.lower aan beide kanten voor een hoofdletterongevoelige volgorde.

print("abc" < "abd")    -- true
print("abc" < "abcd")   -- true (shorter)
print("Z" < "a")        -- true (Z=90, a=97)
print("10" < "9")       -- true (lexicographic!)
print(10 < 9)           -- false (numeric)

-- Sort strings case-insensitively
local words = {"Banana","apple","Cherry"}
table.sort(words, function(a,b) return a:lower()<b:lower() end)
print(table.concat(words,", "))

tostring en tonumber

tostring(v) zet elke waarde om naar de tekenreeksrepresentatie ervan. tonumber(s, base) parseert een tekenreeks naar een getal. tonumber retourneert nil als het parsen mislukt, in tegenstelling tot veel talen die een uitzondering genereren. Voor het parsen van gehele getallen kan base 2–36 zijn.

print(tostring(42))        -- 42
print(tostring(true))      -- true
print(tostring(nil))       -- nil
print(tostring({1,2}))     -- table: 0x...

print(tonumber("3.14"))    -- 3.14
print(tonumber("0xff"))    -- 255 (hex)
print(tonumber("11",2))    -- 3 (binary)
print(tonumber("abc"))     -- nil (invalid)

Tekenreeksinterning

Lua interned korte tekenreeksen: identieke tekenreeksinhoud deelt hetzelfde object in het geheugen. Daardoor is == voor tekenreeksen na een hashcontrole in feite een pointervergelijking — zeer snel. Interning betekent ook dat het maken van een tekenreeks een kleine overhead heeft (het berekenen van de hash), maar herhaalde tekenreeksen geen extra kosten hebben.

local s1 = "hello"
local s2 = "hel" .. "lo"

-- Same content, interned to same object
print(s1 == s2)   -- true
print(#s1)        -- 5

-- Long strings may not be interned
-- They are still compared correctly by value
local long1 = string.rep("x", 1000)
local long2 = string.rep("x", 1000)
print(long1 == long2)  -- true

Korte controle

Wat is in Lua de efficiëntste manier om een lange tekenreeks uit veel kleine delen op te bouwen?

Samenvatting: de basis van tekenreeksen

Belangrijkste punten:

  • .. voegt tekenreeksen samen; gebruik nooit + voor tekenreeksen
  • #s telt bytes (geen Unicode-tekens)
  • s:upper(), s:lower(), s:rep(n, sep), s:reverse()
  • Tekenreeksen zijn onveranderlijk — elke bewerking retourneert een nieuwe tekenreeks
  • Bouw grote tekenreeksen op met een tabel en table.concat
  • tostring/tonumber voor typeconversie
Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Basisprincipes van strings: concat en lengte” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Basisprincipes van strings: concat en lengte”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Basisprincipes van strings: concat en lengte”?

Gebruik .. voor concatenatie, # voor de lengte en string.rep/reverse Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Basisprincipes van strings: concat en lengte”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Basisprincipes van strings: concat en lengte
  2. Substrings zoeken en extraheren
  3. string.format voor uitvoer
  4. string.gsub en string.gmatch
← Terug naar Lua Academy