Lua - Coroutines: A Beginner's Guide

Pengenalan

Halo sana, para programer masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia coroutines di Lua. Saya tahu apa yang mungkin Anda pikirkan saat ini: "Coroutines? Itu terdengar sulit!" Tetapi jangan khawatir, saya disini untuk mengarahkan Anda melalui konsep ini secara langkah demi langkah, seperti yang saya lakukan bagi banyak murid selama tahun-tahun mengajar saya.

Lua - Coroutines

Bayangkan Anda membaca buku menarik, tapi Anda perlu istirahat. Anda meletakkan bookmark, menutup buku, dan kemudian kembali kemudian untuk melanjutkan tepat di tempat Anda tinggalkan. Itu sebenarnya apa yang coroutines lakukan dalam pemrograman! Mereka memungkinkan sebuah program untuk menghentikan eksekusinya di titik tertentu dan melanjutkan kemudian dari tempat itu.

Dalam Lua, coroutines adalah cara untuk memiliki beberapa "thread" eksekusi dalam satu program saja. Tetapi tidak seperti thread tradisional, coroutines bersifat kooperatif, artinya mereka secara sukarela menyerahkan kontrol daripada dicegah oleh sistem operasi.

Fungsi yang Tersedia dalam Coroutines

Sebelum kita masuk ke contoh, mari kita lihat fungsi utama yang kita gunakan dengan coroutines di Lua. Saya akan menampilkan ini dalam tabel untuk referensi mudah:

Fungsi Deskripsi
coroutine.create() Membuat coroutine baru
coroutine.resume() Memulai atau melanjutkan eksekusi coroutine
coroutine.yield() Menangguhkan eksekusi coroutine
coroutine.status() Mengembalikan status coroutine
coroutine.wrap() Membuat fungsi yang melanjutkan coroutine

Jangan khawatir jika ini belum sepenuhnya masuk akal. Kita akan menjelajahi setiap satu dari ini dalam contoh kita!

Contoh

Mari kita mulai dengan contoh sederhana untuk melihat coroutines dalam aksi:

function count(start, finish)
for i = start, finish do
print(i)
coroutine.yield()
end
end

co = coroutine.create(count)

coroutine.resume(co, 1, 5)
print("Kembali ke program utama")
coroutine.resume(co)
print("Kembali ke program utama lagi")
coroutine.resume(co)
print("Satu kali lagi di program utama")
coroutine.resume(co)

Apa Mana yang Dilakukan Contoh di Atas?

Mari kitaura ini langkah demi langkah:

  1. Kita mendefinisikan sebuah fungsi yang disebut count yang menerima dua parameter: start dan finish.

  2. Dalam fungsi ini, kita memiliki perulangan for yang mencetak angka dari start ke finish. Setelah setiap cetak, itu memanggil coroutine.yield(), yang menangguhkan eksekusi fungsi.

  3. Kita membuat coroutine menggunakan coroutine.create(count). Ini belum menjalankan fungsi; itu hanya mempersiapkannya untuk menjalankan sebagai coroutine.

  4. Kita menggunakan coroutine.resume(co, 1, 5) untuk memulai coroutine. 1 dan 5 adalah argumen yang diberikan ke fungsi count.

  5. Coroutine mencetak 1 dan kemudian menyerahkan kontrol. Kontrol kembali ke program utama, yang mencetak "Kembali ke program utama".

  6. Kita melanjutkan coroutine lagi dengan coroutine.resume(co). Itu melanjutkan di tempat ia tinggal, mencetak 2, dan menyerahkan kontrol lagi.

  7. Proses ini terus berlanjut sampai coroutine selesai dieksekusi.

Ketika Anda menjalankan program ini, Anda akan melihat angka bergantian dengan pesan "Kembali ke program utama". Seperti program utama dan coroutine bergantian!

Contoh Coroutine Lainnya

Mari kita lihat contoh lain untuk menguatkan pemahaman kita:

function producer()
return coroutine.create(function()
for i = 1, 5 do
coroutine.yield("Item " .. i)
end
end)
end

function consumer(prod)
local status, value = coroutine.resume(prod)
while status and value do
print("Dikonsumsi: " .. value)
status, value = coroutine.resume(prod)
end
end

-- Buat coroutine produser
local prod = producer()

-- Mulai mengkonsumsi
consumer(prod)

Dalam contoh ini, kita memiliki skenario produser-konsumen:

  1. Fungsi producer membuat coroutine yang menghasilkan item satu per satu.

  2. Fungsi consumer menerima coroutine produser dan mengkonsumsi semua itemnya.

  3. Kita membuat coroutine produser dan memberikannya ke konsumen.

Ketika Anda menjalankan ini, Anda akan melihat:

Dikonsumsi: Item 1
Dikonsumsi: Item 2
Dikonsumsi: Item 3
Dikonsumsi: Item 4
Dikonsumsi: Item 5

Ini menunjukkan bagaimana coroutines dapat digunakan untuk implementasi multitasking kooperatif. Produser menghasilkan item pada kecepatannya sendiri, dan konsumen memproses mereka saat tersedia.

Coroutines sangat berguna dalam konteks seperti pengembangan game (untuk mengelola state game), implementasi penghitung, atau penanganan operasi asinkron dalam cara yang sinkron terlihat.

Ingat, latihan membuat sempurna! Cobalah untuk memodifikasi contoh ini, mainkan dengan kode, dan lihat apa yang terjadi. Itu adalah cara terbaik untuk belajar pemrograman. Dan siapa tahu? Mungkin suatu hari Anda akan mengajarkan coroutines ke generasi pemrogram baru!

Selamat coding, para master Lua masa depan!

Credits: Image by storyset