Anonim Fonksiyonlar
Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 13 / 54.
Artık fonksiyonların değişkenlerde saklanabildiğini ve aktarılabildiğini anladığına göre, onları yazmanın daha da kısa bir yolu var. Bir fonksiyona her zaman bir ad vermek yerine, onu doğrudan ihtiyaç duyduğun yerde oluşturabilirsin. Bunlara anonim fonksiyonlar denir.
Anonim bir fonksiyon, adı olmayan bir fonksiyondur. Onu, hemen ardından parametrelerini ve gövdesini yazarak function anahtar sözcüğünü kullanarak tanımlarsın:
function(a, b)
return a + b
endBu, hemen kullanılabilen bir fonksiyon değeri oluşturur. Anonim fonksiyonlar, fonksiyonları diğer fonksiyonlara argüman olarak geçirirken özellikle kullanışlıdır. Önceki özel sıralama örneğini hatırlıyor musun? Anonim bir fonksiyonla şöyle görünür:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Karşılaştırma için ayrı, adlandırılmış bir işlev tanımlamak yerine, işlev doğrudan table.sort() işlevinin ikinci argümanı olarak oluşturulur. Bu, kodu daha kısa hale getirir ve sıralama mantığını kullanıldığı yerde tutar.
Görev
KolayfilterByThreshold adlı, numbers ve threshold parametrelerini alan ve yalnızca eşik değerinden büyük sayıları içeren yeni bir tablo döndüren bir fonksiyon yazın.
Düzenleyicide zaten bir yardımcı fonksiyon var: filter(list, keep). Bu fonksiyon her değer için keep(value) çağrısı yapar ve keep fonksiyonunun true döndürdüğü değerleri içeren yeni bir tablo döndürür. filter fonksiyonunu çağırın ve kontrolü, derste table.sort() fonksiyonuna bir fonksiyon geçirildiği gibi, doğrudan çağrının içinde yazılmış anonim bir fonksiyon olarak geçirin. Kontrolü bir değişkende saklamayın veya ona bir ad vermeyin.
Parametreler:
numbers(table): Sayısal değerler içeren liste tarzı bir tablothreshold(number): Filtreleme için minimum değer (hariç)
Döndürür: Yalnızca eşik değerinden büyük sayıları içeren bir tablo (table)
Kendin dene
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- Kodu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu3İleri Düzey Fonksiyon Kavramları
Birden Fazla Değer DöndürmeVariadic Fonksiyonlar (...)Birinci Sınıf Değer Olarak FonksiyonlarAnonim FonksiyonlarClosure Nedir?Özet - Basit Event HandlerKendi başına pratik yap: Online Lua derleyicisi