컬렉션 비어 있음 확인에는 isEmpty 사용하기
컬렉션 비어 있음 확인에는 isEmpty 사용하기
컬렉션이 비어 있는지 확인하려고 length == 0 같은 코드를 쓰는 경우가 많아요. 그런데 Iterable은 항상 길이를 상수 시간에 알 수 있는 게 아니어서, length를 쓰면 생각보다 느려질 수 있어요. 이 린트 규칙은 isEmpty·isNotEmpty를 쓰도록 도와줘요.
출처: prefer_is_empty
본문
컬렉션이 비어 있는지 확인하려고 length를 사용하지 마세요.
Iterable 계약은 컬렉션이 자신의 길이를 알거나 상수 시간에 제공해야 한다고 요구하지 않아요. 컬렉션에 뭔가 들어 있는지만 확인하려고 length를 호출하면 아주 느릴 수 있어요.
대신 더 빠르고 읽기 좋은 getter인 isEmpty와 isNotEmpty가 있어요. 결과를 부정할 필요가 없는 쪽을 고르면 되죠. 비어 있는지 확인할 땐 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