Değer Olarak İşlevler
İşlevleri saklayıp aktarın.
Değer Olarak İşlevler, 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.
İşlevler Birinci Sınıf Değerlerdir
Lua'da işlevler birinci sınıf değerlerdir. Bu, bir işlevin yalnızca veri olduğu anlamına gelir: onu bir değişkende saklayabilir, başka bir işleve aktarabilir, döndürebilir ve bir tabloda tutabilirsiniz.
Bu tek fikir, işlevsel programlamanın temelini oluşturur. İşlevleri sayılar veya dizeler gibi ele aldığınızda esnek ve yeniden kullanılabilir araçlar oluşturabilirsiniz.
Bir İşlevi Değişkende Saklama
Bir işlev için verdiğiniz ad, aslında işlev değerini tutan bir değişkendir. Bu değeri başka bir değişkene serbestçe atayabilirsiniz.
Aşağıdaki iki ad da aynı temel işlevi gösterir; bu nedenle hangisini çağırırsanız çağırın aynı kod çalışır.
local function greet(name)
return "Hello, " .. name
end
local hi = greet
print(greet("Ada"))
print(hi("Lin"))Anonim İşlevler
Bir işlev oluşturmak için ad vermeniz gerekmez. Anonim işlev, function ... end söz dizimiyle yazılır ve doğrudan bir değer olarak kullanılır.
Bir anonim işlevi bir yerel değişkene atamak, yalnızca satır içinde yazılması dışında normal bir işlev tanımıyla aynıdır.
local square = function(x)
return x * x
end
print(square(5))
print(square(9))İşlevleri Bağımsız Değişken Olarak Kullanma
İşlevler değer olduğundan onları başka işlevlere aktarabilirsiniz. Başka bir işlev alan işleve üst düzey işlev denir.
Burada apply, çalıştıracağı işlevi siz verene kadar hangi işi yapacağını bilmez.
local function apply(f, x)
return f(x)
end
local function double(n) return n * 2 end
print(apply(double, 10))
print(apply(function(n) return n + 1 end, 10))Bir İşlev Döndürme
Bir işlev başka bir işlev döndürebilir. Bu, aktardığınız bağımsız değişkenlerle yapılandırılmış işlevleri ihtiyaç anında oluşturmanızı sağlar.
Aşağıda multiplier, her çağrıda yeni bir işlev oluşturur ve verdiğiniz çarpanı hatırlar.
local function multiplier(factor)
return function(x)
return x * factor
end
end
local triple = multiplier(3)
print(triple(4))
print(multiplier(10)(5))Kapanışlar Değişkenleri Yakalar
Döndürülen bir işlev, onu çevreleyen işlevdeki bir yereli kullandığında bu değişkeni yakalar. İşlev ile yakalanan değişkenlerin oluşturduğu bütüne kapanış denir.
Yakalanan factor, dış işlev çağrısı tamamlandıktan sonra bile kapanış var olduğu sürece yaşamaya devam eder.
local function counter()
local n = 0
return function()
n = n + 1
return n
end
end
local next = counter()
print(next())
print(next())
print(next())Tablolardaki İşlevler
Tablolar, diğer tüm değerler gibi işlevleri de tutabilir. Lua modülleri ve nesneleri bu şekilde oluşturur: bir tablo, adları işlev değerleriyle eşler.
Bir işlevi anahtarına göre bulup çağırabilir veya bir işlemler tablosu üzerinde yineleme yapabilirsiniz.
local ops = {
add = function(a, b) return a + b end,
sub = function(a, b) return a - b end
}
print(ops.add(2, 3))
print(ops["sub"](9, 4))Strateji Tablosu
İşlevleri bir tabloda saklamak, davranışı çalışma zamanında anahtara göre seçmenizi sağlar. Bu, uzun if-else zincirlerinin yerini düzenli bir aramaya bırakır.
İşlemi adına göre seçmek, çağıran kodu kısa tutar ve yeni anahtarlarla genişletmeyi kolaylaştırır.
local dispatch = {
upper = string.upper,
lower = string.lower,
rev = string.reverse
}
local function run(name, s)
return dispatch[name](s)
end
print(run("upper", "lua"))
print(run("rev", "lua"))Geri Çağırma İşlevleri
Geri çağırma işlevi, daha sonra çağrılabilmesi için aktardığınız bir işlevdir. Lua'nın standart kitaplığı bu yaklaşımı kullanır; örneğin table.sort bir karşılaştırma işlevi alır.
Kuralı geri çağırma işlevi belirler; yineleme ve yeniden düzenleme işlemlerini kitaplık yürütür.
local nums = {5, 2, 9, 1}
table.sort(nums, function(a, b)
return a > b
end)
print(table.concat(nums, ", "))İşlevlerin Kimliği Vardır
Her işlev değeri ayrı bir nesnedir. Aynı kodu içerseler bile iki ayrı işlev ifadesi hiçbir zaman eşit değildir.
Ancak tek bir işlev iki değişkende saklanıyorsa bu değişkenler eşit karşılaştırılır; çünkü ikisi de aynı değere başvurur.
local f = function() return 1 end
local g = function() return 1 end
local h = f
print(f == g)
print(f == h)Bu Neden Önemli
İşlevleri değer olarak ele almak, genel araçları bir kez yazıp aktardığınız işlevlerle özelleştirmenizi sağlar. Eşleme, filtreleme, kısmi uygulama ve bileşim bunun üzerine kuruludur.
Bu kursun geri kalanında birinci sınıf işlevler ve kapanışlar üzerine pratik yaklaşımlar oluşturacağız.
Hızlı Kontrol
Lua'da birinci sınıf işlevler konusundaki anlayışınızı sınayın.
Özet
Lua'da işlevler birinci sınıf değerlerdir: onları değişkenlerde ve tablolarda saklayabilir, bağımsız değişken olarak aktarabilir ve başka işlevlerden döndürebilirsiniz.
Çevreleyen yerelleri yakalayan bir işlev döndürmek bir kapanış oluşturur. Bu fikirler, ilerideki tüm işlevsel yaklaşımların temelidir.
Sıkça Sorulan Sorular
“Değer Olarak İşlevler” dersi ücretsiz mi?
Evet — “Değer Olarak İşlevler” 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.
“Değer Olarak İşlevler” dersinde ne öğreneceğim?
İşlevleri saklayıp aktarı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 1. dersidir.
“Değer Olarak İşlevler” 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
- Değer Olarak İşlevler
- map, filter, reduce
- Kısmi Uygulama
- İşlevleri Birleştirme