Dart는 모바일이나 데스크톱 기기를 타게팅하는 네이티브 플랫폼과
웹을 타게팅하는 웹 플랫폼으로 컴파일을 할 수 있다.
네이티브 플랫폼은 JIT(Just In Time) 방식과 AOT(Ahead of Time) 방식을 사용.
변수는 var 변수명 = 값
형식으로 선언. 타입 추론으로, 명시적 타입 선언 필요 없음.
타입이 추론된 이후에는, 해당 타입으로 고정된다.
dynamic
해당 키워드로 변수 선언 시, 다른 타입에 값도 저장이 가능하다.
ex) dynamic name = "name"
;
final / const
final은 런타임, const는 빌드 타임 상수이다. 공통점은 선언 후, 값 변경이 불가.
void main(){
final DateTime now = DateTime.now();
print(now); // 한 번 now 값이 저장되면 추후 변경 불가.
}
void main(){
const DateTime now = DateTime.now(); // Error
// 이유는, 빌드 시에 값을 알아야하는데, 해당 DateTime.now() 함수는 런타임 시에 값을 알 수 있다.
print(now);
}
코드 실행 전, 값이 확정되면 const / 코드 실행 후 , 확정 시엔 final
타입은 string, int, double, bool
등
서로의 컬렉션 타입으로 자유로운 형변환이 가능하다.
List<type> arr = [values]
Map<keyType, valueType> obj= {key : value}
Set<type> obj = {values}
형변환은 .toList() , set.from(arr) 등으로 가능.
enum Status = {approve, pending, reject};
Status status = Status.approve;
print(status)
기본 수치 연산자 / 값 비교 / 논리 연산자는 타 언어들과 동일
double? number = 1
double? number; // null
number ?? = 3; // 3
number ?? = 4; // 3
print(number is int); // true
ìf / switch / for / while 제공
for.. in
패턴 제공.do while문
제공int total = 0;
do {
total += 1;
} while (total < 10) ;
// 기본 함수 형태
int add(int a, int b) {
return a + b;
}
( return 값이 없을 경우, void 타입 )
add(1, 2) // 위 add 함수는 무조건 return 1 + 2;
named는 좀 다르게 파라미터를 변환한다.
// named parameter 함수 형태
int add({required int a, required int b}) {
return a + b;
}
// 호출 시
add(a : 1, b : 2);
required
키워드는 parameter가 null이 불가능한 타입일 경우, default value를 갖거나, 필수로 입력되어야 한다.
// 기본 값을 갖는 positional parameter 함수 형태
int add( int a, [int b = 2]) {
return a + b;
}
// 기본 값을 갖는 named parameter 함수 형태
int add({required int a, int b = 2}) {
return a + b;
}
// 섞어쓰는 경우의 함수 형태
int add(int a, {required int b}) {
return a + b;
}
// 호출 시
add(1, b: 2)
일회성, 다트에서는 둘을 구분짓진 않음. callback 함수 사용 시 유용.
(param) {function body} // 익명
ex) numbers.reduce((value, el) {
return value + el
})
(param) => {one statement} // 람다
ex) numbers.reduce((val, el) => value + el)
해당 키워드는 함수 시그니처를 정의하는 값. 여기서 시그니처는 리턴 타입 및 매개 변수 개수와 타입 등을 말한다. 즉, 함수 선언부를 정의하는 키워드
// 일급 객체인 함수를 값처럼 사용.
typedef Operation = void Function(int x, int y);
void add(int x, int y) {
print x + y
}
void calc(int x, int y, Operation oper){
oper(x, y)
}
void main() {
calc(1, 2, add)
}
void main() {
try {
final String name = "yjh" ;
throw Exception("!!"); // 예외 발생문, 없다면 print까지 실행.
print(name);
} catch(e){
print(e);
}
}