LSL Operators/ko

From Second Life Wiki
Jump to navigation Jump to search

연산자는 (이를테면 ! 처럼) 하나 혹은 두 개의 피연산자에 작용(혹은 수학연산)을 가한다. 쉬운 예로 1 + 2 에서 1과 2는 피연산자이며 +은 연산자이다.

이것은 왼쪽에 피연산자인 변수가 위치하는 특수한 할당 연산자로 확장될 수 있다.

연산자 설명 용례
() [] . 괄호, 대괄호, 점 나중에 수행 (먼저 수행)
(유형) 형변환 message = "The result is:" + (string) result;
! ~ ++ -- NOT, 여수, 증가, 감소 counter++;
* / % 곱(내적), 나누기, 절대치(외적) rollover = (count + 1)%5;
- 빼기 one = 3 - 2;
+ 문자열을 더하거나 합치기 two = 1+1;

text = "Hello" + "World";

+ 목록을 연결하기 myList = [1, 2, 3] + [4, 5];

newList = oldList + addList;

<< >> 왼쪽 대입, 오른쪽 대입 eight = 4 << 1;
< <= > >= 작다, 작거나 같다, 크다, 크거나 같다 isFalse = (6 <= 4);
==  != 동치, 같지 않음 isFalse = ("this" == "that");
& 비트연산 AND zero = 4 & 2;

four = 4 & 4;

^ 비트연산 XOR zero = 4 ^ 4;

six = 4 ^ 2;

| 비트연산 OR four = 4 | 4;

six = 4 | 2;

|| 비교연산 OR isTrue = (FALSE || TRUE);
&& 비교연산 AND isFalse = (FALSE && TRUE);
= += -= *= /= %= 할당 four = 4;


주의: C와 유사한 다른 언어들과는 달리 &&|| 연산자에서, 양쪽 피연산자는 항상 평가된다. 예를 들면,

<lsl>if (TRUE || 1/0) llSay( 0, "Aha!" );</lsl>

은 "Aha"를 말하는 대신 수학오류를 일으킨다.


주의: 부울 연산자의 우선 순위는 명확하지 않다. 표현 문석기에 우선권을 불완전하게 하거나, ||&&이 동일한 우선 순위를 갖는 버그가 있을 수 있다. 점검이 아직 결론내려지지 않았다. 그러므로 뭔가 미심쩍으면 괄호를 쓸 것.

주의: 평가의 순서는 다른 언어들에서와 마찬가지로 뒤에서부터이다. 다음 예제에서 x가 1부터 시작한다면 처음 두 줄은 거짓이며 그 다음 두 줄은 참이다:

<lsl>(x && (x = 0) == 0 && x)</lsl> <lsl>(x && (x = 0) == 0 && x == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0 && x)</lsl>

양쪽이 각각의 참 여부와는 무관하게 모두 평가된다.


+ 연산자

결과 = 왼쪽 + 오른쪽

왼쪽 유형 오른쪽 유형 결과 유형 설명
integer integer integer 왼쪽오른쪽을 더함
integer float float 왼쪽오른쪽을 더함
float integer float 왼쪽오른쪽을 더함
string string string 왼쪽의 끝에 오른쪽을 연결
list * list 왼쪽의 끝에 오른쪽을 연결
* list list 오른쪽의 앞에 첨부 왼쪽을 끼워넣음
vector vector vector 왼쪽오른쪽을 더함
rotation rotation rotation 왼쪽오른쪽을 더함
회전을 더하는 데에 유용하지는 않다. 대신 * 혹은 / 을 사용할 것.

축약 연산자

기본적인 '=' 연산자 대신...

기본 할당 연산자 축약 연산자
a = a + 1 a += 1
a = a – 1 a -= 1
a = a * (n+1) a *= (n+1)
a = a / (n+1) a /= (n+1)
a = a % b a %= b

비트연산 도움말

동치
AND OR
~(a & b) ~a | ~b
~a & ~b ~(a | b)
a & ~b ~(~a | b)
~(a & ~b) ~a | b

왼쪽의 코드는 오른쪽의 코드와 일치한다. ab는 변수일 필요는 없다. 이런 방식은 복잡한 코드를 단순화시키는 데에 쓰일 수 있다.