TIL: Dart | [노마드코더] Class - 221227

Lumpen·2022년 12월 26일
0

Dart

목록 보기
16/20

Class

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

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 키워드를 사용하지 않아도 된다

Named Constuctor Parameters

일반 함수와 같이 생성자 메소드도 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()
}

Cascade Notation

문법 설탕
객체의 프로퍼티 변경 시 조금 더 쉽게 가능
-> 세미콜론을 생략하는 경우에 해당

void main() {
	var player = new Player(name: 'name', xp: 0);
    var nick = player
    				..name: 'nick'
        			..xp: 10;
}

마지막 줄에만 세미콜론을 붙인다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글