Programming

Rust기초 알기 - 3.3 함수 정의와 호출

IT오이시이 2023. 6. 18. 23:28
728x90

 

 

Rust기초알기(3) - 기본 문법
3.1 변수와 데이터 타입
3.2 제어문 (조건문, 반복문)
3.3 함수 정의와 호출
3.4 모듈과 패키지
3.5 주석

[목차] Rust Programming - Rust 기초 알기 목차.Zip

#Rust프로그래밍  #Rust언어기초 #Rust기초문법 #Rust기초알기

 

 

Rust기초 알기 - 3.3 함수 정의와 호출

 

Rust 함수의 선언

Rust에서 함수를 선언할 때는` fn ` 키워드를 사용합니다. 일반적인 함수 선언의 구문은 다음과 같습니다:

fn 함수이름(매개변수1: 타입1, 매개변수2: 타입2, ...) -> 반환타입 {
    // 함수의 구현
    반환값
}

 

  • fn은 함수이름과 매개변수로 함수를 정의 합니다. 
  • 함수이름: 함수의 식별자로 사용되는 이름입니다.
  • 매개변수: 함수로 전달되는 값입니다. 각 매개변수는 이름과 해당하는 타입으로 선언됩니다.
  • 반환타입: 함수가 반환하는 값의 타입입니다. 반환값은 화살표(->)로 반환값의 타입을 지정합니다.
    반환 타입이 없을 경우에는 -> () 또는 ->을 생략할 수 있습니다. 
  • 중괄호는 컴파일러가 함수의 본문을 나타냅니다.
  • 반환 값이 없는 경우, 세미콜론(;)을 사용하여 구문이 종료됨을 명시합니다.
    반환할 값이 있는 경우, 해당 값을 세미콜론 없이 지정하여 반환합니다.

 

반환 값이 없는 함수

 
다음은 값을 Return 하지 않고 출력만 하는 경우로  반환되는 값을 지정하지 않았습니다.

fn add_numbers(x: i32, y: i32) {
    let sum = x + y;
    println!("Sum: {}", sum);
}

 

반환 값이 있는 함수

반환 값의 이름은 지정하지 않지만 화살표( ->) 다음에 해당 유형을 선언해야 합니다.
반환되는 값은 return키워드를 사용하고 값을 지정하여 함수에서 반환할 수 있지만 대부분의 함수는 암시적으로 마지막 문장을 반환식으로 사용합니다.
add_numbers 함수는 정수 x, y를 입력 받아 x + y 결과룰 Return하는 함수로  다음과 같이 작성 할 수 있습니다.
아래 sum 마지막 문장의 값이 반환되며 `;` 세미콜론을 사용하지 않습니다.
 

fn add_numbers(x: i32, y: i32) -> i32 {
    let sum = x + y;
    sum
}

 

문자열을 출력하는 함수 선언

 
다음은 문자열 슬라이스로 만든 함수의 예시 입니다.
문자열은 길이가 정해지지 않기 때문에 "문자열 슬라이스는 &str 타입으로 선언하는 점이 차이가 있습니다.

fn hello(name: &str) {
    println!("Hello, {}!", name);
}
  • fn hello(name: &str): 함수를 선언하는 부분입니다.
  • fn 키워드로 함수를 시작하여,  hello이라는 함수 이름을 사용합니다.
  • 괄호 안에는 매개변수인자로 &str 타입 name이 선언되었습니다.
  • &str은 문자열 슬라이스를 나타내는 Rust의 타입으로  크기가 없는 유연한 길이를 가지는 데이터를 참조합니다.
  • 함수의 반환값은 없이 출력만 하므로  반환 타입이 지정되지 않습니다.

 

문자열을 반환하는 함수 선언

다음은 문자열을 반환하는 함수로  변경하여 작성한 예시 입니다.
fn hello(name: &str) -> String  으로 반환되는 값을 String 문자형으로 선언 하였습니다.
반환하는 문장의 `greeting`은 `;` 세미콜론을 작성하지 않습니다.

// 문자열을 반환하는 함수
fn hello(name: &str) -> String {
    let greeting = format!("Hello, {}!", name);
    greeting
}

fn main() {
    let message = hello("Alice");
    println!("{}", message);
}

 
 

함수 컴파일 오류 예시 (세미콜론)

 
Rust 언어는 다른 언어와 달리 세미콜론으로 함수의 리턴 값인지 확인이 가능합니다.
아래 코드는 함수의 리턴 값인 `x + 1 ;` 에 세미콜론이 있어서  컴파일시 오류가 발생하는 경우 입니다.
파일 이름: src/main.rs

fn main() {
    let x = plus_one(5);

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

fn plus_one(x: i32) -> i32 {
    x + 1;
}

 

$ cargo run
   Compiling functions v0.1.0 (file:///projects/functions)
error[E0308]: mismatched types
 --> src/main.rs:7:24
  |
7 | fn plus_one(x: i32) -> i32 {
  |    --------            ^^^ expected `i32`, found `()`
  |    |
  |    implicitly returns `()` as its body has no tail or `return` expression
8 |     x + 1;
  |          - help: remove this semicolon to return this value

For more information about this error, try `rustc --explain E0308`.
error: could not compile `functions` due to previous error

 
함수의 정의에는 plus_one이 단위 유형 i32인 로  반환 된다고 선언이 되어 있지만 아무 것도 반환되지 않으며 이는 함수 정의와 모순되고 오류가 발생합니다.
아래와 같이 세미콜론을 제거하면 식은 x + 1함수의 반환 값이 됩니다. 함수가 호출되어 실행되면 입력 값에 1을 더하고 x결과 값을 출력으로 반환 합니다.

fn plus_one(x: i32) -> i32 {
    //x + 1;  세미콜론을 제거하여 리턴 값을 정의 합니다.
    x + 1
}

 

728x90
반응형