리터럴만으로 된 boolean 표현식은 쓰지 마세요

리터럴만으로 된 boolean 표현식은 쓰지 마세요

조건식이 리터럴(literal)만으로 구성되어 컴파일 시점에 값이 이미 결정되는 경우를 잡아주는 린트예요. 항상 truefalse가 되는 조건은 코드의 의도와 어긋나는 경우가 많거든요.

출처: literal_only_boolean_expressions — Dart linter rules

본문

리터럴만으로 구성된 조건을 검사하지 마세요. 어차피 값이 컴파일 시점에 정해지거든요.

항상 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

더 알아보기