함수 (Function)#

함수 정의#

함수는 다음과 같이 fn 키워드를 통하여 생성합니다.
함수를 정의하는 순서를 고려할 필요가 없으므로 Scope 어딘가에 정의되어 있으면 됩니다.
따라서 다음 예제 코드는 main() 함수 뒤에 hello() 함수가 위치하고 있으며 컴파일 및 실행이 정상적으로 수행됩니다.

fn main() {
    hello();
}

fn hello() {
    println!("hello");
}

매개변수 (Parameter)#

다음 예제 코드와 같이 함수를 호출 할 때 Parameter를 넘길 수 있습니다.
add 함수는 i64 타입의 ab 두 개의 Parameter를 받을 수 있습니다.
i64처럼 함수에서 Parameter를 받을 때 타입을 반드시 선언해야 합니다.
Parameter를 여러 개 전달 할 수 있습니다.

fn main() {
    add(1, 2);
}

fn add(a: i64, b: i64) {
    let sum = a + b;
    println!("{}", sum);
}

예제 코드를 하나 더 살펴 봅시다.
다음은 String 타입의 문자열을 Paramter로 넘기는 예제 코드 입니다.

fn main() {
    print_text("hello".to_string());
}

fn print_text(text: String) {
    println!("{}", text);
}

구문과 표현식 (statement and expression) 그리고 세미콜론 ( ; )#

Rust는 표현식 기반의 언어입니다.
Rust 는 세미콜론(;)의 사용법이 독특하므로 정확히 이해할 필요가 있습니다.
먼저, 구문과 표현식에 대하여 알아 봅시다.

다음 코드에서 let apple = 1;는 구문입니다.
어떤 코드를 수행 후 값을 Return하지 않는 명령을 구문이라 합니다.

fn main() {
    let apple = 1;
}

다음 코드에서 1+2는 표현식 입니다.
어떤 코드를 수행 후 값을 Return하는 것은 표현식이라 합니다.
1+2를 연산 후 3을 Return하게 됩니다.

fn main() {
    let banana = {
        1+2
    };
}

위 코드에서 일반적인 프로그래밍 언어와 다른점이 있음을 주목해야 합니다.
세미콜론(;)의 위치를 보면 1+2의 뒤에 위치하지 않고, 중괄호 } 뒤에 ;이 위치합니다.
표현식인 1+2는 값을 Return 해야 하므로 명령의 끝을 의미하는 ;을 사용하지 않습니다.
대신, let banana = { 1+2 }; 가 하나의 구문이 되므로 } 뒤에 ;을 코딩해야 합니다.

함수의 Return과 세미콜론 ( ; )#

함수에서 Return 하는 방법은 다음 코드의 apple() -> i64와 같이 -> 뒤에 Return type을 선언 해야 합니다.

fn main() {
    let banana = apple();
    println!("{}", banana);
}

fn apple() -> i64 {
    return 3;
}

다음 코드를 자세히 살펴 봅시다.
위 코드와 다른 점은 apple() 함수 안에 return;이 없어졌습니다.
Rust에서 이 코드는 문법적으로 알맞은 코드 입니다.
apple() 함수 안에서 숫자 3뒤에 ;이 없으므로 표현식이며, 이것은 숫자 3을 Return하는 것과 같습니다.
즉, 위 코드와 다음 코드는 같은 결과를 출력합니다.

fn main() {
    let banana = apple();
    println!("{}", banana);
}

fn apple() -> i64 {
    3
}

예제 코드를 하나 더 살펴 봅시다.
다음 코드에서 add() 함수 안에서 left + right에 세미콜론이 없으므로 표현식이기 때문에, left + right 연산한 값을 Return 합니다.

fn main() {
    let banana = add(1, 2);
    println!("{}", banana);
}

fn add(left:i64, right:i64) -> i64 {
    left + right
}

이처럼 Rust에서 ; 의 사용법은 독특합니다.
코드라인의 마지막에 무조건 ;을 사용하는 것이 아니라, 표현식을 정확히 이해하고 필요에 따라 ;을 사용해야 합니다.