언어 기초

연산자와 표현식

계산·비교·조건부 실행에 맞는 연산자를 고르고, 표현식의 결과와 대입을 구분합니다.

계산·비교·조건부 실행에 맞는 연산자를 고르세요. 연산자가 묶이는 순서로 표현식의 결과를 읽고, 값을 바꾸는 대입과 구분할 수 있습니다.

계산 결과 따라가기

첫 프로그램에 따라 토파즈를 설치한 뒤, 다음 코드를 operators-expressions.tpz로 저장하세요.

TOPAZ
function 점수(기준: int, 보너스: int) -> int {
    let 두배 = 기준 * 2
    if 보너스 > 0 { 두배 + 보너스 } else { 두배 }
}

let 결과 = 점수(20, 2)
let 정확 = 결과 == 42
let 다름 = 결과 != 41

print("{결과} {정확} {다름}")

파일을 저장한 폴더에서 검사하고 실행하세요.

BASH
topaz check operators-expressions.tpz
topaz run operators-expressions.tpz

검사가 통과하면 프로그램이 다음 내용을 출력합니다.

출력
42 true true

점수(20, 2)는 먼저 두배에 40을 저장합니다. 보너스가 양수이므로 if 분기가 2를 더해 42를 반환합니다. 두 비교 결과는 모두 참입니다. ==와 !=는 바인딩을 바꾸지 않고 값을 비교합니다.

하려는 일에 맞는 연산자 고르기

하려는 일표기동작
계산+, -, *, /, %, **양쪽 값이 모두 int이거나 모두 float여야 함. %는 정수에 적용
문자열 연결left + right양쪽 값이 모두 문자열이어야 함
비교<, <=, >, >=, ==, !=두 값의 타입이 해당 비교를 지원해야 함
포함 여부 확인value in collection맵의 키를 찾으려면 key in map.keys 사용
조건 결합left && right, left || right왼쪽 값으로 결과가 정해지면 오른쪽 계산을 생략
없는 값 채우기value ?? fallbacknull이나 None이면 대체 값 사용
Result 오류 전파value?Ok의 값을 꺼내거나 둘러싼 함수·클로저에서 Err 반환
호출에 값 전달value |> next파이프라인 규칙 적용
값 변경target = value, +=, ??=대입 문장 실행

&&는 왼쪽이 true일 때 오른쪽을 계산합니다. ||는 왼쪽이 false일 때 오른쪽을 계산합니다. 이처럼 불필요한 계산을 건너뛰는 동작을 단락 평가라고 합니다. ??도 값이 있으면 대체 값의 계산을 건너뜁니다.

후위 ?를 쓰려면 반환 타입이 호환되는 Result여야 합니다. 오류 전파와 없는 값 처리는 Null·Option·결과·fault에서 보세요.

계산 묶기와 값 비교하기

묶이는 범위를 드러내려면 소괄호를 쓰세요. 곱셈은 덧셈보다 먼저 묶이므로 2 + 3 * 4는 14입니다. (2 + 3) * 4는 20입니다.

우선순위는 아래 순서로 낮아집니다.

  1. 호출·인덱싱·멤버 접근·선택적 접근·후위 ?
  2. 거듭제곱 **
  3. 단항 +, -, !
  4. 곱셈·나눗셈·나머지
  5. 덧셈·뺄셈
  6. 범위
  7. 비교·포함 여부
  8. &&, ||, ?? 순서
  9. 함수 합성 >>, 파이프라인 |> 순서

함수 합성은 명세에 나옵니다. 문서에서 안내하는 실행 경로에서는 이름 있는 함수 호출이나 |>로 함수를 연결하세요.

int는 부호 있는 64비트 정수입니다. 나눗셈은 소수 부분을 0 방향으로 버립니다. 0이 아닌 나머지는 피나눗수의 부호를 따릅니다. 정수 범위 초과, 0으로 나누기나 나머지 구하기, 음수 정수 지수는 실행 오류를 냅니다. 상수 식에서는 검사 오류가 납니다. float는 무한대와 NaN을 포함한 IEEE-754 binary64 규칙을 따릅니다. int와 float 사이에는 명시적으로 변환하세요.

기본 타입 값·호환 레코드·Array·Option·Result·명목 값은 내부 값들이 동등 비교를 지원하면 비교할 수 있습니다. 배열은 길이와 원소 순서를 비교합니다. 명목 값은 같은 enum·record·newtype 선언에서 만들어야 합니다. Map·Set 값, 함수, 리소스, 템플릿은 동등 비교할 수 없습니다.

대입과 연산자 고치기

대입은 가변 대상을 바꾸며 결과 값을 만들지 않습니다. 동등 비교에는 ==를 쓰세요. 가변 count를 늘리려면 count = count + 1로 쓰세요. count++, count--, count **= 2는 지원하지 않습니다.

비트 연산자, 암묵적 숫자 변환, 부동소수점 나머지 연산자, 연산자 오버로딩, 사용자 정의 연산자는 지원하지 않습니다.

연산에 쓸 타입은 타입, 분기의 결과는 패턴과 제어 흐름에서 이어서 보세요. 호출 연결은 파이프라인과 플레이스홀더에서 다룹니다.