Une file d'attente est une structure de données linéaire avec une collection d'éléments. Il existe deux types de files d'attente sur Roblox : files d'attente régulières, qui suivent le principe du premier entré, premier sorti (FIFO), et files d'attente prioritaires, qui ont des priorités pour les éléments dans la file d'attente qui déterminent l'ordre d'accès aux données. Les éléments des deux types de files d'attente peuvent être n'importe quel type de données Luau.
La file d'attente est une structure de données intégrée du service de stockage de données non persistantes nommé MemoryStoreService, pour lequel vous pouvez directement appeler les fonctions intégrées pour obtenir une file d'attente et ajouter, lire ou retirer des données de la file d'attente. Pour toute autre utilisation, comme la planification de tâches et la gestion des requêtes dans votre jeu, vous pouvez utiliser des tableaux pour implémenter des files d'attente par vous-même.
Files d'attente régulières
Les files d'attente régulières sont maintenues dans la séquence FIFO, dans laquelle tous les éléments sont ajoutés à l'arrière de la file d'attente et sont lus ou retirés dans le même ordre que celui dans lequel ils ont été ajoutés, de l'avant vers l'arrière.

Files d'attente prioritaires
Les files d'attente prioritaires ne suivent pas la règle FIFO, dans laquelle chaque élément peut être ajouté avec un numéro de priorité qui indique son ordre de lecture ou de retrait. L'élément à l'arrière d'une file d'attente prioritaire a une priorité par défaut de 0, et l'élément à l'avant de la file d'attente a la plus haute priorité définie, qui est 5 dans l'exemple suivant.

Pour cet exemple, un élément avec une priorité définie de 3 est ajouté à une file d'attente. La file d'attente place le nouvel élément derrière tous les éléments existants avec une priorité définie de 3 ou plus. Pour placer un élément au début de la file d'attente, vous devez définir la priorité plus élevée que la priorité la plus élevée actuellement définie. Dans cet exemple, vous devez définir la priorité à 6 ou plus.
Les files d'attente prioritaires sont utiles dans les situations où vous souhaitez lire ou accéder à des données en fonction de l'ordre d'importance plutôt qu'en fonction de l'ordre dans lequel elles ont été ajoutées. Vous pouvez définir une priorité en tant qu'entier lors de l'ajout d'un élément, et la file d'attente traite les éléments avec une priorité plus élevée avant ceux avec des priorités plus faibles. Par exemple, vous pouvez utiliser des files d'attente prioritaires pour le matchmaking en attribuant des priorités plus élevées aux utilisateurs qui attendent depuis longtemps.
Implémenter des files d'attente
Vous pouvez utiliser les files d'attente intégrées de MemoryStoreService ou utiliser des tableaux pour implémenter des files d'attente pour toutes les autres utilisations. Le code suivant montre l'implémentation d'une file d'attente régulière. Pour utiliser cette implémentation dans votre jeu, vous devez l'enregistrer en tant que ModuleScript et la stocker dans ReplicatedStorage, de sorte que votre file d'attente soit accessible à la fois par le client et le serveur.
Implémentation d'une file d'attente régulière utilisant des tableaux
--!strict
local Queue = {}
Queue.__index = Queue
export type Queue<T> = typeof(setmetatable(
{} :: {
_first: number,
_last: number,
_queue: { T },
},
Queue
))
function Queue.new<T>(): Queue<T>
local self = setmetatable({
_first = 0,
_last = -1,
_queue = {},
}, Queue)
return self
end
-- Vérifier si la file d'attente est vide
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Ajouter une valeur à la file d'attente
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Retirer une valeur de la file d'attente
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("Impossible de retirer d'une file d'attente vide")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue
Le code suivant est un exemple d'utilisation en tant que Script dans Workspace. Vous pouvez modifier le code, le type, et l'emplacement de stockage pour s'adapter à votre propre utilisation, tant que vous avez correctement stocké le précédent exemple de code d'implémentation.
Exemple d'utilisation d'une file d'attente régulièrelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Ajouter quelques valeurs à la file d'attentemyQueue:enqueue(5)myQueue:enqueue(10)myQueue:enqueue(15)-- myQueue = { 5, 10, 15 }-- Retirer une valeur de la file d'attentelocal first = myQueue:dequeue()print("La première valeur ajoutée à la file d'attente était", first)-- myQueue = { 10, 15 }-- Ajouter plus de valeurs à la file d'attentemyQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- myQueue = { 10, 15, 20, 25, 30 }-- Retirer une autre valeur de la file d'attentelocal second = myQueue:dequeue()print("La deuxième valeur ajoutée à la file d'attente était", second)-- myQueue = { 15, 20, 25, 30 }