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, hiçbir şey olmamış gibi yield() çağrısının hemen ardı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 resume() çağrısının, korutin bir yield() ifadesine ulaşana kadar çalıştırdığını fark edin. Korutin, tüm yerel değişkenleri ve yürütme durumu da dâhil olmak üzere tam olarak nerede durduğunu hatırlar.Yielding sırasında değerleri geri de gönderebilirsiniz. coroutine.yield() işlevine verdiğiniz tüm bağımsız değişkenler, coroutine.resume() işlevinin dönüş değerleri olur. coroutine.resume() işlevinin ilk değer olarak her zaman bir boolean status döndürdüğünü unutmayın (true, coroutine'in hatasız çalıştığını; false ise bir hata oluştuğunu belirtir); bunu, yield() işlevine aktarılan değerler izler:
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 birden çok kez değer veren bir coroutine'in çıktısını gösteren bir dize döndüren createYieldingCoroutine işlevini yazın.

1'den count'a kadar her adım için "Step X" dizesini veren ve toplam count adım gerçekleştiren bir coroutine oluşturun. Tüm verilen değerleri toplamak için coroutine'i count kez devam ettirin. Verilen tüm değerleri yeni satırlarla birleştirerek döndürün.

Mantık:

  • "Step 1", "Step 2" vb. değerleri count'a kadar vermek için döngü kullanan bir işlev oluşturun
  • Tüm değerler verildikten sonra işlev tamamlanmalıdır ("Done" için son bir değer verilmemelidir)
  • Bu işlevi coroutine.create() kullanarak bir coroutine içine sarın
  • Coroutine'i count kez devam ettirerek verilen her değeri toplayın
  • Verilen tüm değerleri aralarına yeni satır karakterleri koyarak birleştirin
  • Birleştirilmiş dizeyi döndürün

Parametreler:

  • count (number): Verilecek adım sayısı

Döndürür: Yeni satırlarla ayrılmış tüm verilen değerleri içeren bir dize (string). Biçim: 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

Kendi başına pratik yap: Online Lua derleyicisi