Bir kuyruk, bir dizi öğeden oluşan lineer bir veri yapısıdır. Roblox'ta iki tür kuyruk vardır: normal kuyruklar, ilk giren ilk çıkar (FIFO) prensibini takip eder, ve öncelik kuyrukları, kuyrukta bulunan öğeler için veri erişim sırasını belirleyen öncelikler içeren kuyruklardır. Her iki tür kuyrukta da öğeler herhangi bir Luau veri türü olabilir.
Kuyruk, MemoryStoreService adında kalıcı olmayan veri depolama hizmetinin yerleşik bir veri yapısıdır; bu yüzden, kuyruğu almak ve kuyruğa veri eklemek, okumak veya kaldırmak için yerleşik işlevleri doğrudan çağırabilirsiniz. Herhangi bir başka kullanım için, oyununuza görevleri planlamak ve isteklere yanıt vermek gibi, kendi kuyruklarınızı uygulamak için tabloları kullanabilirsiniz.
Normal kuyruklar
Normal kuyruklar, FIFO sırasını korur; burada tüm öğeler kuyruğun arkasına eklenir ve eklenme sırasına göre, önden sona doğru okunur veya kaldırılır.

Öncelik kuyrukları
Öncelik kuyrukları FIFO kuralını takip etmez; burada her öğe okunma veya kaldırılma sırasını belirten bir öncelik numarası ile eklenebilir. Bir öncelik kuyruğunun arkasındaki öğe, varsayılan önceliği 0'dır ve kuyruğun önündeki öğe, en yüksek belirlenmiş önceliğe sahiptir; bu aşağıdaki örnekte 5'tir.

Bu örnekte, belirlenmiş 3 önceliği olan bir öğe bir kuyruğa eklenmektedir. Kuyruk, yeni öğeyi, belirlenmiş 3 ya da daha fazla önceliğe sahip tüm mevcut öğelerin arkasına yerleştirir. Bir öğeyi kuyruğun önüne yerleştirmek için mevcut en yüksek belirlenmiş öncelikten daha yüksek bir öncelik ayarlamanız gerekir. Bu örnekte, önceliği 6 veya daha yüksek bir değere ayarlamanız gerekir.
Öncelik kuyrukları, verileri eklenme sırasına değil, önem sırasına göre okumak veya erişmek istediğiniz durumlarda faydalıdır. Bir öğe eklerken bir önceliği tam sayı olarak belirleyebilirsiniz ve kuyruk, daha yüksek öncelikli öğeleri, daha düşük öncelikli öğelerden önce işler. Örneğin, uzun süre bekleyen kullanıcılara daha yüksek öncelikler atayarak eşleştirme için öncelik kuyruklarını kullanabilirsiniz.
Kuyrukları Uygulama
MemoryStoreService'in yerleşik kuyruklarını kullanabilir veya tüm diğer kullanımlar için kuyrukları uygulamak üzere tabloları kullanabilirsiniz. Aşağıdaki kod örneği, bir normal kuyruk uygulamasını göstermektedir. Bu uygulamayı oyununuzda kullanmak için, ModuleScript olarak bir dosya olarak kaydetmeli ve ReplicatedStorage'te saklamalısınız; böylece kuyruğunuz hem istemci hem de sunucu için erişilebilir olur.
Tablo Kullanarak Normal Kuyruk Uygulaması
--!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
-- Kuyruğun boş olup olmadığını kontrol et
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Kuyruğa bir değer ekle
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Kuyruktan bir değeri kaldır
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("Boş kuyruktan çıkış yapılamaz")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue
Aşağıdaki kod örneği, Workspace altında bir Script olarak bir kullanım örneğidir. Kodu, kendi kullanımınıza uyacak şekilde değiştirebilir, türünü ve saklama yerini ayarlayabilirsiniz; yeter ki önceki uygulama kodunu doğru bir şekilde saklamış olun.
Normal Kuyruk Kullanım Örneğilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Kuyruğa bazı değerler ekleyinmyQueue:enqueue(5)myQueue:enqueue(10)myQueue:enqueue(15)-- myQueue = { 5, 10, 15 }-- Kuyruktan bir değeri kaldırınlocal first = myQueue:dequeue()print("Kuyruğa eklenen ilk değer", first)-- myQueue = { 10, 15 }-- Kuyruğa daha fazla değer ekleyinmyQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- myQueue = { 10, 15, 20, 25, 30 }-- Kuyruktan başka bir değeri kaldırınlocal second = myQueue:dequeue()print("Kuyruğa eklenen ikinci değer", second)-- myQueue = { 15, 20, 25, 30 }