with https://nomadcoders.co/dart-for-beginners

Var Keyword

void main() {
  var name = '니꼬';
  // name이 문자열로 초기화 됐을 때 후에 다른 타입(정수형)을 넣을 수 없음
  // name = 1; 
  // 문자열은 가능
  name = 'nico';

  // 타입을 지정해서 사용할 수 도 있음
  String name1 = '니꼬';
  int i = 1;

  // 관습적으로?
  // 함수나 메소드 내부에서 지역변수를 선언할 때에는 var를 사용
  // class 내 property 변수는 타입을 지정
}

Dynamic Type

void main() {
  // var로 선언하고 값을 넣지 않으면 dynamic type이 됨
  var name;
  // type 상관 없이 사용 가능
  name = 'nico';
  name = 12;
  name = true;

  // dynamic 이라고 선언 가능
  dynamic name1;

}

Nullable Variable

// null safety가 없다면 아래 코드는 런타임(실행중)에 NoSuchMethodError가 발생
// bool isEmpty(String string) => string.length == 0;
// main() {
//   isEmpty(null);
// }

// dart에서는 어떤 변수가 null이 될 수 있는지 정확히 표시해야함
void main() {
  String nico = 'nico';
  // 아래 코드는 불가능함 
  // nico = null; X

  // '?' 를 붙이면 null을 사용할 수 있음
  String? nico1 = 'nico1';
  nico1 = null;
  
  // 'nico'란 변수가 null이 아닌경우 isNotEmpty값을 리턴
  nico?.isNotEmpty;
  // 위 한줄과 같은 표현
  if (nico != null) {
    nico.isNotEmpty;
  }
}

Final Variable

// 한번 값을 넣게 되면 수정할 수 없는 변수
void main() {
  final nico = 'nico';
  // final로 선언 했기 때문에 값 변경이 불가능함
  // nico = 'test'; X
}

Late Variable

// 값 초기화 없이 변수를 선언하고 나중에 값을 지정할 수 있음
// var 나 final 앞에 붙여줄 수 있는 수식어
void main() {
  // 값을 넣지 않으면 null로 기본값이 들어가는데 late를 이용하여 나중에 값을 지정해줄 수 있다.
  late String nico;
  late final String nico1;
  // print(nico);
  nico = 'nico';
  nico1 = 'nico';

  late final String nico2;
  nico2 = 'nico';
  print(nico2);

  String name;
  // print(name);
  name = '123';
}

late를 붙여 선언한 변수와 late 없이 선언한 변수 둘다 사용이 가능했는데 print 구문을 넣고 실행해보니 에러 문구에서 차이가 났다.

> dart run main.dart
main.dart:7:9: Error: Late variable 'nico' without initializer is definitely unassigned.
  print(nico);
        ^^^^
main.dart:16:9: Error: Non-nullable variable 'name' must be assigned before it can be used.
  print(name);
        ^^^^

Constant Variable

void main() {
    // 컴파일 할 떄 알 수 있는 값으로 final 처럼 값을 한번만 지정 가능.
    // 컴파일 후에 알 수 있는 값으로는 사용 못함. ex) const API = getAPIKey(); X
    const API = '121212';
}