Anonim Fonksiyonlar
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 13 / 54.
Artık fonksiyonların değişkenlerde saklanabileceğini ve aktarılabileceğini anladığınıza göre, onları yazmanın daha da kısa bir yolu var. Bir fonksiyona her zaman bir isim vermek yerine, onu doğrudan ihtiyacınız olan yerde oluşturabilirsiniz; bunlara anonim fonksiyonlar (anonymous functions) denir.
Anonim bir fonksiyon, basitçe ismi olmayan bir fonksiyondur. Bunu, function anahtar kelimesini ve hemen ardından parametrelerini ve gövdesini kullanarak tanımlarsınız:
function(a, b)
return a + b
endBu, hemen kullanılabilecek bir fonksiyon değeri oluşturur. Anonim fonksiyonlar, fonksiyonları diğer fonksiyonlara argüman olarak geçirirken özellikle yararlıdır. Daha önceki özel sıralama örneğini hatırlıyor musunuz? İşte anonim bir fonksiyonla nasıl göründüğü:
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ı bir isimlendirilmiş fonksiyon tanımlamak yerine, fonksiyon doğrudan table.sort() fonksiyonunun ikinci argümanı olarak oluşturulur. Bu, kodu daha kompakt hale getirir ve sıralama mantığını tam olarak kullanıldığı yerde tutar.
Görev
Kolaynumbers 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 filterByThreshold fonksiyonu yazın.
Sayıları filtrelemek için anonim fonksiyon yaklaşımıyla table.insert() kullanın. Filtreleme mantığını ayrı bir isimlendirilmiş fonksiyon tanımlamadan satır içinde (inline) oluşturun.
Mantık:
- Boş bir sonuç tablosu oluşturun
- Sayılar tablosu üzerinde döngü kurun
- Her sayı için, eşiği aşıp aşmadığını kontrol etmek üzere bir anonim fonksiyon kullanın
- Kontrol true dönerse, sayıyı sonuç tablosuna ekleyin
- Filtrelenmiş sonuç tablosunu döndürün
Parametreler:
numbers(table): Sayısal değerler içeren liste stilinde 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)
Kopya kağıdı
Anonim bir fonksiyon, function anahtar kelimesi kullanılarak, ardından parametreler ve gövde gelecek şekilde tanımlanan, ismi olmayan bir fonksiyondur:
function(a, b)
return a + b
endAnonim fonksiyonlar, fonksiyonları argüman olarak geçirirken mantığı kullanıldığı yerde satır içi tutarak kolaylık sağlar:
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)Bu, karşılaştırma fonksiyonunu doğrudan table.sort() fonksiyonuna bir argüman olarak oluşturarak kodu daha kompakt hale getirir.
Kendin dene
function filterByThreshold(numbers, threshold)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow 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 Handler