Roblox, Luau programlama dilini kullanıyor. Aşağıdaki kod örnekleri ve tablolar, C# ve Luau'nın sözdizimi arasındaki bazı farklılıkları göstermektedir.
Satır sonları
Luau'da noktalı virgüllere ihtiyacınız yok, ancak onlar sözdizimini bozmaz.
Ayrılmış anahtar kelimeler
Aşağıdaki tabloda Luau'nun ayrılmış anahtar kelimeleri, C# eşdeğerleriyle eşleştirilmiştir. Tüm C# anahtar kelimelerinin gösterilmediğini unutmayın.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for veya foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
Yorumlar
-- Tek satırlık yorum
--[[ Çıktı:
Blok yorumu
--]]// Tek satırlık yorum
/*
Blok yorumu
*/Stringler
-- Çok satırlı string
local multiLineString = [[Bu bir string,
yazdırıldığında,
birden fazla satırda görünür]]
-- Birleştirme
local s1 = "Bu bir string "
local s2 = "iki parçadan oluşmuş."
local endString = s1 .. s2// Çok satırlı string
string multiLineString1 = "Bu bir string,\n yazdırıldığında,\nbirden fazla satırda görünür.";
string multiLineString2 = @"Bu bir string,
yazdırıldığında,
birden fazla satırda görünür";
// Birleştirme
string s1 = "Bu bir string ";
string s2 = "iki parçadan oluşmuş.";
string endString = s1 + s2;Tablolar
Luau'daki tablolar hakkında daha fazla bilgi için Tablolar sayfasına bakın.
Sözlük tabloları
Luau'daki tabloları C#'daki gibi sözlükler olarak kullanabilirsiniz.
local dictionary = {
val1 = "bu",
val2 = "şu"
}
print(dictionary.val1) -- 'bu' değerini yazdırır
print(dictionary["val1"]) -- 'bu' değerini yazdırır
dictionary.val1 = nil -- 'val1' değerini tablodan kaldırır
dictionary["val3"] = "bir sözlük" -- 'val3'ü üzerine yazar veya yeni anahtar-değer çifti eklerDictionary dictionary = new Dictionary()
{
{ "val1", "bu" },
{ "val2", "şu" }
};
Console.WriteLine(dictionary["val1"]); // 'bu' değerini yazdırır
dictionary.Remove("val1"); // 'val1' değerini sözlükten kaldırır
dictionary["val3"] = "bir sözlük"; // 'val3'ü üzerine yazar veya yeni anahtar-değer çifti ekler
dictionary.Add("val3", "bir sözlük"); // Yeni bir anahtar-değer çifti oluştururSayısal indeksli tablolar
Luau'daki tabloları C#'daki gibi diziler olarak kullanabilirsiniz. İndeksler Luau'da 1'den ve C#'da 0'dan başlar.
local npcAttributes = {"güçlü", "zeki"}
print(npcAttributes[1]) -- 'güçlü' değerini yazdırır
print(#npcAttributes) -- listenin boyutunu yazdırır
-- Listeye ekle
table.insert(npcAttributes, "alçakgönüllü")
-- Başka bir yol...
npcAttributes[#npcAttributes+1] = "alçakgönüllü"
-- Listenin başına ekle
table.insert(npcAttributes, 1, "cesur")
-- Belirli bir indeksdeki öğeyi kaldır
table.remove(npcAttributes, 3)List npcAttributes = new List{"güçlü", "zeki"};
Console.WriteLine(npcAttributes[0]); // 'güçlü' değerini yazdırır
Console.WriteLine(npcAttributes.Count); // listenin boyutunu yazdırır
// Listeye ekle
npcAttributes.Add("alçakgönüllü");
// Başka bir yol...
npcAttributes.Insert(npcAttributes.Count, "alçakgönüllü");
// Listenin başına ekle
npcAttributes.Insert(0, "cesur");
// Belirli bir indeksdeki öğeyi kaldır
npcAttributes.Remove(2);Operatörler
Koşullu operatörler
| Operatör | Luau | C# |
|---|---|---|
| Esit | == | == |
| Büyüktür | > | > |
| Küçüktür | < | < |
| Büyük veya Eşit | >= | >= |
| Küçük veya Eşit | <= | <= |
| Eşit Değildir | ~= | != |
| Ve | and | && |
| Veya | or | || |
Aritmetik operatörler
| Luau | C# | |
|---|---|---|
| Toplama | + | + |
| Çıkarma | - | - |
| Çarpma | * | * |
| Bölme | / | / |
| Mod | % | % |
| Üslü | ^ | ** |
Değişkenler
Luau'da, değişkenleri tanımlarken türlerini belirtmezsiniz. Luau değişkenlerinin erişim belirteçleri yoktur, ancak "özel" değişkenlerinizi okunabilirlik için bir alt çizgi ile öne ekleyebilirsiniz.
local stringVariable = "değer"
-- "Genel" tanım
local variableName
-- "Özel" tanım - aynı şekilde işlenir
local _variableNamestring stringVariable = "değer";
// Genel tanım
public string variableName
// Özel tanım
string variableName;Kapsam
Luau'da, değişkenleri ve mantığı, do ve end anahtar kelimeleri içinde iç içe yazarak, işlev veya sınıfından daha sıkı bir kapsamda yazabilirsiniz. Bu, C#'daki süslü parantezler {} gibi çalışır. Daha fazla ayrıntı için Kapsam sayfasına bakın.
local outerVar = 'Dış kapsam metni'
do
-- 'outerVar' değişkenini değiştir
outerVar = 'İç kapsam değiştirilmiş metin'
-- Yerel bir değişken tanıt
local innerVar = 'İç kapsam metni'
print('1: ' .. outerVar) -- "1: İç kapsam değiştirilmiş metin" yazdırır
print('2: ' .. innerVar) -- "2: İç kapsam metni" yazdırır
end
print('3: ' .. outerVar) -- "3: İç kapsam değiştirilmiş metin" yazdırır
-- Burada 'innerVar' yazdırmaya çalışmak başarısız olurvar outerVar = "Dış kapsam metni";
{
// 'outerVar' değişkenini değiştir
outerVar = "İç kapsam değiştirilmiş metin";
// Yerel bir değişken tanıt
var innerVar = "İç kapsam metni";
Console.WriteLine("1: " + outerVar); // "1: İç kapsam değiştirilmiş metin" yazdırır
Console.WriteLine("2: " + innerVar); // "2: İç kapsam metni" yazdırır
}
Console.WriteLine("3: " + outerVar); // "3: İç kapsam değiştirilmiş metin" yazdırır
// Burada 'innerVar' yazdırmaya çalışmak başarısız olurKoşullu ifadeler
-- Tek bir koşul
if boolExpression then
doSomething()
end
-- Birden fazla koşul
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// Tek bir koşul
if (boolExpression) {
doSomething();
}
// Birden fazla koşul
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}Koşullu operatör
local max = if x > y then x else yint max = (x > y) ? x : y;Döngüler
Luau'daki döngüler hakkında daha fazla bilgi için Kontrol Yapıları sayfasına bakın.
While ve repeat döngüleri
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)For döngüleri
-- İleri döngü
for i = 1, 10 do
doSomething()
end
-- Ters döngü
for i = 10, 1, -1 do
doSomething()
end// İleri döngü
for (int i = 1; i <= 10; i++) {
doSomething();
}
// Ters döngü
for (int i = 10; i >= 1; i--) {
doSomething();
}local abcList = {"a", "b", "c"}
for i, v in ipairs(abcList) do
print(v)
end
local abcDictionary = { a=1, b=2, c=3 }
for k, v in pairs(abcDictionary) do
print(k, v)
endList<string> abcList = new List<string>{"a", "b", "c"};
foreach (string v in abcList) {
Console.WriteLine(v);
}
Dictionary<string, int> abcDictionary = new Dictionary<string, int>
{ {"a", 1}, {"b", 2}, {"c", 3} };
foreach (KeyValuePair<string, int> entry in abcDictionary) {
Console.WriteLine(entry.Key + " " + entry.Value);
}Luau ayrıca, tablolar ile çalışmayı daha da basitleştiren genelleştirilmiş yineleme desteğine sahiptir.
Fonksiyonlar
Luau'daki fonksiyonlar hakkında daha fazla bilgi için Fonksiyonlar sayfasına bakın.
Genel fonksiyonlar
-- Genel fonksiyon
local function increment(number)
return number + 1
end// Genel fonksiyon
int increment(int number) {
return number + 1;
}Değişken argüman sayısı
-- Değişken argüman sayısı
local function variableArguments(...)
print(...)
end// Değişken argüman sayısı
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}İsimli argümanlar
-- İsimli argümanlar
local function namedArguments(args)
return args.name .. "'ın doğum günü: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}// İsimli argümanlar
string namedArguments(string name, string dob) {
return name + "'ın doğum günü: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");Try-catch yapıları
local function fireWeapon()
if not weaponEquipped then
error("Silah takılı değil!")
end
-- Devam et...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endvoid fireWeapon() {
if (!weaponEquipped) {
// Kullanıcı tanımlı bir istisna kullan
throw new InvalidWeaponException("Silah takılı değil!");
}
// Devam et...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// Bir hata oluştu
}