프로그램 구조

금지·유예 형식

익숙한 문법을 토파즈가 거부할 때 지원하는 대체 표기와 기능을 찾습니다.

topaz check가 익숙한 표기를 거부하면 아래에서 토파즈의 대체 표기를 찾으세요. 바로 바꿔 쓸 수 없는 기능은 필요한 결과에 맞춰 다른 방법을 고르세요.

지원하는 형식 실행하기

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

TOPAZ
let mut 개수 = 0
let 값들: Array<int> = [1, 2]
let 변환: (int) -> int = 값 => 값 + 1

match 값들 {
    case [머리, ..꼬리] => {
        개수 = 변환(머리) + 꼬리.length
    }
    case [] => {
        개수 = 0
    }
}

print("{개수}")

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

BASH
topaz check forbidden-deferred.tpz
topaz run forbidden-deferred.tpz

검사가 통과하면 프로그램이 다음 결과를 출력합니다.

출력
3

let mut로 선언한 개수는 값을 바꿀 수 있습니다. 패턴은 머리에 1, 꼬리에 [2]를 바인딩합니다. 변환(머리)의 결과 2에 꼬리 길이를 더하면 3입니다. (int) -> int는 변환에 저장한 함수의 타입입니다.

지원하지 않는 표기 바꾸기

시도한 표기대신 쓸 표기
mut let count = 0let mut count = 0
count++, count--count = count + 1, count = count - 1
타입 자리의 [T]Array<T>
타입 자리의 function(T) -> U(T) -> U
args: ...T...args: T
[head, ...tail][head, ..tail]
익명 function (...) { ... }value => value + 1 같은 람다
백틱·${value}큰따옴표와 {value} 보간
문자열 인덱싱·.lengthtext.scalars() 뒤에 Array 연산 적용

forbidden-deferred.tpz에서 let mut를 mut let로 바꾸면 검사가 실패합니다. 첫 줄을 let mut로 되돌린 뒤 다시 검사하고 실행하세요.

다른 모듈에서 가져올 때는 필요한 멤버를 지정하세요. 공개할 선언은 선언 위치에서 export로 표시합니다. 모듈과 가시성에 실제 형식이 있습니다. use, 문자열·템플릿 모듈 경로, export 목록, 와일드카드 export, 재공개, export 위치의 이름 변경은 지원하지 않습니다.

미지원 기능의 대안 고르기

아래 기능은 현재 언어에서 사용할 수 없습니다. 대안은 표에 적힌 작업을 해결하는 방법이며, 프로그램 구조를 바꿔야 할 수 있습니다.

하려는 일미지원 기능현재 선택할 방법
텍스트 살펴보기문자소 클러스터 API·문자열 직접 슬라이스유니코드 스칼라 단위가 목적에 맞으면 scalars() 사용
텍스트·구조화된 템플릿 만들기HTML·사용자 정의 템플릿 태그문자열이나 용도에 맞는 내장 p, r, sh, sql 태그 사용
제네릭 요구 조건 표현고차 제약·일반적인 동적 프로토콜 디스패치함수와 제네릭의 이름 있는 함수 제약 사용
재귀 데이터 표현재귀 타입 별칭레코드와 명목 데이터에서 지원하는 enum 선언 사용
모듈 간 선언 공유패키지 재공개선언한 모듈에서 멤버를 직접 import
여러 원소 펼치기일반 iterable 전개지원하는 위치의 Array 전개나 명시적인 반복 사용
동시 작업 실행async, await이름별 결과를 시간 한도 안에 모으는 모델이 맞으면 concurrent 사용
리소스 닫기비동기 정리동기 defer나 지원하는 using 형식 사용
예상 가능한 실패 처리실행 오류 포획·panic·throw·catch복구 가능한 오류를 Result로 반환
파이프라인에서 선택적 필드 읽기선택적 속성 파이프 약식?.를 쓴 표현식을 명시

실행 오류는 프로그램을 멈춥니다. 표기만 바꿔서 복구 가능한 Result로 만들 수는 없습니다. 잘못된 연산을 예방하거나 오류를 값으로 반환하는 API를 쓰세요. Null·Option·결과·fault에서 자세히 다룹니다.

Rust의 &self, &mut self, Vec<T>, use crate::는 토파즈 문법이 아닙니다. 모듈 수준 impl Name, 내장 컬렉션 타입, 명시적 import, 토파즈의 레코드 갱신을 쓰세요.

예제는 문법 한눈에 보기에서 찾을 수 있습니다. 연산자 표기를 고치려면 연산자와 표현식으로 이어가세요.