main() 함수가 있어야한다
dart는 세미콜론이 필수 (자동완성 없음) - 생략하는 경우가 있다
var 키워드로 변수를 선언하면 타입 추론을 한다
한 번 사용된 변수는 해당 타입만 들어가야 함
함수나 메소드 내부에 지역변수를 선언 시 var를 사용하고
Class 내부에서 프로퍼티를 선언할 때는 타입을 지정한다
any 같은 type 이지만 조금 다르다
조건문 안에서 타입이 확정되는 순간 부터
해당 타입에서 사용 가능한 모든 것을 자동완성 해준다
if (변수 is String) {}
으로 타입 확인
dart는 개발자가 null 데이터를 참조할 수 없다
컴파일 시점에 null 이 될 수 있음을 알려준다
다트에서는 어떤 데이터가 null 이 될 수 있음을 명확히 해야한다
void main() {
String? name = 'hi';
name = null; // type Null
}
final 로 변수를 생성하면 상수처럼 사용할 수 있다
자바스크립트의 const와 같다
final String name = 'final'
final 이나 var 앞에 선언하여 초기 데이터 없이 변수를 선언할 수 있도록 한다
data fetching 등을 할 때 유용하다
자바스크립트의 const와는 다르다
compile-time constant: 컴파일 타임에 평가되는 상수 (컴파일 타임에 값이 있어야 함)
-> 비동기를 담을 수 없는 상수
String, bool, int, double 등이 있다
하지만 모든 자료형은 객체로 이루어져 있다
이것이 다트가 완전한 객체지향으로 불리는 이유
num 은 int와 double의 부모 클래스이지만 자주 사용되지 않음
List<int> numbers = [1, 2, 3,]; // class
var numbers = [1, 2, 3, ]; // function
다트는 collection if, collection for 를 지원한다
collection 자료형에 있을 수도, 없을 수도 있는 값을 만들 수 있다
var numbers = [1, 2, if (true) 3], // if 조건에 만족하면 numbers에 add(3) 아니면 [1, 2]
var old = ['a', 'b'];
var new = [for (var alpha in old) 'old $alpha','c', 'd'];
// ['old a', 'old b', 'c', 'd'];
$ 를 사용해서 문자열에 변수를 넣을 수 있는데
자바스크립트 처럼 백틱을 사용하는 것이 아니라 그냥 문자열에서 사용할 수 있음
문자열에 값이나 표현식을 넣으려면
${} 로 사용한다
파이썬의 dictionary, 자바스크립트의의 객체 같은 자료형
Map<String, Object>라고 작성하면 형식을 갖는다
다트는 Object로 부터 모든 자료형이 나오기 때문에
타입스크립트의 any 와 같다고 보면 된다
key: value 형식으로 key와 value에 모든 자료형을 사용 가능하다
void main() {
var map = {1: 'map',}; // 타입 추론
Map<String, Object> map = {'1': 'any', };
}
데이터의 분류가 명확하다면 class를 사용하는 편이 좋다
void main() {
var numbers = {1, 2, 3};
Set<int> numbers = {4, 5, 6};
}
list와 같지만 모든 요소가 유니크하다
값을 추가해도 이미 존재하는 값이라면 무시된다