Lua - Coroutines: A Panduan untuk Pemula
Pengenalan
Hai sana, para pemrogram masa depan! Hari ini, kita akan memulai sebuah 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, sama seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya.
Imaginilah Anda membaca sebuah 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 di programming! Mereka memungkinkan sebuah program untuk menghentikan eksekusinya di titik tertentu dan melanjutkan kemudian dari tempat itu.
Dalam Lua, coroutines adalah cara untuk memiliki banyak "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 menyajikan 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 yang Dilakukan Contoh di Atas?
Mari kitauraikan ini langkah demi langkah:
-
Kita mendefinisikan sebuah fungsi yang disebut
count
yang mengambil dua parameter:start
danfinish
. -
Dalam fungsi ini, kita memiliki sebuah loop for yang mencetak angka dari
start
kefinish
. Setelah setiap cetak, itu memanggilcoroutine.yield()
, yang menangguhkan eksekusi fungsi. -
Kita membuat sebuah coroutine menggunakan
coroutine.create(count)
. Ini belum menjalankan fungsi; itu hanya mempersiapkannya untuk berjalan 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 itu tinggal, mencetak2
, dan menyerahkan 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". Itu 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 sebuah skenario produser-konsumen:
-
Fungsi
producer
membuat sebuah coroutine yang menghasilkan item satu per satu. -
Fungsi
consumer
mengambil coroutine produser dan mengkonsumsi semua itemnya. -
Kita membuat sebuah produser coroutine 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), mengimplementasi penghitung, atau mengelola operasi asinkron dalam cara yang tampak sinkron.
Ingat, latihan membuat sempurna! Cobalah memodifikasi contoh ini, mainkan dengan kode, dan lihat apa yang terjadi. Itu adalah cara terbaik untuk belajar programming. 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