Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스택 큐 차이
- 안드로이드 유닛테스트란
- 2022 플러터 설치
- 안드로이드 유닛 테스트 예시
- 안드로이드 라이선스 종류
- ar vr 차이
- android retrofit login
- jvm 작동 원리
- 큐 자바 코드
- ANR이란
- 안드로이드 유닛 테스트
- android ar 개발
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- 자바 다형성
- 객체
- 서비스 쓰레드 차이
- jvm이란
- 서비스 vs 쓰레드
- rxjava disposable
- Rxjava Observable
- 클래스
- rxjava cold observable
- 안드로이드 레트로핏 사용법
- 멤버변수
- rxjava hot observable
- 스택 자바 코드
- 안드로이드 os 구조
- 플러터 설치 2022
- 안드로이드 라이선스
Archives
- Today
- Total
나만을 위한 블로그
[Dart] 캐스케이드 연산자(Cascade notation)란? 본문
728x90
반응형
캐스케이드 연산자는 .. 연산자를 사용해서 특정 인스턴스의 속성이나 멤버 함수를 연속해서 사용할 수 있게 하는 연산자다. 자바로 치면 빌더 패턴을 통한 메서드 체이닝이 비슷한 형태고, 코틀린이면 apply, run, also 같은 범위 지정 함수가 비슷한 형태다.
공식문서의 캐스케이드 연산자에 대한 설명은 아래와 같다.
https://dart.dev/language/operators#cascade-notation
캐스케이드(.., ?..)를 사용하면 같은 객체에 대해 일련의 작업을 수행할 수 있다. 인스턴스 멤버에 접근하는 것 외에도 같은 객체에서 인스턴스 메서드를 호출할 수도 있다. 이렇게 하면 임시 변수를 만드는 단계가 줄어들고 더 유동적인 코드를 작성할 수 있다
var paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;
생성자 Paint()는 Paint 객체를 리턴한다. 캐스케이드 표기법을 따르는 코드는 반환될 수 있는 모든 값을 무시하고 이 객체에서 작동한다. 캐스케이드를 쓰지 않으면 아래 코드와 같은 형태가 된다
var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;
캐스케이드가 작동하는 객체가 null일 수 있는 경우 첫 번째 연산자에 null-shorting 캐스케이드(?..)를 사용한다. "?.."로 시작하면 해당 null 객체에서 연속 작업이 시도되지 않는다
querySelector('#confirm') // Get an object.
?..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'))
..scrollIntoView();
캐스케이드를 중첩할 수도 있다
final addressBook = (AddressBookBuilder()
..name = 'jenny'
..email = 'jenny@example.com'
..phone = (PhoneNumberBuilder()
..number = '415-555-0100'
..label = 'home')
.build())
.build();
실제 객체를 반환하는 함수에서 캐스케이드를 구성하도록 주의하라. 아래 코드는 에러가 발생하는 코드다. sb.write() 호출은 void를 리턴하며 void에서 캐스케이드를 구성할 수 없다
var sb = StringBuffer();
sb.write('foo')
..write('bar'); // Error: method 'write' isn't defined for 'void'.
다른 예제 코드를 확인해 본다.
class Person {
late String name;
late int age;
void hello() {
print('안녕하세요! $age살인 $name입니다');
}
}
void main() {
var person = Person()
..name = "김철수"
..age = 14
..hello();
}
원래라면 person 참조를 통해 변수에 값을 설정하거나 함수를 호출하는 등 작업을 해야 하지만 캐스케이드 연산자를 쓰면 person이란 객체를 연달아 사용하지 않아도 되는 걸 볼 수 있다.
반응형
'Flutter' 카테고리의 다른 글
[Flutter] Widget이란? Stateful vs Stateless (0) | 2024.04.02 |
---|---|
[Flutter] 플러터 아키텍처 (0) | 2024.03.31 |
[Dart] 함수(Function) 알아보기 (0) | 2023.05.07 |
[Dart] mixin이란? (0) | 2023.04.30 |
[Flutter] BuildContext란? Widget이란? (0) | 2023.01.24 |
Comments