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 .. s2
C# の文字列// 複数行の文字列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 _variableName
C# の変数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: 内部スコープのテキスト" と表示されるendprint('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 thendoSomething()end-- 複数の条件if not boolExpression thendoSomething()elseif otherBoolExpression thendoSomething()elsedoSomething()end
C# の条件文// 1 つの条件if (boolExpression) {doSomething();}// 複数の条件if (!boolExpression) {doSomething();}else if (otherBoolExpression) {doSomething();}else {doSomething();}
条件演算子
Luau の条件演算子local max = if x > y then x else y
C# の条件演算子int max = (x > y) ? x : y;
ループ
Luau のループについて詳細を学ぶには、制御構造を参照してください。
while と repeat ループ
Luau の while と repeat ループwhile boolExpression dodoSomething()endrepeatdoSomething()until not boolExpression
C# の while と repeat ループwhile (boolExpression) {doSomething();}do {doSomething();} while (boolExpression)
for ループ
Luau の汎用 for ループ-- 前方ループfor i = 1, 10 dodoSomething()end-- 逆向きループfor i = 10, 1, -1 dodoSomething()end
C# の汎用 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) doprint(v)endlocal abcDictionary = { a=1, b=2, c=3 }for k, v in pairs(abcDictionary) doprint(k, v)end
C# のリストに対する 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
end
C# の汎用関数
// 汎用関数
int increment(int number) {
return number + 1;
}
可変引数
Luau の可変引数
-- 可変引数
local function variableArguments(...)
print(...)
end
C# の可変引数
// 可変引数
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)
end
C# の try/catch 構造
void fireWeapon() {
if (!weaponEquipped) {
// ユーザー定義の例外を使用
throw new InvalidWeaponException("武器が装備されていません!");
}
// 続行...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// エラーが発生しました
}