100 Exercises To Learn Rust - 5.5 nullability

목차

풀이

// TODO: `Ticket::assigned_to`를 Option을 리턴하도록 구현하세요.

...
#[derive(Debug, PartialEq)]
enum Status {
    ToDo,
    InProgress { assigned_to: String },
    Done,
}

impl Ticket {
   ...
    pub fn assigned_to(&self) -> Option<&String> {
        if let Status::InProgress {assigned_to} = &self.status {
            Some(assigned_to)
        } else {
            None
        }
    }

 

InProgress인 경우에는 assigned_to 값이 있지만, 다른 경우에는 해당 값이 없다.

 

러스트에는 값이 존재하지 않는 경우를 Null로 표현하지 않고 옵션으로 표현한다.

옵션은 열거형으로, SomeNone 배리언트가 있다.

값이 존재하는 경우에는 Some을, 그렇지 않은 경우에는 None이 된다.

 

열거형이기 때문에 None인 경우를 다루지 않는다면 컴파일 에러가 발생한다.

다른 언어라면 Null 값을 제대로 관리하지 않았을 경우 런타임 에러가 발생했을 지도 모르지만, 러스트에서는 컴파일 시에 이를 차단할 수 있다.