diagnostics_parameter_assignments 진단: 함수 본문에서 매개변수를 다시 할당했어요
diagnostics_parameter_assignments 진단: 함수 본문에서 매개변수를 다시 할당했어요
함수의 매개변수(parameter)는 함수를 호출할 때 받는 값이에요. 그런데 함수 본문 안에서 그 매개변수에 다시 값을 할당하면, "이 변수에 지금 어떤 값이 들어 있는지"가 헷갈리기 쉬워져요. 그래서 Dart 분석기는 함수 본문 안에서 매개변수를 재할당하는 코드가 있으면 parameter_assignments 진단을 내보내요. 매개변수로 받은 값을 그대로 쓰지 말고, 바꿔 쓸 값이 필요하면 다른 변수에 담아 쓰라는 뜻이에요.
본문
설명
분석기는 함수 본문 안에서 매개변수가 다시 할당(reassign)될 때 이 진단을 만들어요. 매개변수를 재할당하면 함수의 어느 시점에 매개변수가 어떤 값을 갖고 있는지 파악하기가 어려워지거든요.
이때 모든 종류의 할당이 다 포함돼요.
- 직접 변수에 값을 넣는 할당(
=) - null-aware 할당(
??=) - 복합 할당 연산자(예:
+=같은 것) - 증가·감소 연산자(예:
++) - 변수 패턴 할당(예:
var (a, b) = (1, 2);)
단, 한 가지 예외가 있어요. 기본값이 없는 nullable 매개변수에 대해 함수 시작 부분에서 ??= 단 한 번씩만 null-aware 할당을 하는 것은 괜찮아요. 이건 기본값을 제공하는 흔한 패턴이기 때문이에요.
예시
다음 코드는 매개변수 x에 새 값을 할당하고 있어서 이 진단을 만들어요.
void f(int x) {
x = 4;
print(x);
}
다음 코드는 매개변수 x를 후위 증가 연산자로 수정하고 있어서 이 진단을 만들어요.
void f(int x) {
x++;
}
흔한 해결 방법
매개변수를 재할당하는 대신, 바꿔 쓸 값을 담을 로컬 변수를 새로 만들어 사용해요.
void f(int x) {
var y = x + 4;
print(y);
}