728x90
Dart는 아래 표의 연산자들을 지원한다.
설명 | 연산자 | 결합법칙 |
unary postfix | expr++ expr-- () [] ?[] . ?. ! | None |
unary prefix | -expr !expr ~expr ++expr --expr await expr | None |
multiplicative | * / % ~/ | Left |
additive | + - | Left |
shift | << >> >>> | Left |
bitwise AND | & | Left |
bitwise XOR | ^ | Left |
bitwise OR | | | Left |
relational and type test | >= > <= < as is is! | None |
equality | == != | None |
logical AND | && | Left |
logical OR | || | Left |
if null | ?? | Left |
conditional | expr1 ? expr2 : expr3 | Right |
cascade | .. ?.. | Left |
assignment | = *= /= += -= &= ^= etc. | Right |
기존에 익숙하던 연산자들도 보이고, 이게 뭔가하는 연산자들도 보인다. 각각의 연산자들이 어떤 역할을 하는지 알아보자.
산술 연산자
연산자 | 설명 |
+ | 더하기 |
- | 빼기 |
-expr | 부정(negation)으로도 부르는 단항 빼기 (식 부호 역순) / 뭐지 ..? 그냥 음수를 표현한다는 의미인가 |
* | 곱하기 |
/ | 나누기 |
~/ | 정수를 반환하는 나누기 |
% | 정수 나눗셈의 나머지를 반환 (modulo) |
++var | var = var + 1 (식의 값은 var + 1) |
var++ | var = var + 1 (식의 값은 var) |
--var | var = var - 1 (식의 값은 var - 1) |
var-- | var = var - 1 (식의 값은 var) |
다 익숙하지만 "~/" 이 연산자는 처음보는 연산자다. 정수를 반환하는 나누기... 설명도 애매하고.. 직접 사용한 예시를 알아보자
void main() {
print(100 / 8); // double형 반환 기존의 나눗셈
print(100 ~/ 8); // 나눗셈의 몫을 반환
print(100 % 8); // 나눗셈의 나머지를 반환
}
동등, 관계 연산자
연산자 | 설명 |
== | 동등 |
!= | 동등하지 않음 |
> | 큼 |
< | 작음 |
>= | 크거나 같음 |
<= | 작거나 같음 |
동등연산자는 두 객체 x, y가 동일한지도 확인할 수 있다. 다만, 정확하게 같은 것인지 확인하려면 identical() 함수를 사용하면 된다.
void main() {
var o = new Object();
var isIdentical = identical(o, new Object()); // false, different objects.
isIdentical = identical(o, o); // true, same object.
isIdentical = identical(const Object(), const Object()); // true, const canonicalizes.
isIdentical = identical([1], [1]); // false, different new objects.
isIdentical = identical(const [1], const [1]); // true.
isIdentical = identical(const [1], const [2]); // false.
isIdentical = identical(2, 1 + 1); // true, integers canonicalize.
var pair = (1, "a"); // Create a record.
isIdentical = identical(pair, pair); // true or false, can be either.
var pair2 = (1, "a"); // Create another(?) record.
isIdentical = identical(pair, pair2); // true or false, can be either.
isIdentical = identical(pair, (2, "a")); // false, not identical values.
isIdentical = identical(pair, (1, "a", more: true)); // false, wrong shape.
}
타입 테스트 연산자
연산자 | 설명 |
as | 타입캐스트 (라이브러리 프리픽스 지정할 때에도 사용) |
is | 특정된 타입을 가지는 객체라면 True |
is! | 특정된 타입을 가지는 객체가 아니라면 True |
as, is, is! 연산자는 런타임중 타입을 확인하는 방법이다.
할당 연산자
"=" 연산자를 이용해서 값을 할당 할 수 있다. 이외에도 복합 할당 연산자를 제공하는데 아래와 같다.
= | *= | %= | >>>= | ^= |
+= | /= | <<= | &= | **` |
-= | ~/= | >>= |
논리 연산자
연산자 | 설명 |
!expr | 뒤따르는 식을 반전합니다 (false -> true, true -> false) |
|| | 논리 OR |
&& | 논리 AND |
비트, 쉬프트 연산자
연산자 | 설명 |
& | AND |
| | OR |
^ | XOR |
~expr | 단항 비트 단위 보수 (0s -> 1s; 1s -> 0s) |
<< | Shift left |
>> | Shift right |
>>> | Unsigned shift right |
조건 표현식
- "조건 ? 표현식1 : 표현식2"
- 만약 조건이 참이라면 표현식 1을 평가하고 반환하고, 그렇지 않다면 표현식 2를 평가하고 반환한다.
- "표현식1 ?? 표현식2"
- 만약 표현식1이 null이 아니라면 값을 반환하고 그렇지 않다면 표현식2의 값을 평가하고 반환한다.
기타 연산자
연산자 | 이름 | 설명 |
() | 함수 어플리케이션 | 함수 호출을 표현 |
[] | 첨자 접근 | 오버라이드 가능한 [] 연산자의 호출을 표현. 예로 fooList[1]은 int 1을 전달해 fooList의 인덱스 1인 요소에 접근합니다. |
?[] | 조건부 첨자 접근 | []와 비슷하지만 왼쪽 피연산자가 null일 수 있습니다. 예로, fooList?[1]은 int 1을 전달해 fooList의 인덱스 1인 요소에 접근하지만 fooList가 null일 수 있습니다. (그럴 경우 null로 계산됨) |
. | 멤버 접근 | 표현식의 속성을 참조. 예로, foo.bar는 표현식 foo에서 bar 속성을 선택합니다. |
?. | 조건부 멤버 접근 | .와 비슷하지만 왼쪽 피연산자가 null일 수 있습니다. 예로, foo?.bar는 표현식 foo에서 bar 속성을 선택하지만 foo가 null일 수 있습니다. (그럴 경우 foo?.bar는 null) |
! | Null 표명 연산자 | 표현식을 non-nullable 형식으로 캐스팅합니다. 캐스트에 실패하면 런타임 예외가 발생합니다. 예로, foo!.bar는 foo가 null이 아니면 bar 속성을 선택하고, foo가 null이면 런타임 예외를 발생시킨다고 표명합니다. |
728x90
300x250