Rust

Rust 함수 작성법

초코민트냠냠 2022. 10. 12. 10:39
반응형

함수

러스트에서 함수를 선언할 때는 fn 키워드를 사용합니다. 러스트는 변수명이나 함수명을 snake case로 작성합니다. 

 

fn main() {
    println!("Hello, world!");

    another_function();
}

fn another_function() {
    println!("Another function.");
}

 

함수는 매개변수(parameter)를 가질 수 있습니다. 매개변수의 타입을 명시적으로 선언해야합니다. 

 

fn main() {
    another_function(5);
}

fn another_function(x: i32) {
    println!("The value of x is: {}", x);
}

 

another_function의 매개변수 xi32타입입니다.

 

구문과 표현식

여기서부터가 중요합니다. 함수 본문은 표현식(expression)으로 끝나는 구문(statement)의 나열로 되어 있습니다.

 

러스트는 표현식 기반의 언어이기 때문에 구문과 표현식의 구분을 할 수 있어야 합니다.

 

간단히 말하면 구문은 값을 반환하지 않고 표현식은 값을 반환합니다.

 

fn main() {
    let y = 6;
}

 

여기서 let y = 6;은 구문입니다. 함수 정의도 구문입니다. 왜냐하면 값을 반환하지 않기 때문이죠. (여기서 6은 표현식입니다. 구문 안에 표현식이 들어있는 것이죠.)

 

따라서 다음과 같은 코드를 실행하면 에러가 납니다.

 

fn main() {
    let x = (let y = 6);
}

 

let y = 6은 구문이기 때문에 반환값이 없어 x에 바인딩 할 수 없기 때문입니다.

 

하지만 아래는 실행 가능합니다.

 

fn main() {
    let x = 5;

    let y = {
        let x = 3;
        x + 1
    };

    println!("The value of y is: {}", y);
}

중괄호 안에 x + 1은 표현식으로 4를 리턴합니다. 자세히 보면 세미콜론을 쓰지 않았는데요, 세미콜론이 없어야  값을 반환하게 됩니다. 세미콜론을 붙이면 구문이 되어 값을 반환하지 않게 됩니다.

 

따라서 함수에서 값을 반환하려면 함수의 마지막 줄에 세미콜론이 들어가지 않은 표현식을 쓰면 됩니다.

 

fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1
}

 

여기서 plus_one 함수 내부에 x + 1 뒤에 세미콜론을 붙이면 값을 리턴하지 않게 되어 에러가 발생합니다.

반응형