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에서의 주석-- 한 줄 주석--[[ 결과 출력:블록 주석--]]
C#에서의 주석// 한 줄 주석/*블록 주석*/
문자열
Luau에서의 문자열-- 여러 줄 문자열local multiLineString = [[이 문자열은,출력되면여러 줄에 걸쳐 보입니다]]-- 연결local s1 = "이 문자열은 "local s2 = "두 부분으로 만들어졌습니다."local endString = s1 .. s2
C#에서의 문자열// 여러 줄 문자열string multiLineString1 = "이 문자열은,\n출력되면\n여러 줄에 걸쳐 보입니다.";string multiLineString2 = @"이 문자열은,출력되면여러 줄에 걸쳐 보입니다";// 연결string s1 = "이 문자열은 ";string s2 = "두 부분으로 만들어졌습니다.";string endString = s1 + s2;
테이블
Luau에서의 테이블에 대해 더 알아보려면 테이블을 참조하세요.
딕셔너리 테이블
Luau에서는 테이블을 C#과 마찬가지로 딕셔너리로 사용할 수 있습니다.
Luau에서의 딕셔너리 테이블local dictionary = {val1 = "this",val2 = "is"}print(dictionary.val1) -- 'this' 출력print(dictionary["val1"]) -- 'this' 출력dictionary.val1 = nil -- 테이블에서 'val1' 제거dictionary["val3"] = "a dictionary" -- 'val3'를 덮어쓰거나 새로운 키-값 쌍을 설정
C#에서의 딕셔너리 테이블Dictionary dictionary = new Dictionary(){{ "val1", "this" },{ "val2", "is" }};Console.WriteLine(dictionary["val1"]); // 'this' 출력dictionary.Remove("val1"); // 딕셔너리에서 'val1' 제거dictionary["val3"] = "a dictionary"; // 'val3'를 덮어쓰거나 새로운 키-값 쌍을 설정dictionary.Add("val3", "a dictionary"); // 새로운 키-값 쌍 생성
숫자 인덱스가 있는 테이블
Luau에서는 테이블을 C#과 마찬가지로 배열로 사용할 수 있습니다. 인덱스는 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에서의 조건문-- 하나의 조건if boolExpression thendoSomething()end-- 여러 조건if not boolExpression thendoSomething()elseif otherBoolExpression thendoSomething()elsedoSomething()end
C#에서의 조건문// 하나의 조건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 .. "'s 생일: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}
C#에서의 이름 붙은 인수
// 이름 붙은 인수
string namedArguments(string name, string dob) {
return name + "'s 생일: " + dob;
}
namedArguments(name: "Bob", 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) {
// 오류가 발생했습니다.
}