diagnostics_parameter_assignments 진단: 함수 본문에서 매개변수를 다시 할당했어요

diagnostics_parameter_assignments 진단: 함수 본문에서 매개변수를 다시 할당했어요

함수의 매개변수(parameter)는 함수를 호출할 때 받는 값이에요. 그런데 함수 본문 안에서 그 매개변수에 다시 값을 할당하면, "이 변수에 지금 어떤 값이 들어 있는지"가 헷갈리기 쉬워져요. 그래서 Dart 분석기는 함수 본문 안에서 매개변수를 재할당하는 코드가 있으면 parameter_assignments 진단을 내보내요. 매개변수로 받은 값을 그대로 쓰지 말고, 바꿔 쓸 값이 필요하면 다른 변수에 담아 쓰라는 뜻이에요.

출처: 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);
}

더 알아보기