04. 다트 3.0 신규 문법

2024. 4. 9. 23:25

04. 다트 3.0 신규문법

레코드

//포지셔널 파라미터 : 정확한 위치에 파라미터 입력
void main() {
  (String, int) minji = ('민지', 20);

  (String, int, bool) minji = ('민지', 20, true); // 3개도 가능

  print(minji.$1); // 민지 출력
  print(minji.$2); // 20 출력
  print(minji.$3); // true 출력
}


//네임드 파라미터 : 순서 상관 x

void main() {
  ({String name, int age}) minji = (name : '민지', age : 20);
}

구조 분해

void main() {
  final [minji, haerin] = ['민지', '해린'];

  // 리스트에서 스프레드 연산자 사용
  final numbers = [1,2,3,4,5,6,7,8];
  final [x,y, ..., z] = numbers; // 중간 값들을 버릴 수 있음

  // 맵에서 구조 분해
  final minjiMap = {'name' : '민지', 'age' : 20};
  final {'name' : name, 'age' : age} = minjiMap;

  //클래스 구조 분해
  final minji = Idol(name : '민지', age : 20);
  final Idol(name: name, age: age) = minji;
}

class Idol {
  final String name;
  final int age;

  Idol({
    required this.name,
    required this.age,
  });
}

switch문

void main() {
  String dayKor = '월요일';
  print(dayEnglish(dayKor)); // 'Monday'
}

String dayEnglish(String dayKor) {
  return switch (dayKor) {
    '월요일' => 'Monday',
    '화요일' => 'Tuesday',
    '수요일' => 'Wednesday',
    '목요일' => 'Thursday',
    '금요일' => 'Friday',
    '토요일' => 'Saturday',
    '일요일' => 'Sunday',
    _ => 'Unknown', // '_' = default
  };
}
//패턴 매칭
void switcher(dynamic anything) {
  switch (anything) {
    case 'aaa':
      print('match:aaa');
    case [1, 2]:
      print('match: [1,2]');
    case [_, _, _]: //3개 값이 들어 있는 리스트를 모두 매치
      print('match: [_,_,_]');
    case [int a, int b]:
      print('match: int [$a, int $b]');
    case (String a, int b):
      print('match: (String: $a, int: $b)');
    default:
      print('no match');
  }
}

void main() {
  switcher('aaa');
  switcher([1, 2]);
  switcher([3, 4, 5]);
  switcher([6, 7]);
  switcher(('민지', 19));
  switcher(8);
}

클래스 제한자

base : 상속만 가능

final : 외부 파일에서 상속, 재정의 불가

interface : 클래스를 외부 파일에서 상속받지 못하고, 재정의만 가능

sealed : 파일 외부에서 상속, 재정의, 인스턴스화 제한

mixin : mixin기능을 클래스에도 적용

+ Recent posts