[Flutter] class operator override
Flutter2021. 12. 17. 15:20
Dart는 class에서 연산자를 재정의할 수 있는 모양이다. Overriding 방법은 다른 함수를 overriding할 때와 비슷하지만, 함수명 대신 operator + 등과 같이 써주면 된다. == 연산자의 경우, argument에 covariant
를 붙여준 후 hashCode
도 override해줘야만 한다. 아래 예시에서 override toString()은 결과 출력을 위해 추가했다.
예시:
class Class {
final String id;
final DateTime date;
final num number;
const Class({
this.id = "",
required this.date,
this.number = 0,
});
@override
int get hashCode => date.hashCode;
@override
bool operator ==(covariant Class other) => date.compareTo(other.date) == 0;
bool operator >(Class other) => date.compareTo(other.date) > 0;
bool operator <(Class other) => date.compareTo(other.date) < 0;
bool operator >=(Class other) => date.compareTo(other.date) >= 0;
bool operator <=(Class other) => date.compareTo(other.date) <= 0;
Class operator +(Class other) => Class(
id: id,
date: DateTime.now(),
number: number + other.number,
);
Class operator -(Class other) => Class(
id: id,
date: DateTime.now(),
number: number - other.number,
);
Class operator -() => Class(
id: id,
date: DateTime.now(),
number: -number,
);
Class operator *(Class other) => Class(
id: id,
date: DateTime.now(),
number: number * other.number,
);
Class operator /(Class other) => Class(
id: id,
date: DateTime.now(),
number: number / other.number,
);
Class operator ~/(Class other) => Class(
id: id,
date: DateTime.now(),
number: number ~/ other.number,
);
Class operator %(Class other) => Class(
id: id,
date: DateTime.now(),
number: number % other.number,
);
@override
String toString() {
return number.toString();
}
}
결과:
void main() {
Class z = Class(id: "last", date: DateTime(2021, 12, 31), number: 127),
a = Class(id: "first", date: DateTime(2022, 1, 1), number: 0),
az = Class(id: "what", date: DateTime(2021, 12, 31), number: 0);
print([a == a, a == z, a == az, z == az]);
print([a > a, a > z, a > az, z > az]);
print([a < a, a < z, a < az, z < az]);
print([a >= a, a >= z, a >= az, z >= az]);
print([a <= a, a <= z, a <= az, z <= az]);
print([a + z, a - z, a * z, a / z, a ~/ z, a % z]);
print([a += z, a]);
print([a -= z, a]);
}
[true, false, false, true]
[false, true, true, false]
[false, false, false, false]
[true, true, true, true]
[true, false, false, true]
[127, -127, 0, 0.0, 0, 0]
[127, 127]
[0, 0]
Exited
'Flutter' 카테고리의 다른 글
[Flutter] ipa build Xcode segmentfault 11 문제 (0) | 2022.03.22 |
---|---|
[Flutter] ipa build 및 browser를 통한 ipa 설치 설정 방법 (0) | 2022.03.17 |
[Flutter] 현재 url 가져오기, 새 창으로 열기 (0) | 2021.12.13 |
[Flutter] GetX 컨트롤러 관리 관련 간단 정리 (0) | 2021.11.16 |
[Flutter] java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available (2) | 2021.08.25 |
댓글()