0Pricing
Lua Academy · Ders

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  2

Dö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  2

Parantezler 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)           -- 10

string.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.75

table.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])        -- true

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

Hata 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)
end

Birden Ç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  2

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

Kı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.unpack kullanın
  • Kural: başarısızlık durumunda nil, errmsg dö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

  1. İşlev Tanımlama ve Çağırma
  2. Birden Çok Dönüş Değeri
  3. Değişken Sayıda Bağımsız Değer ve ... Operatörü
  4. Lua'da Özyineleme
← Lua Academy Sayfasına Dön