컬렉션 비어 있음 확인에는 isEmpty 사용하기

컬렉션 비어 있음 확인에는 isEmpty 사용하기

컬렉션이 비어 있는지 확인하려고 length == 0 같은 코드를 쓰는 경우가 많아요. 그런데 Iterable은 항상 길이를 상수 시간에 알 수 있는 게 아니어서, length를 쓰면 생각보다 느려질 수 있어요. 이 린트 규칙은 isEmpty·isNotEmpty를 쓰도록 도와줘요.

출처: prefer_is_empty

본문

컬렉션이 비어 있는지 확인하려고 length를 사용하지 마세요.

Iterable 계약은 컬렉션이 자신의 길이를 알거나 상수 시간에 제공해야 한다고 요구하지 않아요. 컬렉션에 뭔가 들어 있는지만 확인하려고 length를 호출하면 아주 느릴 수 있어요.

대신 더 빠르고 읽기 좋은 getter인 isEmptyisNotEmpty가 있어요. 결과를 부정할 필요가 없는 쪽을 고르면 되죠. 비어 있는지 확인할 땐 isEmpty를, 비어 있지 않은지 확인할 땐 isNotEmpty를 쓰면 돼요.

나쁜 예:

if (lunchBox.length == 0) return 'so hungry...';
if (words.length != 0) return words.join(' ');

좋은 예:

if (lunchBox.isEmpty) return 'so hungry...';
if (words.isNotEmpty) return words.join(' ');

이 규칙 켜는 법

prefer_is_empty 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 규칙 이름을 추가하면 돼요.

linter:
  rules:
    - prefer_is_empty

혹시 YAML 맵 문법으로 린트 규칙을 설정하고 있다면, linter > rules 아래에 이렇게 적어주면 돼요.

linter:
  rules:
    prefer_is_empty: true

더 알아보기