시작하기

다른 언어에서 오셨다면

다른 언어에서 익힌 문법을 토파즈와 비교하고 필요한 실습을 고르세요.

파이썬·자바스크립트·자바·러스트로 프로그램을 작성해 봤다면 익숙한 문법을 토파즈와 비교해 보세요. 프로그래밍 기초를 다시 읽지 않고, 차이를 살펴 필요한 다음 실습을 고를 수 있습니다.

익숙한 계산 읽기

다음 함수는 과제 배열에 담긴 시간을 더합니다.

TOPAZ
record 과제 {
    제목: string,
    분: int
}

function 전체분(과제들: Array<과제>) -> int {
    let mut 전체 = 0
    for 과제하나 in 과제들 {
        전체 = 전체 + 과제하나.분
    }
    전체
}

과제의 시간이 각각 10분과 25분이면 전체분은 35를 돌려줍니다. 이 코드는 레코드와 함수를 정의하며 함수를 호출하지는 않습니다. let mut 전체로 선언했으므로 반복 중 합계를 바꿀 수 있습니다. 마지막의 전체가 반환값입니다.

확인할 차이 네 가지

재대입에는 let mut을 씁니다. let으로 선언한 이름에는 다른 값을 다시 대입할 수 없습니다. 값을 바꿔야 하는 변수에는 let mut을 쓰세요.

복구할 수 있는 오류는 Result로 돌려줍니다. 반환된 오류를 처리하거나 ?로 호출자에게 전달하세요. 토파즈에는 예외를 잡는 문법이 없습니다. 실행 오류는 실행을 중단하며 반환된 오류처럼 처리할 수 없습니다.

값이 없을 수 있으면 타입에 표시합니다. 결과가 없을 수 있을 때는 Option<T>를 씁니다. 외부에서 받은 null 허용 데이터에는 T | null을 씁니다. 두 타입은 서로 다르며, 안의 값을 쓰기 전에 값이 없는 경우를 처리해야 합니다.

파일 접근은 실행 환경에 따라 달라집니다. 프로필은 지원 기능과 실행 규칙을 정한 이름입니다. 파일 등 입출력을 쓰는 코드에서는 import, 패키지 설정, 선택한 프로필을 확인하세요. 함수의 입력·반환 타입은 함수 선언에서 확인합니다. 실제 파일 읽기에서 이 부분들을 함께 읽는 방법을 살펴보세요.

익숙한 개념에 맞는 문법 찾기

익숙한 개념토파즈에서 쓰는 방법
dict, Map, HashMapMap에 키와 값을 저장합니다. 컬렉션과 컴프리헨션을 참고하세요.
데이터를 묶는 클래스record로 필드를 묶고 함수로 그 레코드를 처리합니다.
제네릭 코드의 인터페이스함수의 입력·반환 타입과 정적 프로토콜로 필요한 연산을 정합니다. 프로토콜은 실행 중 동적으로 호출할 구현을 고르지 않습니다.
복구할 수 있는 try/except 오류 처리Result를 반환하고 Ok 또는 Err를 처리합니다.
결과가 없을 수 있는 조회Option<T>를 반환하고 Some 또는 None을 처리합니다.
null을 허용하는 외부 데이터T | null을 쓰고 null을 처리합니다.

토파즈는 클래스 상속과 실행 중 프로그램 구조를 조사하는 리플렉션을 지원하지 않습니다. 제네릭 레코드 타입의 일부 필드를 정하지 않고 남겨 두는 행 다형성도 지원하지 않습니다. 데이터 구조의 자세한 규칙은 레코드와 명목 데이터에서 확인하세요. 숫자 타입도 암묵적으로 변환하지 않으므로 표현식의 int가 자동으로 float로 바뀌지 않습니다.

직접 해 보기

메모리에 있는 과제 목록에서 제목으로 과제를 찾는 함수가 있습니다. 찾는 과제가 없을 수도 있다면 어떤 반환 타입을 쓸까요?

정답

Option<과제>를 쓰세요. 찾았으면 Some(과제값), 없으면 None을 돌려줍니다. 파일 읽기처럼 작업 자체가 실패할 수도 있다면 그 오류는 Result로 표현하세요.

다음 실습 고르기

토파즈를 설치하고 파일을 실행하려면 첫 프로그램부터 시작하세요. 이미 해 봤다면 아래에서 필요한 주제를 고르세요.

이 예제들이 익숙해지면 첫 애플리케이션에서 하나로 합쳐 보세요. 작업 중 문법을 찾아볼 때는 문법 한눈에 보기를 곁에 두세요.