798 단어
4 분
조건문
if / else
if문은 if bool 형태로 작동합니다.
만약 bool 값이 true라면 아래 코드가 실행되며, 아니면 else 쪽의 코드가 실행됩니다.
fn main() { let a = 0; if a == 0 { print!("a는 짝수도 홀수도 아니야!"); } else if a % 2 == 0 { print!("a는 짝수야!"); } else { print!("a는 홀수야!"); }}if는 표현식
러스트에서 if는 표현식(Expression) 이라서 값을 반환할 수 있습니다.
즉, if 전체를 변수에 바로 대입할 수 있습니다.
fn main() { let a = 5; let msg = if a % 2 == 0 { "짝수" } else { "홀수" }; println!("{}", msg);}match / if let
match와 if let 둘 다 패턴을 사용합니다.
패턴에 대한 자세한 설명은 아래에 있습니다.
if let
if let pattern = value 형식으로 쓰이며,
value가 패턴과 일치한다면 아래 코드가 실행되고, 아니면 else문이 실행됩니다.
fn main() { let a = Some(1121); if let Some(x) = a { println!("The value is: {}", x); } else { println!("No value found"); }
if let None = a { println!("No value found"); } else { println!("The value found"); }}if let은 match의 축약형
사실 if let은 match를 간단히 쓰는 방법입니다.
let a = Some(10);
// if letif let Some(x) = a { println!("value: {x}");}
// 같은 의미의 matchmatch a { Some(x) => println!("value: {x}"), _ => {}}match
if let과 다르게 많은 패턴을 매칭시켜야 한다면 match를 사용합니다.
fn main() { let a: i32 = 10; match a { x @ 0..=10 => { // @ 바인딩 println!("0~10사이: {}", x) } x @ _ => { println!("다른 값: {}", x); } }}match는 모든 경우를 처리해야 함
러스트의 match는 빠짐없이 모든 경우를 처리해야 합니다.
그래서 _ 와일드카드를 자주 사용합니다.
let a = 42;match a { 0 => println!("zero"), 1 | 2 => println!("one or two"), _ => println!("그 외 값"), // 없으면 컴파일 에러}pattern
패턴은 기본값, range, or, enum, @ 바인딩, 와일드카드(_), 구조체/튜플 분해 등을 사용해 표현됩니다.
range
특정 값 사이에 있는지를 검사할 때 사용됩니다.
- 0~10 사이의 값 →
0..=10 - a~c 사이의 값 →
'a'..='c'
let c = 'b';match c { 'a'..='c' => println!("a~c 사이"), _ => println!("그 외"),}or
| 연산자를 사용합니다.
match 10 { 1 | 10 => println!("1 또는 10"), _ => println!("그 외"),}enum
enum 안의 값을 꺼낼 수 있습니다.
let a = Some(7);match a { Some(x) => println!("값: {}", x), None => println!("값 없음"),}와일드카드 _
모든 값과 매칭됩니다.
match 100 { 1 => println!("1"), _ => println!("그 외 모든 값"),}구조체 / 튜플 분해
패턴 매칭으로 내부 값을 쉽게 꺼낼 수 있습니다.
struct Point(i32, i32);
fn main() { let p = Point(3, 7); match p { Point(x, 0) => println!("x축 위에 있음: {x}"), Point(0, y) => println!("y축 위에 있음: {y}"), Point(x, y) => println!("좌표 ({x}, {y})"), }}@ 바인딩
패턴에 매칭된 값을 변수에 바인딩해서 사용할 수 있습니다.
fn main() { let a = 7; match a { x @ 1..=10 => println!("1~10 사이, 값은 {x}"), _ => println!("그 외 값"), }}