타입 변수명 형태로 지정할 수 있다.var 변수명 형태로 지정할 수 있다.void main() {
var name1 = 'hello';
name1 = 'world';
print(name1);
String name2 = 'hello';
name2 = 'world';
name2 = false; // 에러!!
print(name2);
}
일반적으로 로컬변수에는 var 사용이 권장된다.
클래수 변수나 프로퍼티등은 type 지정이 권장된다.
동적 타입 변수를 만들어 준다.
json 응답이나 타입을 지정하기 어려운 경우 사용하면 효과적이다.
동적 타입이기 때문에 특정 타입으로 사용하려면 스마트 캐스팅을 사용해야 한다.
void main() {
// var 선언부에 값을 할당하지 않으면 dynamic 타입으로 선언된다.
var dynamicValue1;
dynamic dynamicValue2;
// 어떤 타입이라도 넣을수 있다.
dynamicValue1 = 100;
dynamicValue2 = 'Dart';
// 타입이 다른 값을 넣을 수 있다.
dynamicValue1 = 'dart';
dynamicValue2 = false;
// 스마트 캐스팅을 지원한다.
if (dynamicValue1 is String) {
print(dynamicValue1.length);
}
}
kotlin과 비슷하게 타입뒤에 ?가 붙으면 nullable type이 된다.
null 체크도 비슷하게 ?. 연산을 사용한다.
void main() {
String name1 = 'hello';
String? name2 = null;
print(name1.length);
// ?. 연산자로 null 체크를 해야 한다.
print(name2?.length);
// name1은 nullable이 아니기 때문에 null을 할당할수 없다.
//name1 = null;
}
kotlin의 val js의 const 같이 재할당이 불가능하게 하려면 final 키워드를 붙여야 한다.
final 변수명 , final type 변수명 모두 가능하다.
void main() {
final String name1 = 'hello';
final name2 = null;
// 재할당이 불가능 하기 때문에 에러!!
// name1 = 'world';
// name2 = 'world';
}
late 키워드를 사용하여 초기화 지연이 가능하다.
late final 변수명 형태로도 사용 가능하다.
const를 사용하여 상수를 지정한다.
js의 const는 dart의 final과 같은 맥락이다.
final과 const의 차이는 컴파일 타임에 값이 지정된다는 것이다.