predicates

filter, takeWhile 같은 함수에 tear-off로 넘기기 좋도록 준비해 둔 작은 타입/값 검사 모음입니다.

bool isNull(Object? a) bool isNotNull(Object? a) bool isNil(Object? a) // == isNull; Dart has no separate `undefined` bool isBool(Object? a) bool isNum(Object? a) bool isString(Object? a) bool isDateTime(Object? a) bool isList(Object? a) bool isMap(Object? a)

강의

평범한 Dart 코드라면 그냥 a is String이라고 쓰면 됩니다 — 그게 관용적인 방식이고, 여기 있는 함수들이 그것을 대체하지도 않습니다. 이 함수들이 존재하는 이유는 하나입니다. Dart의 is 연산자는 일급 함수 값으로 tear-off 할 수 없는데, filter, takeWhile, find 같은 함수들은 모두 bool Function(A)를 원하기 때문입니다. filter(isString, mixedList)filter((a) => a is String, mixedList)보다 읽기 좋다는 것, 이 페이지의 요점은 그게 전부입니다.

isNil은 FxTS의 "null 또는 undefined인가" 검사를 그대로 옮긴 것입니다. Dart는 둘을 null 하나로 합쳐 두었으므로, isNull과 완전히 동일합니다. 오직 FxTS와의 이름 대응을 위해 남겨 둔 이름이 세 개 더 있고 @Deprecated로 표시되어 있습니다. isUndefined (Dart에는 undefined가 없으니 그냥 isNull입니다), isArray (JS의 Array → Dart의 List이니 isList입니다), isObject (JS의 평범한 객체 → Dart의 Map이니 isMap입니다). 새로 쓰는 코드에서는 deprecated 되지 않은 이름을 쓰세요. 별칭들은 포팅된 호출부가 그대로 컴파일되도록 남겨 둔 것입니다.

데모 1 · filter에 바로 넘기는 tear-off

데모 2 · isNil과 deprecated 별칭들

직접 해 보기

연습: isNotNullrow에서 null을 걸러내 보세요.

관련 항목: filter — 이 함수들이 주로 쓰이는 자리 · isEmpty — 타입이 아니라 값을 보는 검사 · compact — 이터러블에서 null을 제거 · matches — 타입이 아니라 형태를 보는 술어