İşlev Tanımlama ve Çağırma
İşlev bildirimlerinin, çağırma kurallarının ve yerel ile genel işlevlerin söz dizimini öğrenin.
İşlev Tanımlama ve Çağırma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. 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.
İşlev Söz Dizimi
Lua'da işlevler function anahtar sözcüğüyle tanımlanır. Gövde, end ile sonlandırılan bir bloktur. İşlevler genel veya yerel olabilir. Bir işlevi, bağımsız değişkenleri parantez içine ekleyerek çağırırsınız. Bağımsız değişkenleri atlarsanız eksik parametrelere nil atanır.
function sayHello(name)
print("Hello, " .. (name or "World") .. "!")
end
sayHello("Lua") -- Hello, Lua!
sayHello() -- Hello, World!
local function add(a, b)
return a + b
end
print(add(3, 4)) -- 7Dönüş Değerleri
İşlevler değerleri return ile döndürür. Çoğu dilden farklı olarak Lua işlevleri birden çok değer döndürebilir. Açıkça dönüş yapılmazsa işlev hiçbir şey döndürmez (sıfır değer). Çağrı bir listedeki son ifade değilse fazla dönüş değerleri atılır.
local function minMax(t)
local lo, hi = t[1], t[1]
for i = 2, #t do
if t[i] < lo then lo = t[i] end
if t[i] > hi then hi = t[i] end
end
return lo, hi
end
local lo, hi = minMax({5,2,8,1,9})
print(lo, hi) -- 1 9Değer Olarak İşlev
Lua'da işlevler birinci sınıf değerlerdir. Bunları değişkenlerde saklayabilir, başka işlevlere bağımsız değişken olarak aktarabilir ve döndürebilirsiniz. Bu özellik geri çağrıları, üst düzey işlevleri ve işlevsel programlama düzenlerini mümkün kılar.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end,
mul = function(a, b) return a * b end,
}
local function apply(op, a, b)
return op(a, b)
end
print(apply(ops.add, 10, 3)) -- 13
print(apply(ops.mul, 4, 5)) -- 20Yerel ve Genel İşlevler
Modüle özel yardımcılar için local function kullanın. Genel işlevler genel ad alanını kirletir ve her yerden erişilebilir; bu da ad çakışmalarına yol açabilir. Çoğu durumda yerel işlevleri tercih edin ve yalnızca ihtiyaç duyduklarınızı bir modül tablosu üzerinden dışa açın.
-- Bad: pollutes global namespace
function helper() end
-- Good: module-local
local function helper()
return "I am local"
end
-- Module export pattern
local M = {}
function M.publicFunc()
return helper() -- can call local
end
return Mİki Nokta Söz Dizimiyle Yöntemler
Lua, tablolar üzerinde yöntem tanımlamak ve çağırmak için söz dizimsel kolaylık sağlar. obj:method(arg), obj.method(obj, arg) ile eşdeğerdir. İki nokta biçimi, tabloyu ilk bağımsız değişken olarak örtük biçimde aktarır; bu bağımsız değişken geleneksel olarak self adını alır.
local Dog = {}
Dog.__index = Dog
function Dog.new(name)
return setmetatable({name=name}, Dog)
end
function Dog:speak()
print(self.name .. " says: Woof!")
end
local d = Dog.new("Rex")
d:speak() -- Rex says: Woof!İsteğe Bağlı Parametre Düzeni
Lua'da yerleşik isteğe bağlı parametreler yoktur; ancak bunları nil denetimleriyle taklit edebilirsiniz. Çok sayıda isteğe bağlı parametresi olan işlevlerde tek bir seçenekler tablosu aktarın; bu, uzun bir bağımsız değişken listesinden daha temizdir.
local function createUser(name, opts)
opts = opts or {}
return {
name = name,
role = opts.role or "user",
active = opts.active ~= false,
score = opts.score or 0,
}
end
local u = createUser("Alice", {role="admin", score=100})
print(u.name, u.role, u.score)Kuyruk Çağrıları
Kuyruk çağrısı, kuyruk konumundaki bir işlev çağrısıdır (dönmeden önceki son eylem). Lua, kuyruk çağrısı optimizasyonu uygular: uygun bir kuyruk çağrısı ek yığın alanı kullanmaz. Özyinelemeli çağrı kuyruk konumundaysa bu, yığın taşması olmadan derin özyinelemeyi mümkün kılar.
local function factorial(n, acc)
acc = acc or 1
if n <= 1 then return acc end
return factorial(n - 1, n * acc) -- tail call!
end
print(factorial(10)) -- 3628800
-- Can handle very large n without stack overflowAnında Çağrılan İşlevler
Bir işlevi tanımlayıp hemen çağırabilirsiniz: (function() ... end)(). Bu yöntem yerel bir kapsam oluşturmak, kurulum kodunu tam olarak bir kez yürütmek veya geçici değişkenlerle dış kapsamı kirletmemek için kullanışlıdır.
local result = (function()
local temp = 100
local adjusted = temp * 1.5
return math.floor(adjusted)
end)()
print(result) -- 150
-- temp and adjusted not visible hereİşlevleri Tablolarda Saklama
İşlevleri tablolarda saklamak, yerleşik bir Lua modülü tasarımıdır. Tablo bir ad alanı görevi görür. İşlevleri tablo alanlarına atayarak veya tablo adını nokta/iki nokta gösterimiyle kullanarak tanımlarsınız.
local math2 = {}
function math2.clamp(val, lo, hi)
return math.max(lo, math.min(hi, val))
end
function math2.lerp(a, b, t)
return a + (b - a) * t
end
print(math2.clamp(150, 0, 100)) -- 100
print(math2.lerp(0, 10, 0.5)) -- 5.0Geri Çağrı Olarak Kapanımlar
Üst düzey işlevler geri çağrıları kabul eder. Lua'da geri çağrılar yalnızca işlev değerleridir. Kapanımlar, çağrı bağlamını yakaladıkları ve üst düzey işleve ek bağımsız değişkenler aktarmayı gerektirmedikleri için geri çağrı olarak özellikle kullanışlıdır.
local function forEach(t, fn)
for i, v in ipairs(t) do
fn(v, i)
end
end
local sum = 0
forEach({10, 20, 30}, function(v)
sum = sum + v
end)
print(sum) -- 60
forEach({"a","b","c"}, function(v, i)
print(i, v)
end)Hızlı Kontrol
Şu kodun çıktısı nedir: local function f() return 1, 2, 3 end; local a, b = f()?
Özet: Fonksiyonlar
Temel noktalar:
- Genel değişkenleri kirletmemek için
local functionkullanın - Fonksiyonlar birinci sınıf değerlerdir: bunları değişkenlerde ve tablolarda saklayabilir, bağımsız değişken olarak aktarabilirsiniz
- İki nokta üst üste söz dizimi,
selfdeğerini örtük olarak aktarır - İsteğe bağlı parametreleri
opts or {}ile taklit edebilirsiniz - Kuyruk çağrıları, derin özyinelemede yığın taşmasını önler
- Hemen çağrılan fonksiyonlar yalıtılmış kapsamlar oluşturur
Sıkça Sorulan Sorular
“İşlev Tanımlama ve Çağırma” dersi ücretsiz mi?
Evet — “İşlev Tanımlama ve Çağırma” 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.
“İşlev Tanımlama ve Çağırma” dersinde ne öğreneceğim?
İşlev bildirimlerinin, çağırma kurallarının ve yerel ile genel işlevlerin söz dizimini öğrenin. 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 1. dersidir.
“İşlev Tanımlama ve Çağırma” 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