왜 파이프를 사용합니까?

나는 파이프를 함수형 프로그래밍에 대한 마법의 문으로 설명할 것입니다. 첫눈에 나는 파이프를 얻지 못했습니다. 너무 구식처럼 보였지만 내가 쓰기 시작한 이후로 다른 모든 기능적 개념이 갑자기 함께 클릭되기 시작했습니다. 그렇다면 나니아 함수형 프로그래밍 세계로의 문을 여는 방법은 무엇일까요?

파이프는 무엇을합니까?



파이프는 다른 기능을 합성하여 생성하는 기능일 뿐입니다. 알겠습니다. 도움이 되지 않았습니다. 다시 시도하겠습니다. 3개pure functions가 있다고 상상해보십시오. 그리고 하나의 데이터에서 순서대로 모두 호출하려고 합니다. 이 같은:

import { splitData, fromatItems, filterItems } from "./myModule";

function format1(data) {
  return filterItems(formatItems(splitData(data)));
}


이것을 컴포지션이라고 하며 함수형 프로그래밍의 초석입니다. 그러나 기능적 툴킷에는 더 멋진 파이프를 작성할 수 있는 방법이 있습니다.

import { pipe } from "ramda";
import { splitData, fromatItems, filterItems } from "./myModule";

const formatWithPipe = pipe(splitData, formatItems, filterItems);

const data = formatWithPipe(data);


파이프는 모든 기능을 취하고 새로운 기능을 내보냅니다. 데이터로 새 함수를 호출하면 해당 데이터는 파이프의 모든 함수를 통과합니다.

가독성 이점



위의 코드를 다시 한 번 살펴보고 세 가지 기능을 모두 읽으십시오.

import { splitData, fromatItems, filterItems } from "./myModule";

function format1(data) {
  return filterItems(formatItems(splitData(data)));
}

function format2(data) {
  const splited = splitData(data);
  const fomatedItems = formatItems(splited);
  return filterItems(fomatedItems);
}

const format3 = pipe(splitData, formatItems, filterItems);


첫 번째 기능을 살펴보면 괜찮은 것 같습니다. 이것은 좋은 구성의 예이지만 한 가지 문제가 있습니다. 오른쪽에서 왼쪽으로 읽어야 합니다. 우리는 프로그램을 오른쪽에서 왼쪽으로 읽는 데 익숙하지 않으므로 읽기 흐름이 깨집니다.
두 번째 버전은 읽기 순서를 전환하도록 강요하지 않지만 길이가 길고 읽기 순서가 지그재그이므로 이상적이지 않습니다.
처음에는 파이프가 그다지 도움이 되지 않지만 시간이 지나면서 단순히 위에서 아래로 함수를 읽고 즉시 함수가 하는 일에 대한 아이디어를 얻을 수 있습니다. 이 경우 읽기 흐름은 다른 코드와 동일하고 기능이 상당히 간결합니다.
팁: 파이프 내부에서 로깅을 수행하는 방법에 대한 질문이 종종 있습니다. 개발 중에 파이프를 순수하게 유지하기 위해 노력해야 하지만 console.log는 가장 유용한 것 중 하나입니다. 어떻게 해야 할까요? R.tap을 사용하면 파이프의 어느 곳에서나 기록할 수 있습니다. 다른 옵션은 데이터 전에 인쇄할 내용과 같은 다른 매개변수를 지정할 수 있는 로그 기능을 만드는 것입니다.

import {pipe, curry} from 'ramda'
import {splitData, fromatItems, filterItems} from "./myModule"

const _log = curry((message, value) => {
    console.log(message, value)
})

const format3 = pipe(
    splitData,
    _log('some string'),
    formatItems,
    R.tap(console.log) // logs the data after formatItems
    filterItems
)

const data = format3(data)



기능적 도구에 대한 더 나은 이해



파이프는 보기에 좋고 가독성을 높이는 것 외에도 첫눈에 분명하지 않은 다른 이점이 있습니다. 파이프는 카레, 뒤집기, 지도 등과 같은 다른 기능적 개념의 목적을 이해하는 데 도움이 됩니다. 파이프를 사용하기 시작했을 때 다른 모든 기능이 이해되기 시작했습니다. 파이프 기능을 사용하면 때때로 서로 맞지 않는 레고 조각이 됩니다. 기능적 도구는 종종 레고가 잘 어울리도록 변형하는 데 도움이 됩니다.

Pipe는 더 나은 기능을 작성하도록 합니다.



파이핑의 또 다른 이점은 더 나은 기능을 작성하도록 강요한다는 것입니다. 함수의 입력이 갑자기 더 적고 순수하다는 것을 알게 될 것이며 더 큰 함수를 작성하기 시작하면 멋지게 구성되도록 분할하는 방법에 대해 생각하기 시작합니다.

결론



처음에는 파이프가 부가가치가 없는 단순한 구문 설탕처럼 보입니다. 그러나 가독성의 이점과 코드를 작성하도록 유도하는 방식은 몇 가지를 작성하자마자 명백해집니다. 시도해보십시오. 익숙해지면 절대 뒤돌아보지 않을 것입니다.

이 게시물이 마음에 들면 다른 게시물on my website을 확인하세요.

좋은 웹페이지 즐겨찾기