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이 곱해지기 전에 출력해 보세요.

관련 항목: peek — tap의 파이프라인 버전 · pipe1 / pipe — 값을 함수들에 차례로 흘려보냅니다 · identity — 부수 효과 없이 그대로 통과시킵니다 · apply — 동적인 인자 목록으로 함수를 호출합니다