Birden Çok Dönüş Değeri
Tek bir işlev çağrısından birden çok değeri döndürün ve yakalayın.
Birden Çok Dönüş Değeri, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Birden Çok Değer Döndürme
Çoğu dilden farklı olarak Lua fonksiyonları, tek bir return ifadesinden doğal olarak birden çok değer döndürebilir. Birden çok değer, return ifadesinden sonra virgülle ayrılır. Bu sayede sarmalayıcı nesnelere veya çıktı parametrelerine gerek kalmaz.
local function divmod(a, b)
return math.floor(a / b), a % b
end
local quotient, remainder = divmod(17, 5)
print(quotient, remainder) -- 3 2Döndürülen Değerleri Ayarlama
Lua, döndürülen değerleri alıcıların sayısıyla eşleşecek şekilde ayarlar. Fazladan değerler atılır; eksik değerler nil olur. Bu ayarlama, bir fonksiyon çağrısı listedeki son ifade olmadığında gerçekleşir — bu konumda yalnızca ilk değer korunur.
local function triple()
return 10, 20, 30
end
local a, b, c = triple()
print(a, b, c) -- 10 20 30
local x, y = triple()
print(x, y) -- 10 20 (30 discarded)
local p = triple()
print(p) -- 10 (only first when 1 var)Orta Konumda Ayarlama
Bir fonksiyon çağrısı bir ifade listesinin ortasında göründüğünde (son konumda olmadığında), Lua onu tek bir değere indirger. Yalnızca listedeki son ifade birden çok değer üretebilir.
local function pair()
return 1, 2
end
-- pair() in middle: only 1 value used
local t = {pair(), pair()}
print(#t, t[1], t[2], t[3]) -- 3 1 1 2
-- first pair() gives just 1; last pair() gives 1,2
-- pair() at end: all values used
local t2 = {10, pair()}
print(#t2, t2[1], t2[2], t2[3]) -- 3 10 1 2Parantezler Tek Bir Değeri Zorunlu Kılar
Bir fonksiyon çağrısını parantez içine almak, fonksiyonun tam olarak bir değer döndürmesini zorunlu kılar. Fonksiyon kaç değer üretirse üretsin yalnızca ilk döndürülen değeri istediğinizde bu kullanışlıdır.
local function coords()
return 10, 20, 30
end
print(coords()) -- 10 20 30 (all three)
print((coords())) -- 10 (parentheses: single value only)
local x = (coords())
print(x) -- 10string.find Döndürülen Değerleri
Standart kitaplıktaki birçok fonksiyon birden çok değer döndürür. string.find, bir eşleşmenin başlangıç ve bitiş konumlarını (ayrıca yakalamaları) döndürür. math.modf, tam sayı ve kesirli kısımları döndürür. Bu kalıpları anlamak, standart kitaplığı akıcı biçimde kullanmanıza yardımcı olur.
local s = "hello world"
local start, finish = string.find(s, "world")
print(start, finish) -- 7 11
-- math.modf: integer and fractional parts
local int, frac = math.modf(3.75)
print(int, frac) -- 3 0.75table.pack ile Yakalama
table.pack(...), tüm bağımsız değişkenleri (veya ... aracılığıyla döndürülen değerleri) bir tabloda toplar. Tablo, nil değerleri de dahil olmak üzere toplam sayıyı içeren bir n alanına sahiptir. Bu, ilk boşlukta duran # operatörünün aksine tam sayıyı korur.
local function getData()
return "Alice", 30, nil, true
end
local t = table.pack(getData())
print(t.n) -- 4
print(t[1]) -- Alice
print(t[2]) -- 30
print(t[3]) -- nil
print(t[4]) -- trueYaymak için table.unpack
table.unpack(t, i, j), bir tablonun öğelerini ayrı değerler olarak döndürür. table.pack işleminin tersidir. Bir tablonun içeriğini bir fonksiyona bağımsız değişken olarak aktarmak veya döndürülen değerleri bir return ifadesinde yaymak için kullanın.
local args = {10, 20, 30}
local function sum3(a, b, c)
return a + b + c
end
print(sum3(table.unpack(args))) -- 60
-- Use in return
local function passThrough(t)
return table.unpack(t)
end
print(passThrough({5, 6, 7})) -- 5 6 7Hata Biçimli Döndürmeler
Yaygın bir Lua kuralı, başarısızlık durumunda nil, errorMessage, başarı durumunda ise sonucu döndürmektir. Çağıran kod ilk döndürülen değeri kontrol eder: değer nil ise bir hata oluşmuştur. Bu yaklaşım, beklenen başarısızlık durumlarında özel durumlara olan ihtiyacı ortadan kaldırır.
local function openConfig(path)
local f = io.open(path, "r")
if not f then
return nil, "cannot open: " .. path
end
local content = f:read("*a")
f:close()
return content
end
local data, err = openConfig("config.lua")
if not data then
print("Error:", err)
endBirden Çok Döndürmeyle Değer Değiştirme
Birden çok döndürülen değer, değer değiştirme sorununu zarif biçimde çözer. Atamadan önce sağ taraf değerlendirilir; bu nedenle a, b = b, a, geçici bir değişkene gerek kalmadan değerleri doğru biçimde takas eder.
local a, b = 5, 10
print(a, b) -- 5 10
a, b = b, a
print(a, b) -- 10 5
-- Works for three-way rotation too
local x, y, z = 1, 2, 3
x, y, z = z, x, y
print(x, y, z) -- 3 1 2pcall Döndürme Kuralı
pcall(f, ...) kendisi de birden çok değer döndürür: ilk değer bir mantıksal değerdir (başarı durumunda true, hata durumunda false), sonraki değerler ise f fonksiyonunun döndürdüğü değerler veya hata iletisidir. Geri kalan değerleri kullanmadan önce her zaman ilk döndürülen değeri kontrol edin.
local function risky(x)
if x < 0 then error("negative input") end
return math.sqrt(x)
end
local ok, result = pcall(risky, 16)
print(ok, result) -- true 4.0
ok, result = pcall(risky, -1)
print(ok, result) -- false input:2: negative inputKısa Kontrol
print((string.find("hello", "ll"))) ne yazdırır?
Özet: Birden Çok Döndürülen Değer
Temel çıkarımlar:
- Birden çok değer döndürün:
return a, b, c - Fazladan değerler atılır; eksik değerler nil olur
- Orta konumdaki çağrılar 1 değere indirgenir
(f())tam olarak 1 değeri zorunlu kılar- Dinamik değer listeleri için
table.pack/table.unpackkullanın - Kural: başarısızlık durumunda
nil, errmsgdöndürün
Sıkça Sorulan Sorular
“Birden Çok Dönüş Değeri” dersi ücretsiz mi?
Evet — “Birden Çok Dönüş Değeri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Birden Çok Dönüş Değeri” dersinde ne öğreneceğim?
Tek bir işlev çağrısından birden çok değeri döndürün ve yakalayın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Birden Çok Dönüş Değeri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İşlev Tanımlama ve Çağırma
- Birden Çok Dönüş Değeri
- Değişken Sayıda Bağımsız Değer ve ... Operatörü
- Lua'da Özyineleme