Menu
Coddy logo textTech

coroutine.yield() ile Duraklatma

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

Korutinlerin gerçek gücü coroutine.yield() fonksiyonundan gelir. Bir korutinin çalışmanın ortasında kendisini duraklatmasını ve kontrolü kendisini devam ettiren koda geri devretmesini sağlayan şey budur.Bir `coroutine` coroutine.yield() çağırdığında, tam o noktada çalışmayı hemen durdurur. Bu `coroutine` üzerinde bir sonraki coroutine.resume() çağrınızda, sanki hiçbir şey olmamış gibi tam olarak yield() çağrısının hemen sonrasından devam eder.İşte basit bir örnek:
function countToThree()
    print("One")
    coroutine.yield()
    print("Two")
    coroutine.yield()
    print("Three")
end

local co = coroutine.create(countToThree)
coroutine.resume(co)  -- "One" yazdırır, sonra duraklar
coroutine.resume(co)  -- "Two" yazdırır, sonra duraklar
coroutine.resume(co)  -- "Three" yazdırır, sonra biter
Her bir resume() çağrısının, coroutine'i bir yield() ifadesine ulaşana kadar nasıl çalıştırdığına dikkat edin. Coroutine, tüm yerel değişkenleri ve yürütme durumu dahil olmak üzere tam olarak nerede durduğunu hatırlar.Ayrıca yield ederken geriye değerler de döndürebilirsiniz. coroutine.yield() fonksiyonuna verdiğiniz tüm argümanlar, coroutine.resume() fonksiyonunun dönüş değerleri haline gelir. coroutine.resume() fonksiyonunun ilk değer olarak her zaman bir boolean status (coroutine hatasız çalıştıysa true veya bir hata oluştuysa false) döndürdüğünü ve ardından yield() fonksiyonuna geçirilen tüm değerlerin geldiğini unutmayın:
function giveNumbers()
    coroutine.yield(10)
    coroutine.yield(20)
end

local co = coroutine.create(giveNumbers)

-- status true'dur, value 10'dur
local status, value = coroutine.resume(co)
print(value)  -- Yazdırır: 10

-- status true'dur, value 20'dir
status, value = coroutine.resume(co)
print(value)  -- Yazdırır: 20
challenge icon

Görev

Kolay

count alan ve değerleri birden fazla kez yield eden bir coroutine çıktısını gösteren bir metin (string) döndüren bir createYieldingCoroutine fonksiyonu yazın.

1'den count değerine kadar her adım için "Step X" metnini yield eden, toplamda count adımlık bir coroutine oluşturun. Üretilen tüm değerleri toplamak için coroutine yapısını count kez resume edin. Elde edilen tüm değerleri yeni satır karakterleriyle birleştirerek döndürün.

Mantık:

  • count değerine kadar "Step 1", "Step 2" vb. değerleri yield etmek için bir döngü kullanan bir fonksiyon oluşturun
  • Tüm yield işlemlerinden sonra fonksiyon tamamlanmalıdır ("Done" için son bir yield olmamalıdır)
  • Bu fonksiyonu coroutine.create() kullanarak bir coroutine ile sarmalayın
  • Üretilen her değeri toplayarak coroutine yapısını count kez resume edin
  • Elde edilen tüm değerleri aralarında yeni satır karakterleri olacak şekilde birleştirin
  • Birleştirilen metni döndürün

Parametreler:

  • count (number): yield edilecek adım sayısı

Döndürülen Değer: Yeni satırlar ile ayrılmış, üretilen tüm değerleri içeren bir metin (string). Format: Step 1\nStep 2\nStep 3

Kendin dene

function createYieldingCoroutine(count)
    -- 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