새로운 타입으로 네임드 파라미터와 포지셔널 파라미터가 있다.
void main() {
(String, int) cocomong = ('코코몽', 12);
// ('코코몽', 12) 출력
print(cocomong);
}
void main() {
(String, int, bool) cocomong = ('코코몽', 12, true);
// 코코몽
print(cocomong.$1);
// 12
print(cocomong.$2);
// true
print(cocomong.$3);
}
void main() {
({String name, int age}) cocomong = (name: '코코몽', age: 12);
// (age: 12, name: 코코몽) 출력
print(cocomong);
}
타입 내부의 각각의 값을 직접 추출해오는 문법이다.
void main() {
// final newJeans = ['민지', '해린'];
// final minji = newJeans[0];
// final haerin = newJeans[1];
final [minji, haerin] = ['민지', '해린'];
print(minji); // 민지
print(haerin); // 해린
}
void main() {
final numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// 스프레드 연산자를 사용하게 되면 중간의 값들을 버릴 수 있다.
final [x, y, ..., z] = numbers;
print(x); // 1
print(y); // 2
print(z); // 8
}
void main() {
final minjiMap = {'name': '민지', 'age': 19};
// 위의 맵의 구조와 똑같은 구조로 구조 분해하면 된다.
final {'name': name, 'age': age} = minjiMap;
print('name: $name'); // name: 민지
print('age: $age'); // age: 19
}
void main() {
final minji = Idol(name: '민지', age: 19);
// 클래스의 생성자 구조와 똑같이 구조 분해하면 된다.
final Idol(name: name, age: age) = minji;
print(name); // 민지
print(age); // 19
}
class Idol {
final String name;
final int age;
Idol({
required this.name,
required this.age,
});
}
표현식, 패턴 매칭, 완전 확인, 가드 절이 추가되어 다양한 방법으로 조건을 확인할 수 있다.
void main() {
String dayKor = '월요일';
// switch문이 함수처럼 값을 반환한다.
String dayEnglish = switch (dayKor) {
// '=>' 를 사용하면 switch문 조건에 맞을 때 값을 반환할 수 있다.
'월요일' => 'Monday',
'화요일' => 'Tuesday',
'수요일' => 'Wednesday',
'목요일' => 'Thursday',
'금요일' => 'Friday',
'토요일' => 'Saturday',
'일요일' => 'Sunday',
// _는 default와 같은 의미로 사용된다.
_ => 'Not Found',
};
print(dayEnglish); // Monday
}
void switcher(dynamic anything) {
switch (anything) {
case 'aaa':
print('match: aaa');
break;
case [1, 2]:
print('match: [1, 2]');
break;
case [_,_,_]:
print('match: [_,_,_]');
break;
case [int a, int b]:
print('match: [int $a, int $b');
break;
case (String a, int b):
print('match: (String: $a, int $b)');
default:
print('no match');
}
}
void main() {
switcher('aaa'); // match: aaa
switcher([1, 2]); // match: [1, 2]
switcher([3, 4, 5]); // match: [_,_,_]
switcher([6, 7]); // match: [int 6, int 7
switcher(('민지', 19)); // match: (String: 민지, int 19)
switcher(8); // no match
}
void main() {
// val에 입력될 수 있는 값은 true, false, null이다.
bool? val;
// null 조건을 입력하지 않았기 때문에 non exhaustive swtich statement 에러가 발생
// null case를 추가하거나 default case를 추가해야 에러가 사라진다.
switch(val){
case true:
print('true');
case false:
print('false');
default:
print('default');
};
}
void main() {
(int a, int b) val = (1, -1);
switch (val) {
case (1, _) when val.$2 > 0:
print('1, _');
break;
default:
print('default'); // default
}
}
이 글은 골든래빗 《코드팩토리의 플러터 프로그래밍》의 스터디 내용 입니다.