Variadic Fonksiyonlar (...)
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 11 / 54.
Bazen herhangi bir sayıda argümanla çalışabilen bir fonksiyona ihtiyaç duyarsınız. Belki de her durum için ayrı fonksiyonlar yazmadan iki, üç veya on sayının toplamını hesaplamak istersiniz. Lua bunun için özel bir sözdizimi sağlar: üç nokta ...
Bir fonksiyonun parametre listesine ... yerleştirdiğinizde, bu fonksiyon herhangi bir sayıda argüman kabul eden değişken sayıda argümanlı (variadic) bir fonksiyon haline gelir:
function sum(...)
-- Fonksiyon gövdesi
endFonksiyonun içinde, bu argümanlara tekrar ... kullanarak erişebilirsiniz. Onlarla daha kolay çalışmak için, süslü parantezler kullanarak onları bir tabloya paketleyebilirsiniz:
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(5, 10, 15)) -- Çıktı: 30
print(sum(1, 2, 3, 4, 5)) -- Çıktı: 15{...} ifadesi, fonksiyona iletilen tüm argümanları içeren liste stilinde bir tablo oluşturur. Daha sonra, # uzunluk operatörünü veya ipairs() fonksiyonunu kullanarak bu tabloyu diğerleri gibi yineleyebilirsiniz.
Görev
KolayHerhangi bir sayıda sayısal argüman kabul eden ve bunların ortalamasını döndüren bir calculateAverage fonksiyonu yazın.
Esnek sayıda argüman kabul etmek için ... değişken argüman (variadic) sözdizimini kullanın, bunları bir tabloya paketleyin, toplamlarını hesaplayın ve sayıya bölün.
Not: Başlangıç kodu ("Don't touch this code" olarak işaretlenmiş), girdiden sayıları okur, her birini tonumber() kullanarak metinden sayıya dönüştürür ve bunları numbers adlı bir tabloda saklar. Sonunda, tablonun değerlerini bireysel argümanlar olarak yayan unpack(numbers) kullanarak fonksiyonunuzu çağırır — böylece fonksiyonunuz bunları ... olarak alır. Bu kodu ayrıntılı olarak değiştirmenize veya anlamanıza gerek yoktur; sadece calculateAverage fonksiyonunu yazmaya odaklanın.
Mantık:
{...}kullanarak tüm argümanları bir tabloya paketleyin- Tüm sayıların toplamını hesaplamak için tabloyu döngüye alın
- Ortalamayı elde etmek için toplamı argüman sayısına bölün
- Ortalamayı bir sayı olarak döndürün
Parametreler:
...(sayılar): Değişken sayıda sayısal argüman
Döndürdüğü Değer: Sağlanan tüm sayıların ortalaması (sayı)
Kopya kağıdı
Lua, üç nokta sözdizimini ... kullanarak herhangi bir sayıda argüman kabul edebilen değişken sayıda argümanlı (variadic) fonksiyonları destekler:
function sum(...)
-- Fonksiyon gövdesi
endDeğişken sayıda argümanlı bir fonksiyonun içinde, {...} kullanarak argümanları bir tabloya paketleyin:
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(5, 10, 15)) -- Çıktı: 30
print(sum(1, 2, 3, 4, 5)) -- Çıktı: 15{...} ifadesi tüm argümanları içeren bir tablo oluşturur. Uzunluk operatörü # veya ipairs() kullanarak bu tablo üzerinde döngü kurabilirsiniz.
Kendin dene
-- Bu koda dokunmayın --
local numbers = {}
while true do
local input = io.read()
if input == nil or input == "" then
break
end
local num = tonumber(input)
if num then
table.insert(numbers, num)
end
end
-------------------------
function calculateAverage(...)
-- Kodu buraya yazın
end
local average = calculateAverage(unpack(numbers))
print("Average: " .. average)
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