이 시리즈는 Rust Book을 공부하고 정리한 문서입니다. 댓글로 많은 조언 부탁드립니다.
Rust Book: https://doc.rust-lang.org/book/
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function.");
}
fn
키워드 사용함수 정의 형태를 함수의 시그니처 라고 부르는듯.
fn main() {
another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
println!("The value of x is: {}", x);
println!("The value of y is: {}", y);
}
변수명 : 타입
매개 변수와 타입을 같이 명시해야함.Statement 란 어떤 값을 리턴하지 않고 수행되는 명령이다. 가령 아래 let y = 6;
은 statement 이다.
fn main() {
let y = 6;
}
statement는 리턴값이 없기 때문에 아래와 같이 또 다른 let 으로 값을 할당할 수 없다. 아래 예제 처럼 let y = 6
는 statement 이기 때문에 리턴값이 없어 x 에 어떤값을 바인드 할 수 없다. 이것이 C 같은 언어와의 차이점이다. (int x = y = 6 가 가능한)
fn main() {
let x = (let y = 6);
}
error: expected expression, found statement ('let')
Expression은 마지막에 세미콜론이 없는 구문이다. 만약 어떤 표현에 세미콜론을 붙이면 그것은 Statement가 된다. 이 표현식은 {} 를통해서, 함수, 매크로르 통해서 return 될 수 있다.
let y = 6;
에서 6
은 6을 리턴하는 표현식이다. 함수, 매크로도 물론 표현식이다. {}
로 묶인 코드블럭 또한 표현식이다. 가령아래 에서 y 는 표현식 {}
으로 인해 어떤 값을 할당 받는다.
fn main() {
let x = 5;
let y = {
let x = 3;
x + 1
};
println!("The value of y is: {}", y);
}
여기서 {} 코드 블럭 까지만 표현식 부분이다 x + 1
이 리턴값이 된다. (세미콜론으로 끝나지 않은 문장)
let y = {
let x = 3;
x + 1
}; <- ;으로 마무리하여 let y = 값; 구문 완성
^
여기까지가 표현식 {}
함수의 리턴값은 함수 내 마지막 표현식
의 값이라고 생각하면 된다.
러스트에서는 이 리턴값의 타입을 함수 마지막 ->
이후 명시 한다. 리턴은 return
키워드를 사용할 수 도 있지만 암묵적으로 ;
없는 표현식을 반환한다.
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {}", x);
}
five() 함수는 let
구문도 없이 달랑 5만 있다. 이것은 러스트에서 완벽하게 허용되는 함수이다. five함수의 리턴값이 5이기 때문에 결국 let x = five();
는 let x = 5;
와 완벽하게 동일한 구문이 된다.
만약 함수에서 return 이나 표현식(expression)을 통해 값을 리턴하지 않으면 컴파일 에러가 발생하고 에러메시지에는 비어있는 튜플이 표현 된다.
error[E0308]: mismatched types
...
= note: expected type `i32`
found type `()`
여러값 리턴하기, 리턴타입에 튜플 사용.
fn func() -> (u32, f32) {
(20, 0.7)
}