1. 함수
Rust의 함수 선언 키워드는 ‘fn’입니다.
기본 형식은 다음과 같습니다.
fn 함수명(파라미터 : 파라미터 타입) -> 반환타입{
...
}
“fn 함수명(파라미터 : 파라미터 타입) -> 반환타입” 부분을 함수의 시그니처라고 합니다.
그 뒤의 {…} 부분은 함수의 몸체 (body)라고 합니다.
i32 타입의 정수를 파라미터로 받아서 10을 더해 반환하는 간단한 함수를 만들어 보겠습니다. 이름은 ‘add10’이라고 하겠습니다.
fn main() {
let mut x = add10(5); // 5를 파라미터 값으로 함수 호출
println!("{}", x);
}
// 함수 선언
fn add10(n:i32)->i32{
return n + 10;
}
// 출력
15
만약 반환값이 없다면 ‘->’ 부분을 생략하면 됩니다. 또는 ‘-> ()’을 사용해도 됩니다. 원래 ( )은 튜플을 표현 하는 기호입니다. 그래서 ( )은 빈 튜플을 의미 합니다. 하지만 반환값이 없음을 나타내기 위해서도 사용 됩니다. 빈 튜플 ( )을 유닛(unit)이라고 부르기도 합니다.
위에서 사용한 코드에 함수 하나를 추가해 보겠습니다.
show_this는 단순하게 String을 출력하는 함수입니다.
fn main() {
let mut x = add10(5);
show_this(x.to_string()); // 1
}
// 10을 더하는 함수
fn add10(n:i32)->i32{
return n + 10;
}
/// 문자엻을 출력하는 함수
fn show_this(s:String){
println!("{}",s);
}
// 1: add10 함수의 반환 타입이 i32이고 show_this 함수의 파라미터는 string 타입이기 때문에 변수 x를 to_string() 메소드로 변환 시켜 주었습니다. to_string 메소드는 String 타입으로 변환 시켜 주는 메소드 입니다.
add10 함수를 정의한 것을 다시 보겠습니다. 반환값이 있기 때문에 무엇을 반환할지 선언하는 부분이 있습니다. ‘return’ 키워드 뒤 부분입니다.
그런데 Rust에서는 함수 선언 부의 가장 마지막 줄을 자동으로 반환값으로 간주합니다. 그래서 ‘return’ 구문이 굳이 필요 하지 않습니다.
다만 마지막줄을 반환값으로 사용할 때는 “;”을 붙이지 않습니다.
다음 코드에서 여러 가지 반환값 스타일을 살펴 보겠습니다.
/// 10을 더하는 함수
fn add10(n: i32) -> i32 {
return n + 10; // return 사용
}
/// 5를 더하는 함수
fn add5(n:i32) ->i32{
n + 5 // 마지막줄 반환
}
/// 15를 더하는 함수
fn add15(n:i32) ->i32{
return n + 15 // return 사용, ";" 없음
}
/// 문자열을 출력하는 함수
fn show_this(s: String) {
println!("{}", s); // 반환값 없음
}
fn main() {
let mut x = add10(5);
show_this(x.to_string());
let mut x = add5(5);
show_this(x.to_string());
let mut x = add15(5);
show_this(x.to_string());
}
// 출력
15
10
20
새로 만든 add5, add15 함수의 선언부를 보면 add10 함수와는 조금씩 다릅니다.
다시 강조하지만, 선언부의 가장 마지막 줄이 반환값이 됩니다. 가장 마지막 줄을 반환값으로 사용 할 때는 ‘;’을 사용하면 안됩니다. 만약 사용하면 반환값이 없다는 에러가 납니다.
가장 마지막 줄에 return 문을 사용할 때는 ‘;’을 넣어도 되고 안 넣어도 됩니다. 가장 마지막 줄이고 ‘;’이 없다면, ‘return’ 키워드가 없더라도, 반환 값이라고 인식하기 때문입니다.
'Rust 입문' 카테고리의 다른 글
[Rust] Struct (0) | 2022.10.05 |
---|---|
[Rust] Closure (0) | 2022.10.05 |
[Rust] match (0) | 2022.10.02 |
[Rust] For (0) | 2022.10.02 |
[Rust] While (0) | 2022.10.02 |