0Pricing
Lua Academy · Ders

İş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))  -- 7

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

Değ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))   -- 20

Yerel 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 overflow

Anı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.0

Geri Ç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 function kullanı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, self değ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

  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