타나기
타나기 월드
타나기
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • ⚙️ Rust (20)
      • 👀 Tutorial (20)
    • 🗿 Embedded (11)
      • 🐧 OS for ARM (11)
    • 💻 Study (37)
      • 🧩 알고리즘 (37)
    • 🏄🏽‍♂️ Life (21)
      • 🍚 타나구루망 (20)
      • 💡 Light (1)

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타나기

타나기 월드

⚙️ Rust/👀 Tutorial

[Rust / 튜토리얼] 16. 러스트의 let if 의 사용법

2022. 6. 8. 23:49

if let을 사용한 흐름 제어

if let 문법은 if 와 let을 조합해 하나의 패턴만 매칭 시키고 나머지는 무시하는 방법이다. if let을 사용 하지 않는다면 아마 아래처럼 코딩 하게 될 것이다.

fn main() {
    let some: Option<i32> = Some(3);
    match some {
        Some(3) => println!("Three!!"),
        _ => (),
    }
}
Three!!

Some(3) 일때만 Three!! 를 출력하는 간단한 코드이다. 이외의 경우에는 아무런 동작도 하지 않는다. 그러기 위해서 _ => (), 코드를 추가해 주었는데, 이는 내가 필요하지 않는 부분 이기 때문에 작성하기가 매우 귀찮다. 러스트에선 이런 귀찮음을 해소하기 위해 if let 코드를 제공하고 있다. 이 코드를 이용해 위의 코드를 더 우아하게 바꿔보자

fn main() {
    let some: Option<i32> = Some(3);
    if let Some(3) = some {
        println!("Three!!");
    }
}
Three!!

if let은 =로 구분된 패턴과 표현식을 입력 받는다. some 변수가 Some(3) 이라면 뒤의 블록을 실행 하게 된다. 이건 보기엔 좋아 보인다. 하지만 앞에서 우리는 None 검사를 위해 match에서는 모든 경우를 빠짐없이 검사했다. if let은 이런 부분을 피할 수 있는 걸까?

러스트는 이 부분을 프로그래머에게 책임을 돌리고 있다. 너가 원한다면 써라! 정도가 되겠다. if let을 사용 하면서 모든 부분을 검사 하지 않는게 두렵다면 아래처럼 else를 이용해 보자.

fn main() {
    let some: Option<i32> = Some(5);
    if let Some(3) = some {
        println!("Three!!");
    } else {
        println!("NOOOOO!!");
    }
}
NOOOOOO!!

이건 선택의 문제이다. 작성자가 보기에 더 깔끔해 보이는 코드를 작성 하자. 버그만 없으면 됐지!

정리

최근 몇개의 글을 통해 enum 과 struct를 통해 프로그래머가 원하는 형식의 데이터 타입을 만들 수 있게 되었다. 그리고 Option<T>를 통해 에러 방지를 위해 러스트가 걸어놓은 제약들과 사용 방법들을 공부했다. 끝으로, match, let if 를 통해 enum이 가지고 있는 값들을 추출할 수 있게 되었다.

여기까지 보면, 러스트는 프로그래머에게 많은 자유도를 줌과 동시에 엄청나게 빡빡하게 검사한다. 자유 자재로 사용 하기까지 굉장히 난항이 예상되는 바 이다.

이제 기본적인 문법에서 벗어나 API, 모듈을 공부해 보자.

저작자표시 (새창열림)

'⚙️ Rust > 👀 Tutorial' 카테고리의 다른 글

[Rust / 튜토리얼] 18. 러스트의 public 과 private  (0) 2022.06.15
[Rust / 튜토리얼] 17. 러스트의 모듈 (mod)  (0) 2022.06.13
[Rust / 튜토리얼] 15. 러스트에서 match 를 이용한 분기.  (0) 2022.06.06
[Rust / 튜토리얼] 13. 러스트의 열거형과 Option, None 그리고 Some  (0) 2022.06.03
[Rust / 튜토리얼] 13. 러스트의 메소드.  (0) 2022.06.01
    '⚙️ Rust/👀 Tutorial' 카테고리의 다른 글
    • [Rust / 튜토리얼] 18. 러스트의 public 과 private
    • [Rust / 튜토리얼] 17. 러스트의 모듈 (mod)
    • [Rust / 튜토리얼] 15. 러스트에서 match 를 이용한 분기.
    • [Rust / 튜토리얼] 13. 러스트의 열거형과 Option, None 그리고 Some
    타나기
    타나기
    #include<all>

    티스토리툴바