tap
부수 효과를 위해 값을 인자로 함수를 호출한 뒤, 그 값을 그대로 반환합니다.
T tap<T>(void Function(T a) f, T a)
강의
tap은 data-first입니다. tap(f, value)는
f(value)를 실행하고 — 보통 print나 로그 호출,
그 밖의 부수 효과입니다 — value를 손대지 않은 채
그대로 돌려줍니다. 존재 이유는 값이 속한 표현식을 망가뜨리지 않고
값을 들여다보기 위해서입니다. 어떤 값이든 tap으로 감싸기만
하면 주변 코드는 전혀 바꿀 필요가 없습니다.
tap은 한 번에 값 하나를 다룹니다. 사촌 격인
peek는 파이프라인 버전으로,
Iterable의 원소가 끌려 나올 때마다 부수 효과를 실행합니다.
커링된 재사용 가능한 "로거"가 필요하다면 f를 직접 클로저로
잡으면 됩니다. 아래처럼 (v) => tap(f, v) 형태입니다.
데모 1 · 기본
데모 2 · pipe 안에서 로깅하기
tap을 클로저로 감싸면 재사용 가능한 "커링된" 로거가 되고,
이를 pipe 체인에 끼워 넣어 데이터 흐름을 바꾸지 않은 채
중간 값을 들여다볼 수 있습니다.
직접 해 보기
연습: tap을 사용해 map 콜백을 지나는 각 값을
10이 곱해지기 전에 출력해 보세요.