Kuyruklar

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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.

Bir normal kuyruğun öğeleri ekleme, okuma ve kaldırma sırası

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

Bir öğenin belirlenmiş önceliği, kuyruğun öğeleri okuma sırasını değiştirir

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ği

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Kuyruğa bazı değerler ekleyin
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- myQueue = { 5, 10, 15 }
-- Kuyruktan bir değeri kaldırın
local first = myQueue:dequeue()
print("Kuyruğa eklenen ilk değer", first)
-- myQueue = { 10, 15 }
-- Kuyruğa daha fazla değer ekleyin
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- myQueue = { 10, 15, 20, 25, 30 }
-- Kuyruktan başka bir değeri kaldırın
local second = myQueue:dequeue()
print("Kuyruğa eklenen ikinci değer", second)
-- myQueue = { 15, 20, 25, 30 }
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.