Dart

[Dart] Dart Docs - Operators

  • -
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
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.