상수 생성자는 const로 호출해요
상수 생성자는 const로 호출해요
prefer_const_constructors 린트 규칙은, const로 호출할 수 있는 생성자는 실제로 const로 호출하라고 권하는 규칙이에요. Stable 상태이고, 코드 수정도 자동으로 가능해요.
본문
생성자를 const로 호출해서 canonicalize 된 인스턴스를 만들 수 있다면, 그렇게 하는 게 더 좋아요. 같은 값이라면 인스턴스를 새로 만들 필요 없이 상수 인스턴스를 재사용하는 게 효율적이거든요.
BAD — const 생성자인데 new로 호출했어요.
class A {
const A();
}
void accessA() {
A a = new A();
}
GOOD — 생성자가 const니까 const A()로 만들었어요.
class A {
const A();
}
void accessA() {
A a = const A();
}
물론 생성자가 const가 아니면 이렇게 할 수 없어요. 아래처럼 값을 필드에 담는 생성자라면 const A(this.x)처럼 선언할 수 있고, 그 값을 그대로 받아 넘길 때도 자연스럽게 흘러가요.
class A {
final int x;
const A(this.x);
}
A foo(int x) => new A(x);
규칙 켜기
analysis_options.yaml 파일의 linter > rules 아래에 prefer_const_constructors를 추가하면 돼요.
linter:
rules:
- prefer_const_constructors
YAML 맵 문법으로 설정한다면 이렇게 써요.
linter:
rules:
prefer_const_constructors: true
더 알아보기
- 상수 생성자를 만들려면
prefer_const_constructors_in_immutables규칙을 함께 보면 좋아요.