var : 처음 할당한 값으로 타입 추론, 이후 해당 타입으로 타입 고정 (타입 변경하여 재할당 불가)
dynamic : 모든 타입 선언 가능. 이후 다른 타입의 값 재할당도 가능
? : nullable
String? name = '미뇽';
name = null; //가능
String name2 = '도영';
name2 = null; //불가
! : null이 들어갈 수 있는 값에 ! 를 붙이면 >> 현재 이 값은 null이 아니다!
name = '미뇽';
print(name!);
final 과 const
// 위치
final String name = '미뇽';
const String name = '미뇽';
// 값 변경 불가
// name = '도영'; //에러
// name = '도영'; //에러
// var 키워드 생략 가능
final var name2 = '미뇽';
final name2 = '미뇽'; //가능
const var name2 = '미뇽';
const name2 = '미뇽'; //가능
final : 빌드타임에 값을 몰라도 됨const : 빌드타임에 값을 알고 있어야 함// DateTime.now() 의 경우 코드가 실제로 실행되는 시점의 값임
final DateTime now = DateTime.now(); // 가능
//const DateTime now2 = DateTime.now(); // 에러
??=
int? number = 3;
number ??= 5;
print(number); // 3
===
int? number2 = 3; // null 값을 넣을 수 있으려면 int? 로 선언
number2 = null;
number2 ??= 5;
print(number2); // 5;
is , is!
int number = 3;
print(number is int); // true
print(number is String); // false
print(number is! int); // false
선언
List<String> strList = ['a', 'b', 'c'];
List<int> intList = [1, 2, 3];
print(strList); // [a, b, c]
print(intList); // [1, 2, 3]
값 조회
//index로 조회
print(strList[1]); // b
추가 / 삭제
strList.add('mignon');
print(strList); // [a, b, c, mignon]
strList.remove('mignon');
print(strList); // [a, b, c]
해당 값의 인덱스
print(strList.indexOf('b')); // 1