본문 바로가기
FullStack/23. Dart

Dart(다트) - 연산자

by nakanara 2023. 4. 16.
반응형

 

Dart 언어는 다양한 연산자(operator)를 제공하여 수치, 논리, 비트 단위 등 다양한 연산을 수행할 수 있습니다.

  • 산술 연산자(Arithmetic Operators):

덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 부호변환(-)

assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5); // Result is a double
assert(5 ~/ 2 == 2); // Result is an int
assert(5 % 2 == 1); // Remainder

assert('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
  • 관계 연산자(Relational Operators):

같음(==), 같지 않음(!=), 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=)

assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);
  • 논리 연산자(Logical Operators):

and(&&), or(||), not(!)

if (!done && (col == 0 || col == 3)) {
  // ...Do something...
}
  • 비트 단위 연산자(Bitwise Operators):

and(&), or(|), xor(^), not(~), 왼쪽 시프트(<<), 오른쪽 시프트(>>)

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
assert((value >>> 4) == 0x02); // Unsigned shift right
assert((-value >> 4) == -0x03); // Shift right
assert((-value >>> 4) > 0); // Unsigned shift right
  • 할당 연산자(Assignment Operators):

대입(=), 덧셈 후 대입(+=), 뺄셈 후 대입(-=), 곱셈 후 대입(\*=), 나눗셈 후 대입(/=), 나머지 후 대입(%=), 왼쪽 시프트 후 대입(<<=), 오른쪽 시프트 후 대입(>>=), and 후 대입(&=), or 후 대입(|=), xor 후 대입(^=)

// Assign value to a
a = value;
// b변수가 null 일도 있는 경우
b ??= value; 
  • 조건 연산자(Conditional Operator):
(조건식) ? (참일때 값) : (거짓일때 값)
var visibility = isPublic ? 'public' : 'private';


// (변수)?? : (변수가 null 일 경우 값)
String playerName(String? name) => name ?? 'Guest';
// name이 null 인 경우 Guest 값, null 아 아닌 경우 name

// 위 기능을 다른 방식으로 표현 
// 1)
// Slightly longer version uses ?: operator.
String playerName(String? name) => name != null ? name : 'Guest';

// 2)
// Very long version uses if-else statement.
String playerName(String? name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}
  • 타입 검사 연산자(Type Test Operators):

is: 해당 객체가 주어진 타입과 같은 타입인지 여부를 판단 is! : 해당 객체가 주어진 타입과 다른 타입인지 여부를 판단

(employee as Person).firstName = 'Bob';

if (employee is Person) {
  // Type check
  employee.firstName = 'Bob';
}
  • 캐스케이드 표기법

2.12 이상의 버전에서 사용 가능한 캐스케이드( .., ?..)를 사용하면 동일한 개체에 대해 일련의 작업을 수행할 수 있습니다. 인스턴스 멤버에 접근하는 것 외에도 동일한 개체에서 인스턴스 메서드를 호출할 수도 있습니다. 이렇게 하면 종종 임시 변수를 만드는 단계가 줄어들고 더 유동적인 코드를 작성할 수 있습니다.

// 캐스케이드 사용
var paint = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;


var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;


querySelector('#confirm') // Get an object.
  ?..text = 'Confirm' // Use its members. // 해당 객체가 Null인 경우 다음 버전이 진행되지 않음

  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'))
  ..scrollIntoView();



List<int> myList = [1, 2, 3];
myList.add(4);
myList.remove(2);

List<int> myList = [1, 2, 3]
..add(4);
..remove(2);

List<int> myList = [1, 2, 3]..add(4)..remove(2);

Dart 언어에서는 이외에도 여러 가지 연산자를 지원하고 있으며, 각 연산자의 우선순위와 결합 방향 등을 고려하여 적절하게 사용해야 합니다.

반응형