리터럴만으로 된 boolean 표현식은 쓰지 마세요
리터럴만으로 된 boolean 표현식은 쓰지 마세요
조건식이 리터럴(literal)만으로 구성되어 컴파일 시점에 값이 이미 결정되는 경우를 잡아주는 린트예요. 항상 true나 false가 되는 조건은 코드의 의도와 어긋나는 경우가 많거든요.
본문
리터럴만으로 구성된 조건을 검사하지 마세요. 어차피 값이 컴파일 시점에 정해지거든요.
항상 FALSE밖에 될 수 없는 조건을 쓰는 조건문은 코드 블록을 사실상 동작하지 않게 만들죠. 반대로 항상 true로만 평가되는 조건도 조건문이 완전히 중복이 되고 코드를 덜 읽기 좋게 만들어요. 이런 코드는 프로그래머의 의도와 맞지 않을 가능성이 꽤 커요. 조건을 아예 제거하거나, 항상 true/false로 평가되지 않도록 수정해야 한답니다.
⚠️ 안 좋은 예:
void bad() {
if (true) {} // LINT
}
void bad() {
if (true && 1 != 0) {} // LINT
}
void bad() {
if (1 != 0 && true) {} // LINT
}
void bad() {
if (1 < 0 && true) {} // LINT
}
void bad() {
if (true && false) {} // LINT
}
void bad() {
if (1 != 0) {} // LINT
}
void bad() {
if (true && 1 != 0 || 3 < 4) {} // LINT
}
void bad() {
if (1 != 0 || 3 < 4 && true) {} // LINT
}
참고: 흔히 쓰이는 while (true) { } 관용구는 예외로 둬요. 이는 동등한 for (;;)보다 합리적으로 선호되는 경우가 많거든요.
✅ 좋은 예:
void good() {
while (true) {
// Do stuff.
}
}
활성화하기
literal_only_boolean_expressions 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 literal_only_boolean_expressions를 추가하면 돼요.
linter:
rules:
- literal_only_boolean_expressions
YAML 맵(map) 문법으로 린터 규칙을 설정한다면, linter > rules 아래에 literal_only_boolean_expressions: true를 추가하면 됩니다.
linter:
rules:
literal_only_boolean_expressions: true