Rust 프로그래밍, 숫자 추리 게임 예제

생성일
Oct 3, 2024 02:04 PM
태그
rust
프로젝트 생성
$ cargo new guessing
 
cargo.toml 파일에 rand crate 추가
... [dependencies] rand = "0.8.5"
 

코드

use rand::Rng; use std::{cmp::Ordering, io}; fn main() { println!("Guess the number!"); // thread_rng // OS가 seed를 정하고, 현재 스레드에서만 사용되는 난수 생성기 let secret_number = rand::thread_rng().gen_range(1..=100); loop { println!("Please input your guess:"); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); // guess 변수 섀도잉 String -> u32로. // parse 메서드는 Result 타입을 반환하며 Result는 Ok, Err를 가진 열거형. let guess: u32 = match guess.trim().parse() { Ok(num) => num, // 변환 성공시 u32 값 반환 Err(_) => continue, // 변환 실패시 루프의 처음부터 재실행 }; println!("Your guess: {guess}"); match guess.cmp(&secret_number) { // Ordering 열거형; Less, Greater, Equal 이라는 variant를 가짐. Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"); break; } } } }
 

실행

notion image
 

느낀점

  • Rust의 타입 추론도 매우 강력했다. 두번째 guess 변수의 타입을 u32로 변환하자 자동적으로 secret_number도 type assertion으로 u32로 바꿔준다. (guesssecret_numbercmp로 비교하고 있기 때문)
    • let secret_number = rand::thread_rng().gen_range(1..=100); loop { println!("Please input your guess:"); let mut guess = String::new(); io::stdin() .read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, }; println!("Your guess: {guess}"); match guess.cmp(&secret_number) {
  • 함수형 프로그래밍적인 특징을 갖추고 있어서 함수형 프로그래밍 스타일로 활용 가능할 것 같다.