Menu
Coddy logo textTech

resume ve yield

Coddy'nin Lua Journey'sinin Logic & Flow 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ürebileceğini öğrendiniz. Ancak iletişim her iki yönde de akabilir. Bir coroutine'i devam ettirdiğinizde (resume), coroutine'in içine de değerler gönderebilirsiniz.

coroutine.resume() işlevini coroutine nesnesinden sonra ek argümanlarla çağırdığınızda, bu argümanlar coroutine'e aktarılır. Coroutine içinde bu değerler, onu duraklatan coroutine.yield() çağrısının dönüş değerleri haline gelir.

İşte şu şekilde çalışır:

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

local co = coroutine.create(receiver)
coroutine.resume(co)           -- yield kısmında başlar ve duraklar
coroutine.resume(co, "Hello")  -- Coroutine içine "Hello" değerini iletir

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

challenge icon

Görev

Kolay

initialMessage parametresini alan ve ana kod ile bir coroutine (eşyordam) arasındaki iki yönlü iletişimi gösteren bir dize döndüren createEchoCoroutine fonksiyonunu yazın.

Önce initialMessage değerini yield eden, ardından devam ettirildiğinde (resumed) bir yanıt alan ve son olarak bu yanıtı tekrar yield eden bir coroutine oluşturun. Fonksiyon, değerlerin hem coroutine dışına hem de içine aktarılması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çine sarın
  • Başlangıç mesajını almak için coroutine'i ilk kez resume edin
  • Coroutine'i ikinci kez resume edin ve içeriye "Response" değerini geçirin
  • İkinci resume işleminden yield edilen değeri yakalayın
  • Şu formatta bir dize döndürün: First: [first_yield]\nSecond: [second_yield]

Parametreler:

  • initialMessage (string): Coroutine'in ilk olarak yield edeceği mesaj

Döndürür: Her iki yield edilen değeri bir yeni satırla ayrılmış şekilde gösteren bir dize (string). Format: First: Hello\nSecond: Response

Kopya kağıdı

Bir coroutine'i (eş yordamı) devam ettirirken, coroutine.resume() fonksiyonuna ek argümanlar geçirerek ona değerler gönderebilirsiniz. Bu argümanlar, coroutine'i duraklatan coroutine.yield() çağrısının dönüş değerleri haline gelir.

function receiver()
    local value = coroutine.yield()  -- Duraklar ve girdi bekler
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Coroutine'i başlatır, yield kısmında duraklar
coroutine.resume(co, "Hello")  -- Coroutine içine "Hello" değerini geçirir

Coroutine ikinci kez devam ettiğinde, "Hello" içeri aktarılır ve coroutine.yield() fonksiyonunun dönüş değeri olur; bu değer de value değişkeninde saklanır.

Kendin dene

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

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