본문 바로가기
기타개발/Flutter

Dart #3 : Operators

by 궝테스트 2020. 8. 27.

Dart : https://dart.dev/guides/language/language-tour

 

0. Operators

1. Arithmetic operators

assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5); // 결과 값은 double 타입
assert(5 ~/ 2 == 2);  // 나눗셈의 몫으로 결과 값은 int 타입
assert(5 % 2 == 1);   // 나눗셈의 나머지로 결과 값은 int 타입

assert('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');

 

2. Increment and decrement operators

var a, b;

a = 0;
b = ++a; // prefix 이므로 먼저 a 값이 증가 후 b 에 할당
assert(a == b); // 1 == 1

a = 0;
b = a++; // postfix 이므로 먼저 b 에 할당 후 a 값 증가
assert(a != b); // 1 != 0

a = 0;
b = --a; // prefix 이므로 먼저 a 값 감소 후 b 에 할당
assert(a == b); // -1 == -1

a = 0;
b = a--; // postfix 이므로 먼저 b 에 할당 후 a 값 감소
assert(a != b); // -1 != 0

 

3. Equality and relational operators

assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);

 

4. Type test operators

  • as, is, is! 연산자는 런타임 시 타입을 체크한다
  • T 로 지정된 인터페이스를 구현하는 obj 의 경우 obj is T 결과는 true 이다
  • obj is Object 도 항상 true 이다
  • 객체가 특정 타입인지 확신하는 경우에만 as 연산자를 사용하여 객체를 해당 특정 타입으로 캐스팅 할 수 있다
  • 아래 예제의 emp 가 null 이거나 첫 예제에서 Person 이 아니면 exception 발생한다
// emp 가 Person 타입이 확실하다면!
(emp as Person).firstName = 'Bob';

// emp 가 어떤 타입인지 모를경우 is 로 타입 체크를 한다
if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

 

5. Assignment operators

  • = 연산자를 사용하여 값을 할당 할 수 있다
  • 할당 대상 변수가 null 인 경우 ?? = 연산자를 사용해서 할당한다
  • +=, -=, /=, *= 등과 같이 연산자를 결합하여 할당 할 수 있다
// a 에 value 를 할당
a = value;

// 만약 b 가 null 이면 b 에 value 를 ??= 로 할당
b ??= value;

var a = 2;
a *= 3; // a = a * 3
assert(a == 6);

 

6. Logical operators

  • !expr : expr 의 반대
  • || : OR
  • && : AND
if (!done && (col == 0 || col == 3)) {
  // ...Do something...
}

 

7. Bitwise and shift operators

final value = 0x22;
final bitmask = 0x0f;

assert((value & bitmask) == 0x02);  // AND
assert((value & ~bitmask) == 0x20); // AND NOT
assert((value | bitmask) == 0x2f);  // OR
assert((value ^ bitmask) == 0x2d);  // XOR
assert((value << 4) == 0x220);      // Shift left
assert((value >> 4) == 0x02);       // Shift right

 

8. Conditional expressions

  • if-else 문을 간결하게 아래처럼 표현할 수 있다
  • condition ? expr1 : expr2
    • condition 이 true 라면 expr1 을 실행, false 라면 expr2 를 실행
  • expr1 ?? expr2
    • expr1 이 non-null 이면 expr1 을 반환하고, 반대면 expr2 를 반환한다
var visibility = isPublic ? 'public' : 'private';

String playerName(String name) => name ?? 'Guest';
  • 참고로 객체가 nullable 일 경우 내부 변수에 접근 시 foo?.bar 처럼 ?. 를 사옹할 수 있다
    • null 이 아니면 bar 를 반환, null 이면 null 반환

댓글