파이썬·자바스크립트·자바·러스트로 프로그램을 작성해 봤다면 익숙한 문법을 토파즈와 비교해 보세요. 프로그래밍 기초를 다시 읽지 않고, 차이를 살펴 필요한 다음 실습을 고를 수 있습니다.
익숙한 계산 읽기
다음 함수는 과제 배열에 담긴 시간을 더합니다.
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, HashMap | Map에 키와 값을 저장합니다. 컬렉션과 컴프리헨션을 참고하세요. |
| 데이터를 묶는 클래스 | record로 필드를 묶고 함수로 그 레코드를 처리합니다. |
| 제네릭 코드의 인터페이스 | 함수의 입력·반환 타입과 정적 프로토콜로 필요한 연산을 정합니다. 프로토콜은 실행 중 동적으로 호출할 구현을 고르지 않습니다. |
복구할 수 있는 try/except 오류 처리 | Result를 반환하고 Ok 또는 Err를 처리합니다. |
| 결과가 없을 수 있는 조회 | Option<T>를 반환하고 Some 또는 None을 처리합니다. |
| null을 허용하는 외부 데이터 | T | null을 쓰고 null을 처리합니다. |
토파즈는 클래스 상속과 실행 중 프로그램 구조를 조사하는 리플렉션을 지원하지 않습니다. 제네릭 레코드 타입의 일부 필드를 정하지 않고 남겨 두는 행 다형성도 지원하지 않습니다. 데이터 구조의 자세한 규칙은 레코드와 명목 데이터에서 확인하세요. 숫자 타입도 암묵적으로 변환하지 않으므로 표현식의 int가 자동으로 float로 바뀌지 않습니다.
직접 해 보기
메모리에 있는 과제 목록에서 제목으로 과제를 찾는 함수가 있습니다. 찾는 과제가 없을 수도 있다면 어떤 반환 타입을 쓸까요?
정답
Option<과제>를 쓰세요. 찾았으면 Some(과제값), 없으면 None을 돌려줍니다. 파일 읽기처럼 작업 자체가 실패할 수도 있다면 그 오류는 Result로 표현하세요.
다음 실습 고르기
토파즈를 설치하고 파일을 실행하려면 첫 프로그램부터 시작하세요. 이미 해 봤다면 아래에서 필요한 주제를 고르세요.
이 예제들이 익숙해지면 첫 애플리케이션에서 하나로 합쳐 보세요. 작업 중 문법을 찾아볼 때는 문법 한눈에 보기를 곁에 두세요.