초기화 형식 인자 사용하기
초기화 형식 인자 사용하기
클래스 생성자에서 받은 인자를 같은 이름의 필드에 그대로 넣어 주는 코드는 자주 볼 수 있어요. this.x = x;처럼 직접 대입하는 대신, Dart의 **초기화 형식 인자(initializing formals)**를 쓰면 그 반복을 줄일 수 있어요. 이 린트 규칙이 가능한 곳에 초기화 형식 인자를 쓰도록 알려줘요.
본문
가능하면 초기화 형식 인자를 사용하세요.
초기화 형식 인자를 사용하면 코드가 더 간결해져요.
나쁜 예:
class Point {
num? x, y;
Point(num x, num y) {
this.x = x;
this.y = y;
}
}
좋은 예:
class Point {
num? x, y;
Point(num this.x, num this.y);
}
나쁜 예:
class Point {
num? x, y;
Point({num? x, num? y}) {
this.x = x;
this.y = y;
}
}
좋은 예:
class Point {
num? x, y;
Point({required num this.x, required num this.y});
}
num this.x처럼 파라미터에 this.를 붙이면, 인자가 바로 같은 이름의 필드에 초기화되는 거예요. 생성자 몸통에서 대입하는 코드가 사라지면서 훨씬 깔끔해지죠.
이름이 다르면 린트가 생기지 않아요
이 규칙은 파라미터 이름과 필드 이름이 같을 때만 린트를 만들어요. 이름이 다르면 이 린트를 해결하기 위해 필드나 파라미터를 둘 중 하나는 바꿔야 하는데, 둘 다 잠재적으로 하위 호환성을 깨는 변경일 수 있거든요. 예를 들어 다음 코드는 린트를 만들지 않아요.
class Point {
bool? isEnabled;
Point({bool? enabled}) {
this.isEnabled = enabled; // OK
}
}
더 엄격한 타입을 강제할 수도 있어요
초기화 형식 인자로 초기화되는 필드보다 더 엄격한 타입을 강제하는 것도 가능해요. 아래 예시에서 이름 없는 Bid 생성자는 amount가 nullable(int?)로 선언되어 있는데도, non-null int를 요구해요.
class Bid {
final int? amount;
Bid(int this.amount);
Bid.pass() : amount = null;
}
이 규칙 켜는 법
prefer_initializing_formals 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 규칙 이름을 추가하면 돼요.
linter:
rules:
- prefer_initializing_formals
혹시 YAML 맵 문법으로 린트 규칙을 설정하고 있다면, linter > rules 아래에 이렇게 적어주면 돼요.
linter:
rules:
prefer_initializing_formals: true