: 개발자의 생산성을 높이기 위한 여러 기능 추가
100% null safety 제공 ⇒ 런타임 오류 감소 및 성능 개선
레코드가 있는 구조적 데이터, 구조 분해, 패턴 매칭 지원
(String, int, double, {int age, String name}) x =
("23", 0, 77.0, age: 20, name: "Doe");
print(x.$2);
print(x.name);
(double, double) getLocation(String place) {
//...
return (lat, long);
}
main() {
var (lat, long) = getLocation("Mountain View");
}
if (json case {'movie': [String title, int length], 'cast': List<String> casts}) {
print("Movie $title is $length hours long with the cast: $casts");
} else {
print("Invalid JSON");
}
ListTile(
leading: const Icon(Icons.weekend),
title: const Text("Welcome"),
enabled: hasNextStep,
subtitle: hasNextStep ? const Text("Tap to advance") : null,
onTap: hasNextStep ? () {advance(); } : null,
trailing: hasNextStep ? null : const Icon(Icons.stop)
)
ListTile(
leading: const Icon(Icons.weekend),
title: const Text("Welcome"),
enabled: hasNextStep,
**if(hasNextStep) ...(
subtitle: const Text('Tap to advance'),
onTap: () { advance(); }
) else ... (
trailing: const Icon(Icons.stop)
)**
)
switch(charCode) {
case slash:
if(nextCharCode == slash) {
skipComment();
} else {
operator(charCode);
}
case star:
case plus:
case minus:
operator(charCode);
default:
if(charCode >= digit0 && charCode <= digit9) {
number();
} else {
invalid();
}
}
switch(charCode) {
case slash **when nextCharCode == slash:** // guard 문
if(nextCharCode == slash) {
skipComment();
} else {
operator(charCode);
}
case slash:
case star:
case plus:
case minus:
operator(charCode);
default:
if(charCode >= digit0 && charCode <= digit9) {
number();
} else {
invalid();
}
}
switch(charCode) {
case slash:
if(nextCharCode == slash) {
skipComment();
} else {
operator(charCode);
}
case **star || plus || minus: // or 연산 허용**
operator(charCode);
default:
if(**charCode >= digit0 && <= digit9**) { // 단일 케이스로 묶음
number();
} else {
invalid();
}
}
var token = switch (charCode) {
slash when nextCharCode == slasn => skipComment(),
slash || start || plus || minus => opertor(charCode)
>= digit0 && digit9 => number()
_ => throw invalid()
};
Class modifier 지원
: 클래스 또는 mixin를 제어하는 역할
class notifier의 규칙은 라이브러리 외부에서 사용하는 경우에만 작동
sealed | base | interface | final | mixin | |
---|---|---|---|---|---|
외부 라이브러리에서 생성 가능 여부 | x | o | o | o | o |
외부 라이브러리에서 상속 가능 여부 | x | o | x | x | o |
외부 라이브러리에서 구현 가능 여부 | x | x | o | x | o |
Mixin 사용 가능 여부 | x | x | x | x | o |
WASM (Web Assembly)
: 프로그래밍 언어를 컴파일하여 어느 브라우저에서나 빠르게 실행되는 바이너리 형식으로 바꾸어주는 기술