Menu
Coddy logo textTech

coroutine.yield() ile Duraklatma

Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 50 / 54.

Coroutine'lerin gerçek gücü coroutine.yield() fonksiyonundan gelir. Bu, bir coroutine'in yürütmenin ortasında kendisini duraklatmasına ve kontrolü onu devam ettiren koda geri vermesine olanak tanıyan şeydir.

Bir coroutine coroutine.yield() fonksiyonunu çağırdığında, tam o noktada çalışmayı anında durdurur. Bu coroutine üzerinde coroutine.resume() fonksiyonunu bir sonraki çağırışınızda, sanki hiçbir şey olmamış gibi tam yield() çağrısından hemen sonraki yerden devam edecektir.

İş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, bir yield() ile karşılaşana kadar coroutine'i 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.

Yield işlemi yaparken değerleri geri de döndürebilirsiniz. coroutine.yield() fonksiyonuna verdiğiniz tüm argümanlar, coroutine.resume() fonksiyonunun dönüş değerleri olur:

function giveNumbers()
    coroutine.yield(10)
    coroutine.yield(20)
end

local co = coroutine.create(giveNumbers)
local status, value = coroutine.resume(co)
print(value)  -- Çıktı: 10

status, value = coroutine.resume(co)
print(value)  -- Çıktı: 20
challenge icon

Görev

Kolay

count parametresini alan ve birden fazla kez değer döndüren (yield) bir coroutine'den gelen çıktıyı gösteren bir dize döndüren createYieldingCoroutine fonksiyonunu yazın.

1'den count değerine kadar her adım için "Step X" dizesini döndüren ve bittiğinde "Done" yazdıran bir coroutine oluşturun. Tüm döndürülen değerleri ve son tamamlanmayı almak için coroutine'i count + 1 kez devam ettirin (resume). Döndürülen tüm değerleri yeni satırlarla birleştirerek döndürün.

Mantık:

  • count değerine kadar "Step 1", "Step 2" vb. değerleri döndürmek için bir döngü kullanan bir fonksiyon oluşturun
  • Tüm döndürme işlemlerinden sonra fonksiyon tamamlanmalıdır ( "Done" için son bir yield işlemi yok)
  • Bu fonksiyonu coroutine.create() kullanarak bir coroutine içine alın
  • Coroutine'i count kez devam ettirin ve döndürülen her değeri toplayın
  • Döndürülen tüm değerleri aralarına yeni satır karakterleri koyarak birleştirin
  • Birleştirilmiş dizeyi döndürün

Parametreler:

  • count (sayı): Döndürülecek adım sayısı

Döndürür: Yeni satırlarla ayrılmış, döndürülen tüm değerleri içeren bir dize (string). Format: Step 1\nStep 2\nStep 3

Kopya kağıdı

coroutine.yield() fonksiyonu, bir coroutine'in yürütmeyi duraklatmasına ve kontrolü çağırana geri vermesine olanak tanır. coroutine.resume() tekrar çağrıldığında, coroutine yield() çağrısının hemen sonrasından devam eder.

coroutine.yield() fonksiyonunun temel kullanımı:

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

coroutine.yield() ile değer döndürme:

function giveNumbers()
    coroutine.yield(10)
    coroutine.yield(20)
end

local co = coroutine.create(giveNumbers)
local status, value = coroutine.resume(co)
print(value)  -- Yazdırır: 10

status, value = coroutine.resume(co)
print(value)  -- Yazdırır: 20

coroutine.yield() fonksiyonuna iletilen argümanlar, coroutine.resume() fonksiyonunun dönüş değerleri olur. Coroutine, yield çağrıları arasında tüm yerel değişkenleri ve yürütme durumunu korur.

Kendin dene

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

Logic & Flow bölümündeki tüm dersler