Class가 가장 중요한 개념이다
다른 언어의 Class와 어떻게 다른지도 중요하다
class Player {
final String name = 'name';
int xp = 0;
void hello() {
print('hi i'm $name'); // this 는 생략한다 ${this.name} 가능
}
}
void main() {
var player = new Player(); // new 생략 가능
player.hello()
}
class 에서 프로퍼티를 정의할 때에는 type 을 꼭 명시해줘야 한다
new 키워드는 생략할 수 있지만.. 고민된다
dart class 에서는 메소드 내부의 this를 생략한다 (사용은 가능)
클래스의 필드와 메소드 내부 변수 이름이 같아서 this 를 사용할 수는 있지만
변수명을 변경하는 편이 좋지 않을까 싶기도 하다..
Constructor method의 이름은 class의 이름과 같아야 한다
class Player {
late final String name; // final 키워드에는 값이 항상 있어야하지만
late int xp; // late 키워드로 값을 나중에 값을 받아 사용하도록
Player(String name, int xp) {
this.name = name;
this.xp = xp;
}
void hello() {
print('hi i'm $name');
}
}
void main() {
var player = new Player('name', 0); // new 생략 가능
player.hello()
}
class Player {
final String name;
int xp;
Player(this.name, this.xp) // positional argument
void hello() {
print('hi i'm $name');
}
}
단축 문법 사용 시에는 late 키워드를 사용하지 않아도 된다
일반 함수와 같이 생성자 메소드도 Name parameter 를 사용할 수 있다
class Player {
final String name;
int xp;
Player({ required this.name, required this.xp }) // 중괄호로 감싼다
} // required 키워드로 꼭 있어야 함을 알려준다
void main() {
var player = new Player(name: 'name', xp: 0);
player.hello()
}
문법 설탕
객체의 프로퍼티 변경 시 조금 더 쉽게 가능
-> 세미콜론을 생략하는 경우에 해당
void main() {
var player = new Player(name: 'name', xp: 0);
var nick = player
..name: 'nick'
..xp: 10;
}
마지막 줄에만 세미콜론을 붙인다