반응형
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 언어에서는 이외에도 여러 가지 연산자를 지원하고 있으며, 각 연산자의 우선순위와 결합 방향 등을 고려하여 적절하게 사용해야 합니다.
반응형
'FullStack > 23. Dart' 카테고리의 다른 글
Dart(다트) - Metadata(메타데이터, annotaion 어노테이션) (0) | 2023.04.19 |
---|---|
Dart(다트) - as(타입캐스팅), is(타입 체크) (0) | 2023.04.14 |
Dart(다트) - 변수 (0) | 2023.04.14 |
Dart(다트) 언어란? (1) | 2023.04.14 |