01. 다트 입문하기 (변수선언, 컬렉션, typedef)
2024. 4. 7. 17:03
book : 코드팩토리의 플러터 프로그래밍
1. 다트 입문하기
다트의 가장 특징은, 개발 시에 JIT(Just In Time) 컴파일, 배포 시에 AOT(Ahead of Time) 컴파일을 사용한다는 점이다.
JIT는 런타임(실행 직전)에 컴파일을 수행하기에 핫-리로드(hot reload)와 디버깅에 유리하여 개발 단계에서의 효율을 올려준다.
AOT는 실행 이전(''직전''과는 다른 시점이다.)에 컴파일을 완료해두기 때문에 실행 속도가 빨라, 배포 단계에서 리소스활용이 유리할 수 있다.
기본 문법
변수선언
// var 선언
void main() {
var name = 'puzzle'; // 타입 추론 기능 제공
name = 'making'; // 변수 변경 가능
name = 1;
/*
*error 발생 -> 한번 추론된 타입은 고정됨
*Error: A value of type 'int' can't be assigned to a variable of type 'String'.
*/
}
// dynamic 변수 선언
void main() {
dynamic name = 'puzzle';
name = 1; // var 선언과 달리 타입 수정 가능
}
// final/const 변수 선언
void main() {
final String name = '블랙핑크'; // 변수 선언 이후 수정 불가 (런타임 상수)
name = 'BTS'; // Error: Can't assign to the final variable 'name'.
const String name2 = 'BTS'; // 변수 선언 이후 수정 불가 (빌드 타임 상수)
name2 = '블랙핑크'; //Error: Can't assign to the const variable 'name2'.
// const는 빌드 시점에 변수가 고정, final은 런타임 시전에 변수가 고정됨
// 그렇기 때문에 런타임 시 값이 제공되는 메소드를 사용할 경우 const는 에러가 발생한다.
// 예를 들어 DateTime.now()는 런타임시 값을 제공하기 때문에 final로만 사용 가능함
}
컬렉션
//List
void main() {
List<int> list = [1, 2, 3, 4];
//원소 지정
print(list[0]); // 1 출력
//길이 반환
print(list.length); // 4
//add(), 값 추가
list.add(5);
print(list); //[1, 2, 3, 4, 5]
//where(), List 순회 하면서 조건에 맞는 값 필터링
final oddNumber = list.where((num) => num % 2 == 1);
print(oddNumber.toList()); //.toList() 사용시 리스트로 변경, [1,3,5]
//map() , List 순회 하면서 값 변경 가능
final addTen = list.map((num) => num +=10);
print(addTen.toList()); // [11,12,13,14,15]
//reduce() , List 순회 하며 매개변수에 입력된 함수 실행, 값이 쌓여감
final sum = list.reduce((value, element) => value + element);
print(sum); //15
//fold(), reduce()와 원리가 같지만 타입이 달라도 사용 가능
final sumByString = list.fold<String>("시작", (value, element) => '${value.toString()} , ${element.toString()}');
print(sumByString); // "시작 , 1 , 2 , 3 , 4 , 5"
}
//Map
void main() {
Map<String, String> dictionary = {
'월요일' : 'monday',
'금요일' : 'friday'
};
dictionary.keys; // key 반환
dictionary.values; // value 반환
}
//Set
void main() {
Set<String> lastName = {'김', '이', '박'}; // 중복값 불가
lastName.toList(); // Set -> List
Set.from(lastName); // List -> Set
}
//enum
enum Status {
approved,
pending,
rejected
}
void main() {
Status status = Status.approved;
}
null 관련 연산자
void main() {
//type뒤에 ?를 명시하여 null값을 가질 수 있음
double? number1 = 1;
//?를 명시하지 않아 에러 발생
double number2 = null;
//자동으로 null 값 지정
double? nubmer3;
//number3가 null일 경우 값 지정
number3 ??= 3;
//number3가 null이 아니라서 3이 유지됨
number3 ??= 4;
}
typedef와 함수
//typedef는 함수의 시그니처를 정리하는 것
typedef Operation = void Function(int x, int y);
int add(int x, int y) {
return x+y;
}
int subtract(int x, int y) {
return x-y;
}
void main() {
Operation oper = add;
oper(1,2); //1+2
oper = subtract;
subtract(1,2); //1-2
}
'책 > [묘공단] 코드팩토리의 플러터 프로그래밍' 카테고리의 다른 글
06. 기본 위젯 알아보기 (0) | 2024.04.14 |
---|---|
05. 플러터 입문하기 (0) | 2024.04.14 |
04. 다트 3.0 신규 문법 (0) | 2024.04.09 |
03. 다트 비동기 프로그래밍 (0) | 2024.04.09 |
02. 다트 객체지향 프로그래밍 (0) | 2024.04.09 |