English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Rust 함수

함수는 Rust 언어에서 일반적으로 존재합니다.

이전 장에서는 Rust 함수의 기본 형식을 알 수 있습니다:

fn <함수이름> ( <매개변수> ) <함수체>

Rust 함수 이름의 이름 스타일은 소문자로 언더스코어로 분리된 것입니다:

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

실행 결과:

Hello, world!
Hello, w3codebox!

주의하십시오. 우리는 소스 코드의 main 함수 다음에 another_function을 정의했습니다. Rust는 함수를 어디서 정의했는지에 대해 관심이 없으며, 어디서든 정의할 수 있습니다.

함수 매개변수

Rust에서 함수를 정의하려면 매개변수가 있어야 하므로 매개변수 이름과 타입을 선언해야 합니다:

fn main() {
    another_function(5, 6;
}
fn another_function(x: i32, y: i32) {
    println!("x의 값: {}", x);
    println!("y의 값: {}", y);
}

실행 결과:

x의 값: 5
y의 값: 6

함수체의 문장과 표현식

Rust 함수체는 표현식으로 끝나는 일련의 문장(문장)으로 구성됩니다. 지금까지는 표현식이 문장의 일부로 사용된 함수만 봤지만, 표현식을 문장의 일부로 사용했습니다.

문장은 특정 작업을 수행하며 반환 값이 없는 단계입니다. 예를 들어:

let a = 6;

이 단계는 반환 값이 없으므로 다음 문장은 올바르지 않습니다:

let a = (let b = 2;

표현식은 계산 단계가 있으며 반환 값이 있습니다. 다음은 표현식입니다(사용되는 식별자가 이미 정의되어 있는 것을 가정합니다):

a = 7
b + 2
c * (a + b)

Rust에서는 {}로 포함된 블록 내에서 복잡한 표현식을 작성할 수 있습니다:

fn main() {
    let x = 5;
    let y = {
        let x = 3;
        x + 1
    };
    println!("x의 값: {}", x);
    println!("y의 값: {}", y);
}

실행 결과:

x의 값: 5
y의 값: 4

물론이죠, 이 프로그램에는 표현식 블록이 포함되어 있습니다:

{
    let x = 3;
    x + 1
};

그리고 블록 내에서 함수 문장을 사용할 수 있으며, 마지막 단계는 표현식입니다. 이 표현식의 결과 값은 전체 표현식 블록을 대표합니다. 이 표현식 블록은 함수 본체 표현식이라고 합니다.

주의: x + 1 선택되지 않으면, 그것은 하나의 문장이 됩니다!

이 표현식 블록은 유효한 함수 본체입니다. 그리고 Rust에서는 함수 정의가 내장될 수 있습니다:

fn main() {
    fn five() -> i32 {
        5
    }
    println!("five()의 값: {}", five());
}

함수 반환 값

이전에 나온 내장된 예제에서는 Rust 함수 선언이 반환 값 타입을 선언하는 방법을 보여주었습니다: 매개 변수 선언 후에 ->를 사용하여 함수 반환 값 타입을 선언합니다 (아니면 :이 아닙니다).

함수 본체에서 언제든지 return 키워드를 사용하여 함수 실행을 종료하고 타입에 맞는 값을 반환할 수 있습니다. 이는 대부분의 개발자 경험에 가장 가까운 방법입니다:

fn a: i32, b: i32) -> i32 {
    return a + b;
}

하지만 Rust는 자동 반환 값 타입 판단을 지원하지 않습니다! 함수 반환 값 타입을 명시적으로 선언하지 않으면, 함수는 "순수 프로세스"로 간주되고, 반환 값을 생성할 수 없으며, return 뒤에는 반환 값 표현식이 올 수 없습니다. 이렇게 하면 공개 함수가 명확한 보고서를 형성할 수 있습니다.

주의:함수 본체 표현식은 함수 본체와 동일하지 않으며, 사용할 수 없습니다 return 키워드.