μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Rust
- λ¬μ€νΈ νλ‘κ·Έλλ° κ³΅μ κ°μ΄λ
- μ€λΌν΄
- μκ³ λ¦¬μ¦
- μ°λΆν¬
- μ€λΌν΄DB
- μ΄μ체μ
- λ°μ΄ν° ν΅μ
- Reversing
- λ°μ΄ν°λ² μ΄μ€
- data communication
- μλ°
- μλ° κΈ°μ΄
- λ°±μ€
- μλ° κ°λ
- νμ΄μ¬ μ²Όλ¦°μ§
- ubuntu
- λ¬μ€νΈ μμ
- C
- Python challenge
- Operating System
- OS
- νμ΄μ¬ μκ³ λ¦¬μ¦
- java
- λ°±μ€ λ¬μ€νΈ
- Database
- νμ΄μ¬
- νμ΄μ¬ μ±λ¦°μ§
- λ¬μ€νΈ
- Python
Archives
- Today
- Total
IT’s Portfolio
[Rust] Start Rust (Day 12) - Enums and Pattern Matching [2] λ³Έλ¬Έ
Development Study/Rust
[Rust] Start Rust (Day 12) - Enums and Pattern Matching [2]
f1r3_r41n 2023. 2. 6. 14:11728x90
λ°μν
π¦ Rust Day 12
π³οΈ Enums and Pattern Matching
2οΈβ£ match νλ¦ μ μ΄ μ°μ°μ
match
ννμ :νλ¦ μ μ΄ μ°μ°μ(control flow operator)
- μΌλ ¨μ ν¨ν΄κ³Ό κ°μ λΉκ΅ν΄ μΌμΉνλ ν¨ν΄μ μ§μ λ μ½λλ₯Ό μ€νν¨
- ν¨ν΄μ 리ν°λ΄, λ³μ μ΄λ¦, μμΌλμΉ΄λλ₯Ό λΉλ‘―ν΄ λ€μν κ°μΌλ‘ κ΅¬μ± κ°λ₯
- π μ₯μ
- ν¨ν΄μ λν νλΆν ννλ ₯
- μ»΄νμΌλ¬κ° λͺ¨λ κ²½μ°μ μκ° μ²λ¦¬λκ³ μλμ§ νμΈν μ μμ
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
fn value_in_cents(coin: Coin) -> u32 {
match coin {
Coin::Penny => {
println!("Lucky Penny!");
1
},
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
fn main() {
let coin = Coin::Penny;
println!("{}", value_in_cents(coin));
}
// Result
// Lucky Penny!
// 1
- μ΄κ±°μμ κ° κ°μ ν΄λΉνλ ν¨ν΄μ
match
ννμμΌλ‘ μμ±ν¨ match
μif
λ μ μ¬μ±μ λμ§λ§ ν κ°μ§ ν° μ°¨μ΄μ μ΄ μμif
λ¬Έμ ννμμ λ°λμbool
μ 리ν΄ν΄μΌ νμ§λ§,match
μ°μ°μμ ννμμ μ΄λ€ νμ μ κ°λ μ¬μ©ν μ μμ
match
ννμμ μ€ν μμ μ κ° κ°μ§μ ν¨ν΄κ³Ό κ²°κ΄κ°μ μμλλ‘ λΉκ΅ν¨- ν¨ν΄μ κ°μ§λ νμν λ§νΌ μ μν μ μμ
- κ° κ°μ§μ μ°κ΄λ μ½λλ ννμ μ΄λ©° μΌμΉνλ κ°μ§μ ννμμ μ€νν κ²°κ΄κ° μ΄ μ 체
match
ννμμ 리ν΄κ° μ΄ λ¨
- ν¨ν΄ κ°μ§μ μ°κ΄λ μ½λκ° μ§§μ κ²½μ° μλ ν΅μμ μΌλ‘ μ€κ΄νΈλ₯Ό μ¬μ©νμ§ μμ
- ν¨ν΄ κ°μ§μμ μ¬λ¬ μ€μ μ½λλ₯Ό μ€ννκ³ μ νλ€λ©΄ μ€κ΄νΈ μ¬μ©
π€ κ°μ λ°μΈλ©νλ ν¨ν΄
match
ννμμ κ°μ§ ννμμ ν¨ν΄μ μΌμΉνλ κ°μ μΌλΆλ₯Ό λ°μΈλ©ν μ μμ
#[derive(Debug)]
enum UsState {
Alabama, Alaska, Arizona,
Arkansas, California, Colorado,
Florida, Kentucky, Ohio,
}
enum Coin {
Penny,
Nickel,
Dime,
Quarter(UsState),
}
fn value_in_cents(coin: Coin) -> u32 {
match coin {
Coin::Penny => {
println!("Lucky Penny!");
1
},
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter(state) => {
println!("State quarter from {:?}.", state);
25
},
}
}
fn main() {
let coin = Coin::Quarter(UsState::Ohio);
println!("{}", value_in_cents(coin));
}
// Result
// State quarter from Ohio.
// 25
Coin
μ΄κ±°μμ μ΄κ²κ°Quarter
μUsState
μ΄κ±°μλ₯Ό μΆκ°ν¨- ν¨ν΄μ
state
λ³μλ₯Ό μΆκ°νμ¬Coin::Quarter
μ΄κ²κ°κ³Ό λΉκ΅ν¨Coin::Quarter
μ΄κ²κ°μ΄ μΌμΉνλ©΄state
λ³μμλ μ΄κ²κ°μ΄ μ μ₯λUsState
μ΄κ±°μκ° λ°μΈλ©λ¨
π€ Option<T>
λ₯Ό μ΄μ©ν 맀μΉ
Option<T>
νμ μ΄Some(T)
κ°μ κ°μ§ λ κ·Έ μμ μ μ₯λ T κ°μ κΊΌλ΄ μ¬μ©ν μ μμmatch
ννμμ μ μ© κ°λ₯ν¨
fn plus_one(x: Option<i32>) -> Option<i32> {
match x {
None => None,
Some(i) => Some(i + 1),
}
}
fn main() {
let five = Some(5);
let six = plus_one(five);
let none = plus_one(None);
println!("{:?}\n{:?}", six, none);
}
// Result
// Some(6)
// None
- λ³μμ κ°μ΄ μ‘΄μ¬νλ©΄ κ·Έ κ°μ 1μ λνκ³ κ°μ΄ μ‘΄μ¬νμ§ μμΌλ©΄
None
리ν΄
π€ match
λ λ°λμ λͺ¨λ κ²½μ°λ₯Ό μ²λ¦¬ν΄μΌ νλ€
- λ¬μ€νΈμ ν¨ν΄ 맀μΉμ μλ²½ν΄μΌ ν¨
- κ°λ₯ν λͺ¨λ κ²½μ°λ₯Ό μ²λ¦¬ν΄μΌ ν¨
Option<T>
μ κ²½μ° λ¬μ€νΈκ°None
μ ν΄λΉνλ κ²½μ°λ₯Ό λͺ μμ μΌλ‘ μ²λ¦¬νλλ‘ κ°μ ν¨μΌλ‘μ¨ μ΄λ€ κ°μ΄ λκ°μμλ λΆκ΅¬νκ³ λ€λ₯Έ κ°μ κ°μ§κ³ μμ κ²μΌλ‘ μλͺ» μκ°νλ μΌμ λ°©μ§ν¨
π€ μ리μ§μ μ _
- λ¬μ€νΈλ λͺ¨λ κ²½μ°λ₯Ό λ€ μ²λ¦¬νκ³ μΆμ§ μμ λ μ¬μ©ν μ μλ ν¨ν΄λ μ 곡ν¨
fn main() {
let number = 6u8;
match number {
0 => println!("{}", number),
2 => println!("{}", number),
4 => println!("{}", number),
6 => println!("{}", number),
_ => (),
}
}
// Result
// 6
- λ³λμ μ²λ¦¬κ° νμνμ§ μμ λλ
_
μ리μ§μ μλ‘ λ체νλ©΄ λ¨_
ν¨ν΄μ λͺ¨λ κ°μ μΌμΉν¨μ μλ―Έ()
μ λ¨μν μ λκ°
match
ννμμ λ¨ νκ°μ§ κ²½μ°λ§ μ²λ¦¬ν΄μΌ ν λ μ¬μ©νκΈ°μλ λ€μ μ₯ν©ν¨
3οΈβ£ if let
μ μ΄μ©ν κ°κ²°ν νλ¦ μ μ΄
if let
ꡬ문μif
μlet
ꡬ문μ μ‘°ν©ν΄μ μ¬λ¬ κ²½μ° μ€ ν κ°μ§λ§ μ²λ¦¬νκ³ , λλ¨Έμ§λ κ³ λ €νκ³ μΆμ§ μμ λ μ²λ¦¬νλ λ¬Έλ²
fn main() {
let number = Some(3u8);
match number {
Some(3) => println!("Three!"),
_ => (),
}
}
// Result
// Three!
match
ννμμ μ΄μ©ν μ²λ¦¬ λ°©λ²
fn main() {
let number = Some(2u8);
if let Some(3) = number {
println!("Three!");
}
}
// Result
//
if let
λ¬Έλ²μ μ΄μ©ν μ²λ¦¬ λ°©λ²if let
λ¬Έλ²μ νλμ ν¨ν΄κ³Ό ννμμ λ±νΈ κΈ°νΈλ₯Ό μ΄μ©ν΄ μ‘°ν©ν¨match
ννμκ³Ό κ°μ λ°©μμΌλ‘ λμν¨
- ꡬ문μ μ§μ ν ν¨ν΄μ
match
ννμμ 첫 λ²μ§Έ ν¨ν΄μ ν΄λΉνλ©° ννμμ κ·Έ ν¨ν΄μ΄ μΌμΉν λ μ€νλ ννμμ match
ννμμ΄ μ 곡νλ λͺ¨λ κ²½μ°μ μλ₯Ό κ²μ¬νλ κΈ°λ₯μ νμ©ν μλ μμif let
λ¬Έλ²μ μ£Όμ΄μ§ κ°μ λν΄ νλμ ν¨ν΄λ§ κ²μ¬νκ³ λλ¨Έμ§ κ°μ 무μνλmatch
ννμμ λ μ½κ² μ¬μ©νκΈ° μνλ¬Έλ²μ νΈμμ₯μΉ(syntax sugar)
λΌκ³ μκ°
fn main() {
let coin = Coin::Penny;
let mut count = 0;
match coin {
Coin::Quarter(state) => println!("State quarter from {:?}.", state),
_ => {
count += 1;
println!("{}", count);
},
}
}
// Result
// 1
if let
ꡬ문μelse
ꡬ문μ ν΄λΉνλmatch
ννμμ_
ν¨ν΄
fn main() {
let coin = Coin::Penny;
let mut count = 0;
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}.", state);
} else {
count += 1;
println!("{}", count);
}
}
if let
ꡬ문μelse
ꡬ문μ ν¬ν¨ν μ½λ- νλ‘κ·Έλ¨μ λ‘μ§μ νννλ λ° μμ΄
match
ννμμ΄ λ무 μ₯ν©νκ² λ³΄μΈλ€λ©΄if let
ννμλ μ 곡λλ€λ μ μ κΈ°μ΅
Summary
- μ¬μ©μ μ μ νμ
μμ±
- λμ΄λ κ° μ€ νλλ₯Ό νννλ
μ΄κ±°μ
- λμ΄λ κ° μ€ νλλ₯Ό νννλ
- νμ
μμ€ν
μ΄ μ 곡νλ μ€λ₯ λ°©μ§ κΈ°λ₯
- νμ€ λΌμ΄λΈλ¬λ¦¬μ
Option<T>
νμ
- νμ€ λΌμ΄λΈλ¬λ¦¬μ
- μ΄κ²κ°μ΄ λ€λ₯Έ λ°μ΄ν°λ₯Ό ν¬ν¨νκ³ μμ λ κ° μΆμΆ
match
ννμif let
ννμ
728x90
λ°μν
'Development Study > Rust' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Comments