콘텐츠로 이동
Xen / docs

문서 검색

한국어 · v0.1.0-demo.2

검색어를 입력하세요.

    EN
    Xen / reference v0.1.0-demo.2

    문법과 자주 만나는 문제

    코드를 작성하다 문법이 기억나지 않을 때 찾아보는 페이지입니다. 각 주제의 상세한 설명과 실행 코드는 연결된 장에 있습니다.

    원하는 작업쓰는 형태읽을 장
    값 이름 붙이기let name: Type = value;변수와 값
    바꿀 수 있는 변수let mut name = value;변수와 값
    함수 선언fn name(x: Int) -> Int { return x; }함수
    조건 값if condition { yes } else { no }함수와 반복
    범위 반복for item in start..end { ... }함수와 반복
    조건 반복while condition { ... }함수와 반복
    배열처럼 값 나열[first, second], Vec<T>컬렉션
    구조체 선언·생성struct User { name: String }, User { name: "Mina" }타입
    여러 형태의 값enum State { Idle, Ready(Int) }타입
    형태별로 선택match value { Pattern => result, ... }타입
    튜플 나누기let (left, right) = pair;타입
    제네릭fn identity<T>(value: T) -> T { return value; }제네릭
    원본 참조&value, &mut value, *reference소유권
    실패 전달fallible_call()?오류 처리
    프로젝트 파일 사용module app;, import folder.module as short;모듈
    표준 모듈 사용use std.string as text;표준 라이브러리
    테스트 선언test fn name() { assert(condition); }테스트

    함수·구조체·enum·impl은 파일 최상위에 선언합니다. 값과 문장은 함수 안에 씁니다. 문장에는 ;을 붙이고 값으로 쓰는 if·match의 마지막 표현식은 붙이지 않습니다. 주석은 //만 지원하며 블록 주석은 없습니다. 이름과 문자열은 대소문자를 구분합니다.

    정수는 I8I64 및 U8U64, 실수는 F32, F64입니다. Int = I64, Float = F64입니다. 숫자 리터럴은 10진수이며 실수는 1.25, 1e3처럼 쓸 수 있습니다. 숫자 사이의 _와 16진수 리터럴 문법은 없습니다.

    우선순위는 높은 것부터 호출·필드·색인·?, 단항 -·!·&·*, * / %, + -, < <= > >=, == !=, &&, ||입니다. 헷갈리면 괄호를 사용하세요. 문자열에는 +, ==, !=를 사용할 수 있습니다. 벡터의 비교는 비교 가능한 숫자·Bool·String·중첩 벡터 원소에 한해 지원합니다. 구조체와 enum에는 ==가 없습니다.

    상황수정
    빈 벡터의 타입을 알 수 없음let values: Vec<Int> = [];처럼 타입 추가
    변경할 수 없는 변수변경해야 한다면 let mut으로 선언
    서로 다른 숫자 타입i32(...) 등으로 명시적으로 변환
    빠진 match 갈래빠진 enum 형태를 추가하거나 적절한 _ 사용
    제네릭 타입 추론 실패인자에 타입 정보를 주거나 모든 타입 인자 명시
    빌린 값 변경참조의 마지막 사용 이후 변경
    이미 이동한 값 사용새 소유자를 사용하거나 이동 전에 필요한 정보 읽기
    모듈을 찾을 수 없음시작 파일 기준 경로와 module 이름 확인
    범위 밖 원소 읽기접근 전 길이 검사

    이동한 값을 사용하는 다음 코드는 의도적인 오류입니다.

    fn main() {
    let original = box(42);
    let transferred = original;
    println(original.into_inner());
    }
    터미널 창
    xen check move_error.xen

    moved를 포함하는 오류가 납니다. 마지막 줄을 println(transferred.into_inner());로 바꾸면 42를 출력합니다.

    현재 클로저·trait·예외·async·FFI·패키지 관리 기능은 없습니다. 참조 반환, 가변 Slice, 문자열 색인, match guard도 지원하지 않습니다. 다른 언어의 문법을 그대로 쓰기보다는 해당 장에서 설명한 함수·반복·Result를 사용하세요.

    직접 원시 메모리나 운영체제 호출을 다루는 bb 기능은 일반적인 프로그램 작성에 필요하지 않습니다. 파일·입출력·경로 작업은 표준 라이브러리 API를 사용하세요.