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 |
コメント
Luau のコメント
-- 1 行コメント
--[[ 出力結果:
ブロックコメント
--]]C# のコメント
// 1 行コメント
/*
ブロックコメント
*/文字列
Luau の文字列
-- 複数行の文字列
local multiLineString = [[これは文字列であり、
印刷されたときに
複数行に表示されます]]
-- 連結
local s1 = "これは文字列です "
local s2 = "2つの部分で構成されています。"
local endString = s1 .. s2C# の文字列
// 複数行の文字列
string multiLineString1 = "これは文字列であり、\n印刷されたときに\n複数行に表示されます。";
string multiLineString2 = @"これは文字列であり、
印刷されたときに
複数行に表示されます。";
// 連結
string s1 = "これは文字列です ";
string s2 = "2つの部分で構成されています。";
string endString = s1 + s2;テーブル
Luau におけるテーブルの詳細については、テーブルを参照してください。
辞書テーブル
C# と同様に、Luau のテーブルを辞書として使用できます。
Luau の辞書テーブル
local dictionary = {
val1 = "これ",
val2 = "は"
}
print(dictionary.val1) -- 'これ' を出力
print(dictionary["val1"]) -- 'これ' を出力
dictionary.val1 = nil -- テーブルから 'val1' を削除
dictionary["val3"] = "辞書" -- 'val3' を上書きするか、新しいキーと値のペアを設定C# の辞書テーブル
Dictionary dictionary = new Dictionary()
{
{ "val1", "これ" },
{ "val2", "は" }
};
Console.WriteLine(dictionary["val1"]); // 'これ' を出力
dictionary.Remove("val1"); // 辞書から 'val1' を削除
dictionary["val3"] = "辞書"; // 'val3' を上書きするか、新しいキーと値のペアを設定
dictionary.Add("val3", "辞書"); // 新しいキーと値のペアを作成数値インデックス付きテーブル
C# と同様に、Luau のテーブルを配列として使用できます。インデックスは Luau では 1 から、C# では 0 から始まります。
Luau の数値インデックス付きテーブル
local npcAttributes = {"強い", "賢い"}
print(npcAttributes[1]) -- '強い' を出力
print(#npcAttributes) -- リストのサイズを出力
-- リストに追加
table.insert(npcAttributes, "謙虚")
-- 別の方法...
npcAttributes[#npcAttributes+1] = "謙虚"
-- リストの先頭に挿入
table.insert(npcAttributes, 1, "勇敢")
-- 与えられたインデックスのアイテムを削除
table.remove(npcAttributes, 3)C# の数値インデックス付きテーブル
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 の変数にはアクセス修飾子がありませんが、可読性のために「private」変数にはアンダースコアを接頭辞として付けることができます。
Luau の変数
local stringVariable = "値"
-- "公開" 宣言
local variableName
-- "プライベート" 宣言 - 同じように解析されます
local _variableNameC# の変数
string stringVariable = "値";
// 公開宣言
public string variableName
// プライベート宣言
string variableName;スコープ
Luau では、関数やクラスよりも狭いスコープで変数やロジックを書くことができ、do と end キーワードでロジックをネストすることで、C# の中かっこ {} に似ています。詳細については、スコープを参照してください。
Luau のスコープ
local outerVar = '外部スコープのテキスト'
do
-- 'outerVar' を修正
outerVar = '内部スコープで修正されたテキスト'
-- ローカル変数を定義
local innerVar = '内部スコープのテキスト'
print('1: ' .. outerVar) -- "1: 内部スコープで修正されたテキスト" と表示される
print('2: ' .. innerVar) -- "2: 内部スコープのテキスト" と表示される
end
print('3: ' .. outerVar) -- "3: 内部スコープで修正されたテキスト" と表示される
-- ここで 'innerVar' を印刷しようとすると失敗しますC# のスコープ
var outerVar = "外部スコープのテキスト";
{
// 'outerVar' を修正
outerVar = "内部スコープで修正されたテキスト";
// ローカル変数を定義
var innerVar = "内部スコープのテキスト";
Console.WriteLine("1: " + outerVar); // "1: 内部スコープで修正されたテキスト" と表示される
Console.WriteLine("2: " + innerVar); // "2: 内部スコープのテキスト" と表示される
}
Console.WriteLine("3: " + outerVar); // "3: 内部スコープで修正されたテキスト" と表示される
// ここで 'innerVar' を印刷しようとすると失敗します条件文
Luau の条件文
-- 1 つの条件
if boolExpression then
doSomething()
end
-- 複数の条件
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
endC# の条件文
// 1 つの条件
if (boolExpression) {
doSomething();
}
// 複数の条件
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}条件演算子
Luau の条件演算子
local max = if x > y then x else yC# の条件演算子
int max = (x > y) ? x : y;ループ
Luau のループについて詳細を学ぶには、制御構造を参照してください。
while と repeat ループ
Luau の while と repeat ループ
while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpressionC# の while と repeat ループ
while (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression)for ループ
Luau の汎用 for ループ
-- 前方ループ
for i = 1, 10 do
doSomething()
end
-- 逆向きループ
for i = 10, 1, -1 do
doSomething()
endC# の汎用 for ループ
// 前方ループ
for (int i = 1; i <= 10; i++) {
doSomething();
}
// 逆向きループ
for (int i = 10; i >= 1; i--) {
doSomething();
}Luau のテーブルに対する for ループ
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)
endC# のリストに対する for ループ
List<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 の関数について詳細を学ぶには、関数を参照してください。
汎用関数
Luau の汎用関数
-- 汎用関数
local function increment(number)
return number + 1
endC# の汎用関数
// 汎用関数
int increment(int number) {
return number + 1;
}可変引数
Luau の可変引数
-- 可変引数
local function variableArguments(...)
print(...)
endC# の可変引数
// 可変引数
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}名前付き引数
Luau の名前付き引数
-- 名前付き引数
local function namedArguments(args)
return args.name .. "の誕生日: " .. args.dob
end
namedArguments{name="ボブ", dob="4/1/2000"}C# の名前付き引数
// 名前付き引数
string namedArguments(string name, string dob) {
return name + "の誕生日: " + dob;
}
namedArguments(name: "ボブ", dob: "4/1/2000");try-catch 構造
Luau の try/catch 構造
local function fireWeapon()
if not weaponEquipped then
error("武器が装備されていません!")
end
-- 続行...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
endC# の try/catch 構造
void fireWeapon() {
if (!weaponEquipped) {
// ユーザー定義の例外を使用
throw new InvalidWeaponException("武器が装備されていません!");
}
// 続行...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// エラーが発生しました
}