Menu
CoddyTech

resume dan yield

Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 51 dari 54.

Pada pelajaran sebelumnya, kamu telah mempelajari cara coroutine meneruskan nilai kembali ke kode utama menggunakan coroutine.yield(). Namun, komunikasi dapat mengalir ke dua arah. Kamu juga dapat mengirim nilai ke dalam coroutine saat kamu melanjutkannya.

Saat kamu memanggil coroutine.resume() dengan argumen tambahan setelah object coroutine, argumen tersebut diteruskan ke dalam coroutine. Di dalam coroutine, nilai-nilai ini menjadi nilai yang dikembalikan oleh pemanggilan coroutine.yield() yang menjeda coroutine tersebut.

Begini cara kerjanya:

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

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Memulai dan berhenti sementara di yield
coroutine.resume(co, "Hello")  -- Meneruskan "Hello" ke coroutine

Saat coroutine dilanjutkan untuk kedua kalinya, string "Hello" diteruskan dan menjadi nilai kembalian dari coroutine.yield(), yang disimpan dalam variabel value.

challenge icon

Tantangan

Mudah

Tulis fungsi createEchoCoroutine yang menerima initialMessage dan mengembalikan string yang menunjukkan komunikasi dua arah antara kode utama dan coroutine.

Buat coroutine yang pertama-tama mengeluarkan initialMessage, lalu menerima respons saat dilanjutkan, dan akhirnya mengeluarkan respons tersebut kembali. Fungsi ini harus menunjukkan cara mengirim nilai keluar dari dan masuk ke coroutine.

Logika:

  • Buat fungsi yang mengeluarkan initialMessage dan menyimpan nilai yang dikembalikan dari yield tersebut
  • Setelah menerima nilai, keluarkan nilai tersebut kembali
  • Bungkus fungsi ini dalam coroutine menggunakan coroutine.create()
  • Lanjutkan coroutine untuk pertama kalinya guna mendapatkan pesan awal
  • Lanjutkan coroutine untuk kedua kalinya, dengan meneruskan "Response"
  • Simpan nilai yang dikeluarkan dari proses pelanjutan kedua
  • Kembalikan string dengan format: First: [first_yield]\nSecond: [second_yield]

Parameter:

  • initialMessage (string): Pesan yang akan dikeluarkan coroutine pertama kali

Nilai yang dikembalikan: String yang menampilkan kedua nilai yang dikeluarkan dan dipisahkan oleh baris baru (string). Format: First: Hello\nSecond: Response

Coba sendiri

function createEchoCoroutine(initialMessage)
    -- Tulis kodemu di sini
end
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Lua online