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