English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
함수는 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 키워드.