Topazdocs
언어 정책

Null·Option·결과·실행 오류

`null`, `Option`, `Result`, `?`, `??`, 실행 오류를 구분하는 규칙.

Topaz는 값이 없는 상태, 복구 가능한 실패, 계속 실행할 수 없는 실행 오류를 서로 다른 형태로 다룹니다.

정책

T | nullnull을 포함하는 유니온입니다. Option<T>Some(value)None, Result<T,E>Ok(value)Err(error)로 구성됩니다. expr?는 둘러싼 함수가 같은 오류 타입의 Result를 반환할 때 Ok를 풀고 Err를 즉시 반환합니다. ??null이나 None일 때만 오른쪽을 평가합니다.

명시된 동작

옵셔널 체인 ?.은 수신자를 한 번 평가하고 값이 없으면 해당 형탁의 빈 값을 반환합니다. Option 체인은 Option을 유지하고, null을 포함한 타입의 체인은 null을 유지합니다. 배열 범위 초과, 0으로 나누기, 정수 범위 초과 같은 실행 오류는 Result로 자동 변환되지 않습니다.

제약과 명시적 거부

?Result가 아닌 값에 쓰거나, 오류 타입이 다른 함수에서 사용하거나, 옵셔널 체인을 일반 메서드 호출과 혼동하면 정적 오류입니다. try, assert, panic 키워드는 없습니다.

유예 경계

실행 오류 잡기, 예외, 일반 try, 스택 복구, 취소 변환, 자동 재시도는 현재 범위 밖입니다. 호스트가 실행 오류 뒤의 자원 정리를 제공할 수는 있지만, 언어가 모든 defer의 실행을 보장하지는 않습니다.

예제

TOPAZ
function parsePort(text: string) -> Result<int, string> {
    match toInt(text) {
        case Some(port) => Ok(port)
        case None => Err("port must be an integer")
    }
}

function start(text: string) -> Result<string, string> {
    let port = parsePort(text)?
    return Ok("listening on {port}")
}

관련 정책