레코드 필드 이름 규칙을 어겼을 때
레코드 필드 이름 규칙을 어겼을 때
레코드 리터럴이나 레코드 타입 어노테이션에 이름이 올바르지 않은 필드가 있을 때 Dart analyzer가 만들어 내는 진단이에요. 레코드 필드 이름은 몇 가지 제약을 지켜야 해요.
본문
이 진단은 레코드 리터럴이나 레코드 타입 어노테이션에 이름이 올바르지 않은 필드가 있을 때 발생해요. 이름이 잘못된 경우는 다음 중 하나예요.
- private 이름인 경우 (즉
_로 시작하는 경우) Object에 정의된 멤버 중 하나와 같은 이름인 경우- positional 필드의 이름과 같은 경우 (단, 그 필드가 지정된 이름을 가진 positional 필드라면 예외예요)
예시
아래 코드는 레코드 리터럴에 toString 이라는 필드가 있는데, toString 은 Object 에 정의된 메서드라서 이 진단을 만들어 내요.
var r = (a: 1, toString: 4);
아래 코드는 레코드 타입 어노테이션에 hashCode 라는 필드가 있는데, hashCode 는 Object 에 정의된 getter라서 이 진단을 만들어 내요.
void f(({int a, int hashCode}) r) {}
아래 코드는 레코드 리터럴에 private 필드 _a 가 있어서 이 진단을 만들어 내요.
var r = (_a: 1, b: 2);
아래 코드는 레코드 타입 어노테이션에 private 필드 _a 가 있어서 이 진단을 만들어 내요.
void f(({int _a, int b}) r) {}
아래 코드는 레코드 리터럴에 $1 이라는 필드가 있는데, 이것이 다른 positional 파라미터의 이름과 같아서 이 진단을 만들어 내요.
var r = (2, $1: 1);
아래 코드는 레코드 타입 어노테이션에 $1 이라는 필드가 있는데, 이것이 다른 positional 파라미터의 이름과 같아서 이 진단을 만들어 내요.
void f((int, String, {int $1}) r) {}
고치는 방법
필드 이름을 바꿔 주면 돼요.
var r = (a: 1, d: 4);
더 알아보기
- 레코드 (Records)
Object의 멤버들