Menu
CoddyTech

Variadic Fonksiyonlar (...)

Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 11 / 54.

Bazen herhangi sayıda bağımsız değişkenle çalışabilen bir işleve ihtiyaç duyarsın. Her durum için ayrı işlevler yazmadan iki, üç ya da on sayının toplamını hesaplamak isteyebilirsin. Lua bunun için özel bir söz dizimi sunar: üç nokta ...

Bir fonksiyonun parametre listesine ... yerleştirdiğinde, bu fonksiyon herhangi sayıda argüman kabul eden değişken sayıda parametreli bir fonksiyon hâline gelir:

function sum(...)
    -- Fonksiyon gövdesi
end

Fonksiyonun içinde, bu argümanlara ... kullanarak yeniden erişebilirsin. Onlarla daha kolay çalışmak için süslü parantezleri kullanarak bir tabloya koyabilirsin:

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, işleve geçirilen tüm argümanları içeren liste tarzı bir tablo oluşturur. Ardından uzunluk işleci # veya ipairs() kullanarak bu tabloda diğer tablolarda olduğu gibi yineleme yapabilirsiniz.

Bu, hiçbir bağımsız değişken nil olmadığı sürece çalışır. Bir nil, tabloda bir boşluk bırakır ve boşluklar içeren bir tabloda # güvenilir değildir. select("#", ...), nil olanlar da dahil olmak üzere bağımsız değişkenlerin sayısını her zaman döndürür:

function countArgs(...)
    return select("#", ...)
end

print(countArgs(10, 20, 30))        -- Çıktı: 3
print(countArgs(10, nil, 30, nil))  -- Çıktı: 4
challenge icon

Görev

Kolay

Herhangi sayıda sayısal bağımsız değişken kabul eden ve bunların ortalamasını döndüren bir calculateAverage işlevi yaz.

Esnek sayıda bağımsız değişken kabul etmek için ... değişken sayıda bağımsız değişken söz dizimini kullan, bunları bir tabloya koy, toplamlarını hesapla ve sayıya böl.

Not: Başlangıç kodu ("Don't touch this code" olarak işaretlenmiştir) girdiden sayıları okur, her birini metinden sayıya tonumber() kullanarak dönüştürür ve numbers adlı bir tabloda saklar. Sonunda, tablonun değerlerini ayrı bağımsız değişkenler olarak yayan unpack(numbers) kullanarak işlevini çağırır; böylece işlevin bunları ... olarak alır. Bu kodu değiştirmen veya ayrıntılı olarak anlaman gerekmez; yalnızca calculateAverage yazmaya odaklan.

Mantık:

  • Tüm bağımsız değişkenleri {...} kullanarak bir tabloya koy
  • Tüm sayıların toplamını hesaplamak için tabloda yineleme yap
  • Ortalamayı bulmak için toplamı bağımsız değişken sayısına böl
  • Ortalamayı sayı olarak döndür

Parametreler:

  • ... (sayılar): Değişken sayıda sayısal bağımsız değişken

Döndürür: Sağlanan tüm sayıların ortalaması (sayı)

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
quiz iconKendini test et

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

Kendi başına pratik yap: Online Lua derleyicisi