Une coroutine est un outil de programmation qui vous permet de suspendre et de reprendre des fonctions à certains points précis. Contrairement aux fonctions classiques qui s'exécutent d'un seul tenant, les coroutines s'arrêtent aux pauses désignées et continuent plus tard. Cette fonctionnalité est utile pour gérer des tâches qui doivent se dérouler sur une période de temps sans arrêter le programme entier.
Description | |
---|---|
Yield (Pause) | L'opération utilisée dans une coroutine pour suspendre son exécution, permettant à d'autres codes de s'exécuter. Elle arrête temporairement la coroutine et enregistre son état. |
Resume (Reprise) | L'opération qui redémarre une coroutine à partir du point où elle s'est arrêtée pour la dernière fois, poursuivant son exécution. |
Status (État) | Une fonction pour vérifier l'état actuel d'une coroutine, comme savoir si elle est suspendue, en cours d'exécution ou terminée. |
Wrap (Envelopper) | Une fonction d'enveloppement qui redémarrera une coroutine particulière lorsqu'elle est appelée et ne renverra que les valeurs mises en pause. |
Exemple : Coroutine
local function countingCoroutine()
for i = 1, 3 do -- Count from 1 to 3
coroutine.yield("Count: " .. i) -- Yield the count value
end
return "Counting completed." -- Return a final message when done
end
-- Create the coroutine from the function
local co = coroutine.create(countingCoroutine)
-- Start the coroutine and check the status and results at each step
print("Starting coroutine...")
print("Status before start:", coroutine.status(co)) -- Initially, status should be 'suspended'
local success, result = coroutine.resume(co) -- Resume for the first count
print(success, result) -- Should print true, "Count: 1"
print("Status after first count:", coroutine.status(co)) -- Should still be 'suspended'
success, result = coroutine.resume(co) -- Resume for the second count
print(success, result) -- Should print true, "Count: 2"
print("Status after second count:", coroutine.status(co)) -- Should still be 'suspended'
success, result = coroutine.resume(co) -- Resume for the third count
print(success, result) -- Should print true, "Count: 3"
print("Status after third count:", coroutine.status(co)) -- Should still be 'suspended'
success, result = coroutine.resume(co) -- Resume for the final return
print(success, result) -- Should print true, "Counting completed."
print("Status after completion:", coroutine.status(co)) -- Should now be 'dead'
-- Check status after completion to confirm no further actions can be taken
success, result = coroutine.resume(co)
print(success, result) -- Should print false and possibly an error message
print("Status after attempting to resume a completed coroutine:", coroutine.status(co)) -- Should be 'dead'
Roblox Studio
Exemple : Utilisation de coroutine.wrap
local function countToThree()
for i = 1, 3 do
coroutine.yield("Count: " .. i) -- Yield with a return value
end
return "Counting completed." -- Return a final message when done
end
local wrappedCoroutine = coroutine.wrap(countToThree)
print("Starting coroutine...")
local result
result = wrappedCoroutine() -- Executes and yields "Count: 1"
print(result) -- Prints "Count: 1"
result = wrappedCoroutine() -- Resumes and yields "Count: 2"
print(result) -- Prints "Count: 2"
result = wrappedCoroutine() -- Resumes and yields "Count: 3"
print(result) -- Prints "Count: 3"
result = wrappedCoroutine() -- Ends the counting, returns "Counting completed."
print(result) -- Prints "Counting completed."
result = wrappedCoroutine() -- Error
Roblox Studio
Si ce tutoriel vous a été utile et que vous souhaitez soutenir mon travail, veuillez envisager de m'offrir un café.
Merci beaucoup pour votre soutien !
M'offrir un café