연산자의 결합 규칙과 평가 순서는 프로그램의 결과에 직접 영향을 줍니다. Topaz는 이 순서를 문법과 타입 규칙으로 고정합니다.
정책
우선순위는 후위 연산, 단항, 거듭제곱, 곱셸, 덩셈, 범위, 비교, 동등, &&, ||, ??, 파이프라인 순입니다. 대입은 표현식이 아닌 문장이며 가변 바인딩, 필드, 인덱스 위치에만 적용할 수 있습니다.
명시된 동작
피연산자는 왼쪽에서 오른쪽으로 한 번씩 평가됩니다. &&, ||, ??는 필요할 때만 오른쪽을 평가합니다. 스칼라 타입의 동등성은 값을 비교하고, 컬렉션과 명목 데이터는 정해진 항목 순서와 선언 정체성을 따릅니다. 복합 대입은 대상 위치를 한 번만 계산합니다.
제약과 명시적 거부
++, --, **=, 비트 연산자, 암묵적 int/float 변환은 없습니다. 함수, 파일 핸들, 템플릿 값은 동등성을 비교할 수 없습니다. 0으로 나누기, 정수 범위 초과, 잘못된 시프트 횟수는 실행 오류입니다.
유예 경계
비트 연산, 사용자 정의 연산자, 암묵적 숫자 승격, 일반 연산자 오버로딩은 현재 언어의 범위 밖입니다.
예제
TOPAZ
function score(base: int, bonus: int) -> int {
let doubled = base * 2
if bonus > 0 { doubled + bonus } else { doubled }
}
let result = score(20, 2)
print("{result}")