تستخدم Roblox لغة البرمجة Luau. عينات الكود والجداول التالية تشير إلى بعض الاختلافات بين نحويات C# و Luau.
نهايات السطور
لا تحتاج إلى الفواصل المنقوطة في Luau، لكن ذلك لا يكسر التركيب.
الكلمات المحجوزة
الجدول التالي يحتوي على الكلمات المحجوزة في Luau ومقابلاتها في C#. لاحظ أنه لا يظهر جميع كلمات C# المحجوزة.
| Luau | C# |
|---|---|
| and | |
| break | break |
| do | do |
| if | if |
| else | else |
| elseif | else if |
| then | |
| end | |
| true | true |
| false | false |
| for | for أو foreach |
| function | |
| in | in |
| local | |
| nil | null |
| not | |
| or | |
| repeat | |
| return | return |
| until | |
| while | while |
التعليقات
-- تعليق خط واحد
--[[ الناتج الناتج:
تعليق كتلة
--]]// تعليق خط واحد
/*
تعليق كتلة
*/السلاسل النصية
-- سلسلة نصية متعددة الأسطر
local multiLineString = [[هذه سلسلة نصية،
عند طباعتها، تظهر
على أسطر متعددة]]
-- دمج
local s1 = "هذه سلسلة نصية "
local s2 = "تتكون من جزئين."
local endString = s1 .. s2// سلسلة نصية متعددة الأسطر
string multiLineString1 = "هذه سلسلة نصية،\nعند طباعتها، تظهر\n على أسطر متعددة.";
string multiLineString2 = @"هذه سلسلة نصية،
عند طباعتها، تظهر
على أسطر متعددة";
// دمج
string s1 = "هذه سلسلة نصية ";
string s2 = "تتكون من جزئين.";
string endString = s1 + s2;الجداول
لتعلم المزيد عن الجداول في Luau، انظر الجداول.
الجداول القاموسية
يمكنك استخدام الجداول في Luau كقواميس تمامًا مثل C#.
local dictionary = {
val1 = "هذا",
val2 = "هو"
}
print(dictionary.val1) -- يخرج 'هذا'
print(dictionary["val1"]) -- يخرج 'هذا'
dictionary.val1 = nil -- يزيل 'val1' من الجدول
dictionary["val3"] = "قاموس" -- يكتب فوق 'val3' أو يضيف زوج مفتاح-قيمة جديدDictionary dictionary = new Dictionary()
{
{ "val1", "هذا" },
{ "val2", "هو" }
};
Console.WriteLine(dictionary["val1"]); // يخرج 'هذا'
dictionary.Remove("val1"); // يزيل 'val1' من القاموس
dictionary["val3"] = "قاموس"; // يكتب فوق 'val3' أو يضيف زوج مفتاح-قيمة جديد
dictionary.Add("val3", "قاموس"); // ينشئ زوج مفتاح-قيمة جديدالجداول ذات الفهارس العددية
يمكنك استخدام الجداول في Luau كمصفوفات تمامًا مثل C#. تبدأ المؤشرات من 1 في Luau و 0 في C#.
local npcAttributes = {"قوي"، "ذكي"}
print(npcAttributes[1]) -- يخرج 'قوي'
print(#npcAttributes) -- يخرج حجم القائمة
-- إلحاق للقائمة
table.insert(npcAttributes, "متواضع")
-- طريقة أخرى...
npcAttributes[#npcAttributes+1] = "متواضع"
-- إدراج في بداية القائمة
table.insert(npcAttributes, 1, "شجاع")
-- إزالة عنصر عند فهرس معين
table.remove(npcAttributes, 3)List npcAttributes = new List{"قوي"، "ذكي"};
Console.WriteLine(npcAttributes[0]); // يخرج 'قوي'
Console.WriteLine(npcAttributes.Count); // يخرج حجم القائمة
// إلحاق للقائمة
npcAttributes.Add("متواضع");
// طريقة أخرى...
npcAttributes.Insert(npcAttributes.Count, "متواضع");
// إدراج في بداية القائمة
npcAttributes.Insert(0, "شجاع");
// إزالة عنصر عند فهرس معين
npcAttributes.Remove(2);العمليات
العمليات الشرطية
| المشغل | Luau | C# |
|---|---|---|
| يساوي | == | == |
| أكبر من | > | > |
| أقل من | < | < |
| أكبر من أو يساوي | >= | >= |
| أقل من أو يساوي | <= | <= |
| لا يساوي | ~= | != |
| و | and | && |
| أو | or | || |
عمليات الحساب
| Luau | C# | |
|---|---|---|
| جمع | + | + |
| طرح | - | - |
| ضرب | * | * |
| قسمة | / | / |
| المودولوس | % | % |
| رفع للسرعة | ^ | ** |
المتغيرات
في Luau، لا تحدد المتغيرات نوعها عند إعلانها. لا تمتلك متغيرات Luau محددات وصول، على الرغم من أنه يمكنك تمييز المتغيرات "الخاصة" بشرطة سفلية لسهولة القراءة.
local stringVariable = "قيمة"
-- إعلان "عام"
local variableName
-- إعلان "خاص" - يتم تحليله بنفس الطريقة
local _variableNamestring stringVariable = "قيمة";
// إعلان عام
public string variableName
// إعلان خاص
string variableName;النطاق
في Luau، يمكنك كتابة المتغيرات والمنطق في نطاق أكثر ضيقًا من الدالة أو الفئة عن طريق تداخل المنطق داخل كلمات do و end، مشابهًا للأقواس المعقوفة {} في C#. لمزيد من التفاصيل، انظر النطاق.
local outerVar = 'نص النطاق الخارجي'
do
-- تعديل 'outerVar'
outerVar = 'نص النطاق الداخلي المعدل'
-- تقديم متغير محلي
local innerVar = 'نص النطاق الداخلي'
print('1: ' .. outerVar) -- يطبع "1: نص النطاق الداخلي المعدل"
print('2: ' .. innerVar) -- يطبع "2: نص النطاق الداخلي"
end
print('3: ' .. outerVar) -- يطبع "3: "نص النطاق الداخلي المعدل"
-- محاولة طباعة 'innerVar' هنا ستفشلvar outerVar = "نص النطاق الخارجي";
{
// تعديل 'outerVar'
outerVar = "نص النطاق الداخلي المعدل";
// تقديم متغير محلي
var innerVar = "نص النطاق الداخلي";
Console.WriteLine("1: " + outerVar); // يطبع "1: نص النطاق الداخلي المعدل"
Console.WriteLine("2: " + innerVar); // يطبع "2: نص النطاق الداخلي"
}
Console.WriteLine("3: " + outerVar); // يطبع "3: "نص النطاق الداخلي المعدل"
// محاولة طباعة 'innerVar' هنا ستفشلالعبارات الشرطية
-- شرط واحد
if boolExpression then
doSomething()
end
-- شروط متعددة
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end// شرط واحد
if (boolExpression) {
doSomething();
}
// شروط متعددة
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}المشغل الشرطي
local max = if x > y then x else yint max = (x > y) ? x : y;الحلقات
لتعلم المزيد عن الحلقات في Luau، انظر الهياكل التحكمية.
حلقات While و repeat
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionwhile (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)حلقات For
-- حلقة للأمام
for i = 1, 10 do
doSomething()
end
-- حلقة عكسية
for i = 10, 1, -1 do
doSomething()
end// حلقة للأمام
for (int i = 1; i <= 10; i++) {
doSomething();
}
// حلقة عكسية
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 أيضًا التكرار العام، مما يبسط العمل مع الجداول بشكل أكبر.
الدوال
لتعلم المزيد عن الدوال في Luau، انظر الدوال.
الدوال العامة
-- دالة عامة
local function increment(number)
return number + 1
end// دالة عامة
int increment(int number) {
return number + 1;
}عدد المتغيرات المتغيرة
-- عدد المتغيرات المتغيرة
local function variableArguments(...)
print(...)
end// عدد المتغيرات المتغيرة
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}المتغيرات المسماة
-- المتغيرات المسماة
local function namedArguments(args)
return args.name .. "'s birthday: " .. args.dob
end
namedArguments{name="بوب"، dob="4/1/2000"}// المتغيرات المسماة
string namedArguments(string name، string dob) {
return name + "'s birthday: " + dob;
}
namedArguments(name: "بوب"، dob: "4/1/2000");هياكل try-catch
local function fireWeapon()
if not weaponEquipped then
error("لا توجد سلاح مزود!")
end
-- استمر...
end
local success، errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endvoid fireWeapon() {
if (!weaponEquipped) {
// استخدم استثناء معرف من قبل المستخدم
throw new InvalidWeaponException("لا توجد سلاح مزود!");
}
// استمر...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// تم رفع خطأ
}