함수 패턴

완료됨

지금까지 반복적인 식을 사용하고 함수에 이러한 식을 배치했습니다. 이제 코드가 더 잘 보이고 읽기가 더 쉽습니다. 함수에 더 익숙해졌기 때문에, 존재하는 몇 가지 강력한 패턴을 살펴보는 것이 좋습니다. 이러한 패턴을 사용하여, 읽고 유지 관리하기 더 쉬운 코드를 얻을 수 있습니다.

선언적 및 명령적

코딩을 시작하면 식을 작성하게 됩니다. 그런 다음, 다른 식을 차례대로 작성합니다. 여러분은 문제를 해결하는 데 집중하고 있으며, 문제를 해결하는 방법을 잘 알고 있습니다. 이 방법을 명령적 접근 방식이라고 합니다. 당면한 문제가 해결되므로 여기에는 아무런 문제가 없습니다. 그러나 다른 방법으로는 선언적 방식을 사용할 수 있습니다. SQL를 사용하여 데이터베이스를 쿼리할 때, 선언적 방식의 예를 볼 수 있습니다.

다음은 식 예시입니다.

SELECT * 
FROM Students s
WHERE s.Location = "Ohio" 

이 코드를 선언적으로 만들면 원하는 항목이 요청되지만 문제를 해결하는 방법은 지정하지 않습니다. 방법을 SQL 상태로 둡니다.

이 방법을 F#에 적용할 수도 있습니다. 다음 코드에서는 선언적 방법을 사용합니다.

let studentsFromOhio = 
    allStudents  
    |> filterLocation "Ohio"

앞의 코드에서는 데이터에 대해 작업을 수행하고 원하는 방법을 구체적으로 지정하지 않더라도 원하는 작업을 요청합니다. 코드가 위 예제와 같이 표시되면, 쉽게 읽을 수 있으며 판단할 수 있습니다. 이를 살펴보기 위해 F#에서 지원되는 몇 가지 유용한 패턴을 살펴보겠습니다.

기능 패턴

F#에는 더 많은 기능을 사용할 수 있는 몇 가지 유용한 패턴이 있습니다. 여기서는 다음 패턴을 다룹니다.

  • 컴퍼지션: 컴퍼지션은 여러 함수를 하나의 함수로 결합합니다.
  • 파이프라인: 파이프라인은 값으로 시작하고 한 함수의 출력을 다음 함수의 입력으로 사용하여 많은 함수를 순차적으로 호출합니다.

구성

컴퍼지션은 함수를 결합하여 특정 순서로 적용하는 것입니다. 컴퍼지션 연산자는 두 개의 함수를 사용하여 새 함수를 반환합니다.

코드를 작성하는 경우, 함수 하나를 호출하고 바로 다음에 다른 함수를 호출하는 경우가 많습니다. 예를 들어, 목록을 주문하고 할인된 모든 제품을 필터링하려고 합니다.

다음 예제에서는 add2() 함수를 호출하고 multiply3() 함수에 결과를 공급합니다.

let add2 a = a + 2
let multiply3 a = a * 3 
let addAndMultiply a =
    let sum = add2 a
    let product = multiply3 sum
    product

printfn "%i" (addAndMultiply 2) // 12

이 패턴은 매우 일반적이므로 F#에는 연산자가 있습니다. >> 연산자를 사용하여 두 개 이상의 함수를 하나의 더 큰 함수로 결합할 수 있습니다. >> 연산자를 사용하여 다음과 같이 앞의 코드를 단순화할 수 있습니다.

let add2 a = a + 2
let multiply3 a = a * 3 
let addAndMultiply = add2 >> multiply3

printfn "%i" (addAndMultiply 2) // 12

결합된 함수는 addAndMultiply()는 왼쪽에서 오른쪽으로 구성된 함수를 적용합니다. 이 예제에서는 add2()가 먼저 나오고 multiply3()가 마지막으로 나옵니다.

파이프라인

파이프라인 연산자 |>은 함수 및 인수를 사용하고 값을 반환합니다. 이 예시에서는 파이프라인이 컴퍼지션과 어떻게 다른지 알아보겠습니다.

let list = [4; 3; 1]
let sort (list: int list) = List.sort list
let print (list: int list)= List.iter(fun x-> printfn "item %i" x) list

list |> sort |> print // item 1 item 3 item 4

마지막 코드 줄에서 첫 번째 함수 sort()에 대한 입력 역할을 하는 list 정수 목록부터 지정합니다. 해당 작업의 결과는 print()에 공급됩니다. 파이프라인과 컴퍼지션의 주요 차이점은 파이프라인을 사용할 경우 일부 데이터(이 경우에는 정수 목록)로 시작하여 다음 일련의 함수를 사용하는 것입니다.