Topazdocs
언어 정책

패턴과 제어 흐름

패턴 검사, `if`/`match`, 반복문이 값과 제어 흐름을 만드는 규칙.

Topaz의 패턴은 값의 형태를 검사하고 필요한 부분에 이름을 붙입니다. if, match, for, while, loop는 이 패턴 규칙과 종료 조건을 공유합니다.

정책

패턴은 와일드카드, 리터럴, 바인딩, 튜플, 레코드, 배열, Option, Result, enum, 명목 레코드를 다룰 수 있습니다. 배열의 나머지는 ..rest 또는 ..로 받습니다. match의 각 case는 패턴과 선택적 가드를 가집니다. for는 식을 본문으로 쓰면 결과 배열을 만들 수 있고, whileloopbreak로 종료합니다.

명시된 동작

패턴은 왼쪽에서 오른쪽으로 검사되며 실패한 경로의 바인딩은 남지 않습니다. match는 가능한 경우를 모두 다루어야 합니다. 가드는 패턴이 맞은 뒤에만 평가됩니다. break value를 허용하는 문맥의 loop는 해당 값을 반환할 수 있습니다.

제약과 명시적 거부

리스트 패턴의 [head, ...tail]은 사용할 수 없고 ..tail을 써야 합니다. 동일한 대안이 서로 다른 이름을 바인딩하는 OR 패턴, 닿을 수 없는 case, 비어 있는 명목 레코드 패턴, 종료할 수 없는 값 반환 반복문은 거부됩니다.

유예 경계

사용자 정의 패턴, 뷰 패턴, 가드의 효과 추론, 임의 반복자 프로토콜, 생성기 문법은 현재 범위 밖입니다.

예제

TOPAZ
function describe(values: Array<int>) -> string {
    match values {
        case [] => "empty"
        case [only] => "one: {only}"
        case [head, ..tail] => "head: {head}, rest: {tail.length}"
    }
}

let label = describe([1, 2, 3])

관련 정책