Menu
CoddyTech

Menjeda dengan coroutine.yield()

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

Kekuatan coroutine yang sebenarnya berasal dari fungsi coroutine.yield(). Fungsi inilah yang memungkinkan coroutine menjeda dirinya sendiri di tengah eksekusi dan mengembalikan kendali ke kode yang melanjutkannya.Ketika coroutine memanggil coroutine.yield(), coroutine tersebut langsung berhenti pada titik itu. Saat kamu memanggil coroutine.resume() pada coroutine tersebut berikutnya, coroutine akan melanjutkan tepat setelah pemanggilan yield(), seolah-olah tidak terjadi apa-apa.Berikut contoh sederhana:
function countToThree()
    print("One")
    coroutine.yield()
    print("Two")
    coroutine.yield()
    print("Three")
end

local co = coroutine.create(countToThree)
coroutine.resume(co)  -- Mencetak "One", lalu berhenti sejenak
coroutine.resume(co)  -- Mencetak "Two", lalu berhenti sejenak
coroutine.resume(co)  -- Mencetak "Three", lalu selesai
Perhatikan bagaimana setiap pemanggilan resume() menjalankan coroutine hingga mencapai yield(). Coroutine mengingat persis di mana ia berhenti, termasuk semua variabel lokal dan status eksekusinya.Kamu juga bisa mengirimkan nilai kembali saat melakukan yield. Argumen apa pun yang kamu berikan ke coroutine.yield() menjadi nilai yang dikembalikan oleh coroutine.resume(). Perhatikan bahwa coroutine.resume() selalu mengembalikan nilai boolean status sebagai nilai pertamanya (true jika coroutine berjalan tanpa error, atau false jika terjadi error), diikuti nilai apa pun yang dikirimkan ke yield():
function giveNumbers()
    coroutine.yield(10)
    coroutine.yield(20)
end

local co = coroutine.create(giveNumbers)

-- status bernilai true, value bernilai 10
local status, value = coroutine.resume(co)
print(value)  -- Mencetak: 10

-- status bernilai true, value bernilai 20
status, value = coroutine.resume(co)
print(value)  -- Mencetak: 20
challenge icon

Tantangan

Mudah

Tulis fungsi createYieldingCoroutine yang menerima count dan mengembalikan string yang menampilkan output dari coroutine yang menghasilkan nilai beberapa kali.

Buat coroutine yang menghasilkan string "Step X" untuk setiap langkah dari 1 hingga count, dengan total count langkah. Lanjutkan coroutine sebanyak count kali untuk mengumpulkan semua nilai yang dihasilkan. Kembalikan semua nilai yang dihasilkan dengan menggabungkannya menggunakan baris baru.

Logika:

  • Buat fungsi yang menggunakan perulangan untuk menghasilkan "Step 1", "Step 2", dan seterusnya, hingga count
  • Setelah semua nilai dihasilkan, fungsi harus selesai (tanpa menghasilkan nilai terakhir untuk "Done")
  • Bungkus fungsi ini dalam coroutine menggunakan coroutine.create()
  • Lanjutkan coroutine sebanyak count kali, sambil mengumpulkan setiap nilai yang dihasilkan
  • Gabungkan semua nilai yang dihasilkan dengan karakter baris baru di antaranya
  • Kembalikan string yang telah digabungkan

Parameter:

  • count (number): Jumlah langkah yang akan dihasilkan

Nilai kembali: String yang berisi semua nilai yang dihasilkan dan dipisahkan oleh baris baru (string). Format: Step 1\nStep 2\nStep 3

Coba sendiri

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