AI/Rust

[Rust] 조건문과 반복문 - let if, loop, match

mingchin 2024. 11. 19. 21:45
728x90
반응형

Rust의 기본적인 조건문과 반복문은 C 계열 언어와 거의 동일하다. 일부 C와 python이 조합된 것 같은.. Rust 만의 특성을 가지는 몇 가지를 살펴본다.

 

let if

변수를 지정하는 let과 조건 분기를 조합해서 아래와 같이 사용할 수 있다.

use std::io;

fn main() {
    println!("Please enter the temperature:");

    let mut input = String::new();
    io::stdin().read_line(&mut input)
        .expect("Failed to read line");

    let temperature: i32 = input.trim().parse()
        .expect("Please type a number!");

    let weather = if temperature > 25 {
        "hot"
    } else if temperature > 15 {
        "warm"
    } else {
        "cold"
    };

    println!("The weather is: {}", weather);
}

 

위와 같이 작성하고 실행해보면, 동적으로 입력된 stdin에 따라 "weather" 변수가 셋 중 하나로 할당된다.

loop

Rust는 while문이 존재함에도, 무한 루프를 정의하기 위한 "loop"가 따로 있다.

fn main() {
    let mut count = 0;

    let result = loop {
        count += 1;

        if count == 10 {
            break count * 2; // 루프를 종료하면서 값을 반환합니다.
        }
    };

    println!("The result is: {}", result);
}

 

특이한 점은 while/loop문 역시 동적 변수 할당이 가능하다는 점이다. loop를 돌다가 break하는 시점에 "result" 변수를 할당해 줄 수 있다. 리턴하고 싶은 값은 break 바로 뒤어 적어주면 된다.

 

match

 

C의 switch/case와 유사한 문법이 Rust에도 있다.

use std::io;

fn main() {
    loop {
        println!("Guess my favorite natural number:");
        let mut input = String::new();
        io::stdin().read_line(&mut input)
            .expect("Failed to read line");
        let number: i32 = match input.trim().parse() {
            // 예외 처리부
            Ok(num) => num,
            Err(_) => {
                println!("Please type a valid number!");
                continue;
            }
        };

        match number {
            1 => println!("It's my second favorite!"),
            2 | 3 | 5 | 7 | 11 => println!("This is a prime number, I love prime numbers"),
            13 => {
                println!("This is my favorite number!");
                break;
            },
            _ => println!("This is just a number."),
        }
    }
}

 

위와 같이 작성하면, 13을 맞힐 때까지 반복해서 숫자를 입력해야하는 무한 루프를 실행할 수 있다.

 

use std::io;

fn main() {
    println!("How old are you?:");
        let mut input = String::new();
        io::stdin().read_line(&mut input)
            .expect("Failed to read line");
        let age: i32 = match input.trim().parse() {
            // 예외 처리부
            Ok(num) => num,
            Err(_) => {
                println!("Please type a valid age!");
                return;
            }
        };

    let group = match age {
        0..=10 => "child",
        11..=20 => "teenager",
        21..=64 => "adult",
        _ => "senior",
    };

    println!("You are in the {} group.", group);
}

 

위와 같이 구성하면, "age"가 어떤 구간에 속하냐에 따라 조건 분기가 가능하다.

 

처음이라 좀 난해한 구석이 있지만.. 적응하고 나면 정말 가독성이 좋은 언어일 것 같다.

728x90
반응형