형식 선언

Q#에서는 사용자 정의 프로브를 지원합니다. 사용자 정의 형식은 F#의 레코드 형식과 비슷합니다. 변경할 수 없지만 복사 및 업데이트 구문을 지원합니다.

사용자 정의 형식

사용자 정의 형식에는 명명된 항목과 익명 항목이 모두 포함될 수 있습니다. 예를 들어 네임스페이스 내에서 다음 선언은 형식이 Double인 두 개의 명명된 항목 RealImaginary가 있는 Complex 형식을 정의합니다.

    newtype Complex = (Real: Double, Imaginary : Double);

명명된 항목과 명명되지 않은 항목의 조합이 지원되며 내부 항목의 이름을 지정할 수도 있습니다. 예를 들어 Nested 형식은

newtype Nested = (Double, (ItemName : Int, String)); 

각각 익명 형식 DoubleString의 두 익명 항목과, Int 형식인 명명된 항목 ItemName을 포함합니다.

포함된 항목은 해당 이름 또는 분해를 통해 액세스할 수 있습니다(자세한 정보는 항목 액세스 참조). 셰이프가 래핑 해제 연산자를 통해 선언에 정의된 것과 일치하는 경우 모든 항목의 튜플에 액세스할 수도 있습니다.

사용자 정의 형식은 두 가지 이유로 유용합니다. 첫째, 정의된 형식을 사용하는 라이브러리 및 프로그램이 분해가 아닌 이름을 통해 항목에 액세스하는 한 나중에 라이브러리 코드를 중단하지 않고 추가 항목을 포함하도록 형식을 확장할 수 있습니다. 이 때문에 분해를 통해 항목에 액세스하는 것은 일반적으로 권장되지 않습니다.

둘째, Q# 항목 형식이 동일하더라도 두 사용자 정의 형식의 값 간에 자동 변환이 없으므로 특정 데이터 형식에 대한 의도와 기대치를 전달할 수 있습니다.

사용자 정의 생성자

사용자 정의 형식에 대한 생성자는 컴파일러에서 자동으로 생성됩니다. 현재는 사용자 지정 생성자를 정의할 수 없지만 나중에 언어에 추가될 수 있습니다.