Languages/RUST

[RUST] TRPL : Chapter6 - Enum & Match

odaebum 2024. 11. 28. 00:12
728x90

Chapter 6

열거형 enum

  • 열거형 값은 해당 변형 중 하나여야 한다.

      enum IpAddrKind {
          V4,
          V6,
      }
    
          let four = IpAddrKind::V4;
          let six = IpAddrKind::V6;
    • 같은 IpAddrKind 유형이기 때문에 매개변수로 모두 사용할 수 있다.
  • 열거형 변형에 모든 종류의 데이터를 넣을 수 있다.

      enum Message {
          Quit, //
          Move { x: i32, y: i32 }, //구조체
          Write(String), //String
          ChangeColor(i32, i32, i32), //튜플
      }

Option ( 아직 어려운 개념 )

  • 값이 존재하는 경우와 값이 존재하지 않는 경우로 나타낸다.
    • None 처리를 해주어야 한다.
    • 즉, null 포인터를 허용하지는 않지만, 값의 존재 여부를 명시적으로 처리해주어야 한다.

match

  • if 처럼 boolean값으로 평가될 필요없다. 어떤 유형이든 될 수 있다.

      enum Coin {
          Penny,
          Nickel,
          Dime,
          Quarter,
      }
    
      fn value_in_cents(coin: Coin) -> u8 {
          match coin {
              Coin::Penny => 1,
              Coin::Nickel => 5,
              Coin::Dime => 10,
              Coin::Quarter => 25,
          }
      }
    • Switch 구문 처럼 사용되는 것 같다.
  • match로 들어오는 값들 중 그 외 값들은 어떻게 처리할까? _ 로 처리하는 것을 볼 수 있다.

          let dice_roll = 9;
          match dice_roll {
              3 => add_fancy_hat(),
              7 => remove_fancy_hat(),
              _ => reroll(),
          }
    
          fn add_fancy_hat() {}
          fn remove_fancy_hat() {}
          fn reroll() {}

if let

  • match와 다르게 값이 한 패턴과 일치하면 코드를 실행시킴
  • 반환된 값을 바인딩함
  • else와 함께 사용하여 예외 처리를 할 수 있음.
728x90