dart에서는 var를 이용하는 법과 데이터 타입을 명시하는 방법으로 데이터 타입을 지정할 수 있다.
- 관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때에는 var를 사용한다.
- class에서 변수나 property를 선언할 때에는 타입을 명시하여 지정한다.
var -> 수정가능, dynamic 타입
final, -> 수정불가, 데이터 타입 명시 가능, JS의 const와 같다.
var a = '안녕';
final String b = '안녕';
// b = '안녕안녕' -> 에러 (수정불가)
const -> 수정불가, compile-time constant를 만들어준다.
// fetchAPI() : API를 가져오는 함수라 가정
const API = fetchAPI(); // 컴파일러는 API 변수의 값을 모름 (받아와야 하니까)
const API = '내용'; // 컴파일 할 때 알고있는 값
late는 final 이나 var 앞에 붙이는 수식어로, 초기 데이터 없이 변수를 선언할 수 있게 해준다.
late final String name; // 변수 값 할당 안 함
class Player{
final String name;
int xp;
Player(this.name, this.xp); // 생성자
}
...
var player = Player("이름", 1500); // 인스턴스 생성
var player = Player('이름', 1500 .......);
이렇게 되니까class Player{
final String name;
int xp;
Player({this.name, this.xp}); // 생성자에 중괄호 추가!
}
...
var player = Player(
name = "이름",
xp = 1500,
); // 인스턴스 생성
class Player{
final String name;
int xp age;
String team;
Player({
required this.name,
required this.xp,
required this.team,
required this.age // required 추가 (필수로 넣어야한다는 뜻)
});
Player.createRedPlayer({ // named constructors, 이름은 맘대로 지정
required String name,
required int age,
}) : this.age = age,
this.name = name,
this.team = 'red',
this.xp = 0;
}
...
var player = Player.createRedPlayer(
name = "이름",
age = 21, // xp는 고정값이라 age를 씀
); // 인스턴스 생성
:
사용한거 엄청 중요하다var apiData = [
{
"name" : "aaa",
"team" : "red",
"xp" : 1500,
},
{
"name" : "bbb",
"team" : "red",
"xp" : 1500,
},
{
"name" : "ccc",
"team" : "red",
"xp" : 1500,
}
]
class Player {
final String name;
int xp;
String team;
Player.fromJson(Map<String, dynamic> playerJson) // named constructor
: name = playerJson['name'],
xp = playerJson['xp'],
team = playerJson['team'];
}
...
// 데이터 담기
apiData.forEach((element) {
var player = Player.fromJson(element);
print(Player)
})
Player.fromJson(Map<String, dynamic> playerJson)