rust의 공식 문서를 참조해 작성함 https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html
러스트의 함수는 fn
키워드를 사용해 선언할 수 있으며 함수명은 snake case(how_to _name_of_functions) 방법을 이용해 만든다.
fn main() { print_labeled_measurement(5, 'h'); } fn print_labeled_measurement(value: i32, unit_label: char) <--parameter { println!("The measurement is: {}{}", value, unit_label); }
예시와 같이 main
함수가 print
함수보다 먼저 선언되어도 에러 없이 컴파일 된다. 해당 함수가 정의가 되기만 한다면 가능하다. 다수의 파라미터를 ,
구분을 통해 전달할 수 있으며 value : i32
와 같이 함수에서는 파라미터의 타입을 반드시 정의해주어야 한다.
러스트는 expression-based 언어로 statement와 expression의 구분이 중요하다. Statement는 특정한 동작을 수행하는 지시로 리턴 값이 존재하지 않는 반면 expression은 리턴 값이 존재한다. expression에 ;
를 붙이면 statement가 된다. 예를 들어, let y =6;
은 statement로 y에 6을 할당하며 리턴 값이 없다. 여기에서 expression은 6
으로 6은 정수 6의 값을 리턴하기 때문에 let y =6;
의 y에 값이 들어갈 수 있다.
fn main() { let x = (let y = 6); }
이 메인 함수는 컴파일 되지 않는데 그 이유는 let y =6
은 statement로 어떤 값도 리턴하지 않아 x에 값을 할당할 수 없기 때문이다. 함수를 부르거나 매크로를 부르는 것도 expression이며 {}
로 생성된 블럭도 expression이다.
fn main() { let y = { let x = 3; x + 1 <-- no semicolon }; println!("The value of y is: {}", y); }
여기에서 expression은
{ let x = 3; x + 1 }
이며 x+1에 세미콜론이 없기 때문에 값을 리턴하는 expression이 될 수 있다.
이와 비슷하게 함수에서 리턴 값이 있다면 세미콜론을 붙일 수 없다.
fn main() { let x = plus_one(5); println!("The value of x is: {}", x); } fn plus_one(x: i32) -> i32 { x + 1; <--- semincolon, so no return value causing error }
러스트에서 코멘트는 //
를 통해 쓸 수 있다.