문제

이 두 프로그래밍 개념의 차이점이 무엇인지 이해하고 싶습니다. 첫 번째는 데이터 유형이 없음을 나타내고 후자에는 유형이 존재하지만 정보는 없습니다. 또한, 나는 단위가 기능 프로그래밍 이론적 기초에서 나온다는 것을 알고 있지만 여전히 단위 원시의 유용성이 무엇인지 이해할 수 없다 (예 : F# 프로그램에서).

도움이 되었습니까?

해결책

단위 유형은 모든 것을 더 규칙적으로 만듭니다. 어느 정도까지 F#의 모든 기능을 단일 매개 변수를 취하고 단일 결과를 반환 할 수 있다고 생각할 수 있습니다. 매개 변수가 필요없는 함수는 실제로 "단위"를 매개 변수로 가져오고 결과를 반환하지 않는 함수는 결과적으로 "단위"를 반환합니다. 이것은 다양한 장점이 있습니다. 예를 들어, C#에서 값을 반환하는 다양한 구멍의 기능을 나타내는 "func"대의원과 값을 반환하지 않는 "행동"대의원을 모두 나타내는 방법을 고려하십시오 (예 : Func<int,void> 합법적이지 않습니다 - void는 '실제'유형이 아니기 때문에 그런 식으로 사용할 수 없습니다).

또한보십시오 F# 기능 유형 : 튜플과 카레와 함께 재미있는 재미

다른 팁

기능 프로그래밍에서 우리는 일반적으로 출력에 대한 입력을 매핑하는 것에 대해 말합니다. 이것은 말 그대로 인수를 반환 값에 매핑하는 것을 의미합니다. 그러나 무언가가 수학적/카테고리-이론적 의미에서 기능이 될 경우 돌아와야합니다. 무엇. ㅏ void 값은 함수가 아무것도 반환하지 않는다는 것을 나타냅니다.이 용어에서는 무의미합니다.

unit 기능적인 답변입니다 void. 본질적으로 값이 하나만있는 유형입니다. (). 많은 용도가 있지만 여기에 간단한 것이 있습니다. 더 전통적인 명령적인 언어로 이와 같은 것이 있다고 가정 해 봅시다.

public static <T, U> List<U> map(List<T> in, Function<T, U> func) {
  List<U> out = new ArrayList<U>(in.size());
  for (T t : in) {
     out.add(func.apply(t));
  }
  return out;
}

이것은 특정 기능을 적용합니다 func 목록의 모든 요소에 새로운 목록을 작성합니다. func의 출력 유형. 그러나 주장을 인쇄하는 함수를 전달하면 어떻게됩니까? 출력 유형이 없으므로 무엇을 입을 수 있습니까? U?

일부 언어에서는 그러한 함수를 전달하면이 코드를 중단합니다 (C#, 할당 할 수없는 C#예 : void 일반 유형). 당신은 an을 가지고있는 것과 같은 해결 방법에 의지해야합니다 Action<T>, 그것은 어리석게 될 수 있습니다.

이것은 개념의 개념입니다 unit 유용합니다 : 그것 ~이다 유형이지만 단일 값 만 취할 수있는 유형. 이는 체인 및 구성과 같은 것들을 크게 단순화하고 걱정해야 할 특별한 경우의 수를 크게 줄입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top