유비쿼터스 유형: 대수 데이터 유형 소개

Ubiquitous: present, appearing, or found everywhere.



대부분의 경우 인간으로서 우리는 "아마도"와 같은 방식으로 사물을 인식하고 레이블을 지정할 수 있습니다. 최근 이를 수행할 수 있는 능력에 대한 작은 예는 가장 성가신 사기 검사 시스템인 "reCAPTCHA"입니다. 예, 요즘 인터넷에서 귀하를 확인하기 위해 일반적으로 수행하는 모든 작업에서 항상 어떤 종류의 유형을 선택하고 레이블을 지정하도록 요청하는 시스템입니다. 인간이야.

reCAPTCHA의 모델은 너무 쉬워서 유형을 보여주고 권장 이미지에서 이 유형을 선택하도록 요청합니다.

그래서 사물에 라벨을 붙이는 것은 우리가 자연스럽게 하는 일이며, 우리는 주변 사물을 구별할 수 있도록 라벨을 붙이는 데 익숙합니다.

동일한 프로세스가 프로그래밍에서도 발생합니다. 당신이 생각하고 프로그램을 작성할 때마다 당신은 거의 사물들 사이의 유사점을 찾으려고 노력할 것입니다. 그런 다음 당신은 그러한 유사점을 합성하여 레이블을 지정해야 합니다.

함수형 프로그래밍 세계에서는 모든 것이 주변에 있습니다functions. 기능은 간단합니다. 입력을 받아들이고 출력을 생성하는 작은 종류의 상자일 뿐입니다. 입력 -> 출력.



(입력 -> 출력) 설명을 유형 서명이라고 합니다. 유형 서명은 함수 입력 및 출력의 정의일 뿐입니다.

// Signature -> multiplay2 :: Number -> Number
// Which Means that the multiplay2 function takes and 
// expect to pass parameter(input) from type Number and
// produce(output a value from type Number.
const multiplay2 = x => x * 2;

// Signature -> sum:: (Number, Number) -> Number
// Which Means that the sum function takes and expect to
// pass 2 parameter(input) from type Number
// and produce(output) a value from type Number.
const sum = (x, y) => x + y;


따라서 유형을 다음과 같이 정의할 수 있습니다.

it’s just a given label or name for some values that could be used as input or output for function.



유형 서명을 읽는 것만으로도 함수에 대한 통찰력과 이해가 강력합니다. 유형 서명이 제공하는 강력한 기능 중 하나인 기능 세부 정보로 이동하지 않고 기능 자체를 표현하고 인식할 수 있습니다.

따라서 유형은 함수의 입력 또는 출력으로 사용할 수 있는 모든 종류의 이름일 뿐입니다.

대수 데이터 유형



Wikipedia의 정의:

an algebraic data type is a kind of composite type, i.e., a type formed by combining other types.



따라서 기본적으로 대수 데이터 유형은 유형의 구성일 뿐입니다. 구성이란 더 큰 것을 만들기 위해 몇 가지를 결합할 수 있도록 여러 가지를 함께 모으는 것을 의미합니다.

대수 데이터 유형의 일반적인 유형은 기본적으로 "ANDing"으로 표현되는 "Product type"과 기본적으로 "ORing"으로 표현되는 "Sum type"입니다.

상품 유형:



제품 유형은 다른 유형의 화합물입니다. 간단히 말해서 제품 유형은 "AND"연산자와 같습니다. 새 유형을 만들려면 모든 유형이 필요합니다.

type FruitSalad = {
   apple: AppleKinds,
   banana: BananaKinds,
   orange: OrangeKinds
}




제품 및 방정식 명명은 수학, 유형 이론, 범주 이론, Cartesian product에서 유래했습니다.

합계 유형:



합계 유형은 값이 선택 유형 중 하나여야 하는 유형입니다. 간단히 말해서 Sum 유형은 "OR"연산자와 같습니다. 이 유형이나 저 유형 중 하나가 필요합니다. 둘 다 필요하지 않습니다.

type FruitSnack = Apple | Banana | Orange




합계와 방정식의 명명은 수학, 유형 이론, 범주 이론, Disjoint union에서 유래했습니다.

강력한 형식의 언어로 작업하는 경우 구성 형식 및 대수 데이터 형식도 처리해야 합니다.

아래는 구성된 유형의 순진한 예입니다.

type Amount = number | string;
type Currency = 'USD' | 'EUR';
type CardType = 'Visa' | 'MasterCard';
type CardNumber = number;

type CreditCardInfo = {
  CardType: CardType,
  CardNumber: CardNumber
}

type Payment = {
  Amount: Amount,
  Currency: Currency,
  CreditCardInfo: CreditCardInfo
}


이 기사의 주요 요점은 Product, Sum 유형의 개념을 단순화하는 것입니다. 두 유형에 대한 기능 및 모델을 구현하기 위한 것이 아니라 다음 문서에서 두 유형을 사용하여 도메인 중심으로 작동하는 유형 모델을 빌드하는 방법에 대해 자세히 설명할 수 있습니다.

참고: 일반적으로 Sum 유형에서 선택 항목을 제거하려면 일치 패턴을 구현하여 선택 항목을 제거해야 합니다.

요약:


  • 유형 서명은 함수 입력 및 출력의 정의일 뿐입니다.
  • 대수 데이터 유형은 유형의 조합일 뿐입니다.
  • AND를 사용하여 작성된 유형을 제품 유형이라고 합니다.
  • Or를 사용하여 빌드된 유형을 Sum 유형이라고 합니다.
  • 좋은 웹페이지 즐겨찾기