함수의 동작



러스트의 코딩 관습 상 함수명은 스네이크 케이스를 따른다: 모두 소문자로 하되, 두 단어 사이는 언더스코어(_) 로 연결.


fn first_function() {

println!("The first function.");

}


함수가 선언된 순서에 관계없이 호출 가능: func1 -> func2 순서로 선언되어 있어도 func1 안에서 func2 호출 가능.



함수 파라미터


아래와 같은 방식으로 파라미터를 지정하며, 파라미터에는 반드시 타입을 지정해주어야 함.


fn my_function(x: i32, y: i32) {

println!("The value of x is: {}", x);

println!("The value of y is: {}", y);

}



함수 바디


스테이트먼트와 익스프레션


스테이트먼트는 어떠한 값도 반환하지 않음.

익스프레션은 값을 반환.


아래와 같이 let 키워드를 사용함은 스테이드먼트.


let y = 6;

위 코드는 변수 y 를 생성하고 값 6 으로 초기화 함.


let x = (let y = 6);

위 코드는 컴파일 에러가 발생함. 'let y = 6' 은 스테이트먼트. x 에 값을 대입하려면 오른쪽에는 값을 반환해야 하는데, let y = 6 은 스테이트먼트이기 때문에 어떠한 값도 반환하지 않음. 오직 익스프레션만이 값을 반환.


let y =6 에서의 6 은 익스프레션.

함수 호출은 익스프레션.

매크로 호출은 익스프레션.

중괄호 {} 로 묶인 새 스코프는 익스프레션.


아래 코드는 정상적으로 컴파일 됨.


let x = 5;


let y = {

let x = 3;

x + 1

};


println!("The value of y is: {}", y);


여기서 아래 코드에 주목.


{

let x = 3;

x + 1

}

위 코드는 익스프레션임. 실행 결과는 4. 

주목할 점: x + 1 에는 세미콜론이 없음. 여기에 세미콜론을 붙이면 러스트는 이를 스테이트먼트로 인식하고, 이 코드는 어떠한 값도 반환하지 않음.

이는 함수의 값 반환에도 그대로 적용됨.



함수의 값 반환


함수의 리턴 타입은 아래와 같이 오른쪽 화살표 옆의 타입으로 지정


fn five() -> i32 {

5

}

함수의 값 반환은 위와 같이 함수 바디의 마지막 값으로 이루어짐.

그런데 이전에 언급한대로, 아래와 같이 쓰면 컴파일 에러 발생.


fn five() -> i32 {

5;

}

세미콜론이 붙으면 5는 익스프레션이 아닌, 스테이트먼트가 됨.


return 키워드를 사용하는 경우는 다름.


fn my_number() -> i32 {

return 7;

5

}

return 키워드는 함수 중간에 함수를 종료하고 값을 반환함. 위의 함수는 정상적으로 컴파일되며 7 을 반환.






'Rust' 카테고리의 다른 글

컨트롤 플로우(루프)  (0) 2018.02.15
컨트롤 플로우(if 조건문)  (0) 2018.02.15
데이터 타입  (0) 2018.02.14
변수  (0) 2018.02.14
환경 잡기  (0) 2018.02.13

+ Recent posts