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.
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:
-
Kita mendefinisikan sebuah fungsi yang disebut
count
yang menerima dua parameter:start
danfinish
. -
Dalam fungsi ini, kita memiliki perulangan for yang mencetak angka dari
start
kefinish
. Setelah setiap cetak, itu memanggilcoroutine.yield()
, yang menangguhkan eksekusi fungsi. -
Kita membuat coroutine menggunakan
coroutine.create(count)
. Ini belum menjalankan fungsi; itu hanya mempersiapkannya untuk menjalankan sebagai coroutine. -
Kita menggunakan
coroutine.resume(co, 1, 5)
untuk memulai coroutine.1
dan5
adalah argumen yang diberikan ke fungsicount
. -
Coroutine mencetak
1
dan kemudian menyerahkan kontrol. Kontrol kembali ke program utama, yang mencetak "Kembali ke program utama". -
Kita melanjutkan coroutine lagi dengan
coroutine.resume(co)
. Itu melanjutkan di tempat ia tinggal, mencetak2
, dan menyerahkan kontrol lagi. -
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:
-
Fungsi
producer
membuat coroutine yang menghasilkan item satu per satu. -
Fungsi
consumer
menerima coroutine produser dan mengkonsumsi semua itemnya. -
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