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.

Lua - Coroutines

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:

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

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

  3. Kita membuat sebuah coroutine menggunakan coroutine.create(count). Ini belum menjalankan fungsi; itu hanya mempersiapkannya untuk berjalan 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 itu tinggal, mencetak 2, dan menyerahkan 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". 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:

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

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

  3. 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