Menu
Coddy logo textTech

resume ve yield

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

Önceki derste, bir coroutine'in coroutine.yield() kullanarak ana koda nasıl değer döndürebildiğini öğrendiniz. Ancak iletişim her iki yönde de akabilir. Bir coroutine'i devam ettirdiğinizde (resume ettiğinizde) onun içine de değerler gönderebilirsiniz.

coroutine.resume() fonksiyonunu coroutine nesnesinden sonra ek bağımsız değişkenlerle çağırdığınızda, bu bağımsız değişkenler coroutine içine aktarılır. Coroutine içinde bu değerler, onu duraklatan coroutine.yield() çağrısının return değerleri haline gelir.

İşte nasıl çalıştığı:

function receiver()
    print("Coroutine started")
    local value = coroutine.yield()
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Başlar ve yield'de duraklar
coroutine.resume(co, "Hello")  -- "Hello" değerini coroutine'e geçirir

Coroutine ikinci kez devam ettirildiğinde (resume), "Hello" dizesi iletilir ve coroutine.yield() fonksiyonunun dönüş değeri haline gelerek value değişkeninde saklanır.

challenge icon

Görev

Kolay

Ana kod ile bir coroutine arasındaki iki yönlü iletişimi gösteren bir dize döndüren ve initialMessage parametresini alan bir createEchoCoroutine fonksiyonu yazın.

İlk olarak initialMessage değerini yield eden, ardından yeniden başlatıldığında (resumed) bir yanıt alan ve son olarak bu yanıtı tekrar yield eden bir coroutine oluşturun. Fonksiyon, değerlerin coroutine dışına ve içine nasıl aktarıldığını göstermelidir.

Mantık:

  • initialMessage değerini yield eden ve bu yield işleminden dönen değeri saklayan bir fonksiyon oluşturun
  • Değeri aldıktan sonra, onu tekrar dışarıya yield edin
  • Bu fonksiyonu coroutine.create() kullanarak bir coroutine içinde sarmalayın
  • İlk mesajı almak için coroutine yapısını ilk kez resume edin
  • İçeri "Response" parametresini geçerek coroutine yapısını ikinci kez resume edin
  • İkinci resume işleminden yield edilen değeri yakalayın
  • Şu biçimde bir dize döndürün: First: [first_yield]\nSecond: [second_yield]

Parametreler:

  • initialMessage (dize): coroutine yapısının ilk olarak yield edeceği mesaj

Döndürülen Değer: Yeni bir satırla ayrılmış her iki yield edilen değeri gösteren bir dize. Biçim: First: Hello\nSecond: Response

Kendin dene

function createEchoCoroutine(initialMessage)
    -- Buraya kod 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