if Let
2023. 6. 3. 09:23ㆍLanguage/Rust
Rust에서는 if let 표현식을 통해 관심 있는 베리언트에만 매칭하고 다른 것을 무시 할 수 있습니다.
예를 들어 아래와 같이 String이 있을 때 물음표(?) 뒤의 second만 가져오는 예제가 있습니다.
fn main() {
let some_str = String::from("first?second");
let mut second_str = None;
match some_str.find('?') {
Some(i) => {
second_str = Some(&some_str[i + 1..]);
}
None => {}
}
}
위와 같이 second_str을 None으로 정의 후 '?'를 찾아 찾은 index + 1 ..을 통해 second라는 String을 가져 올 수 있습니다.
second_str을 출력하기 위해서는 아래 처럼 추가하면 됩니다.
fn main() {
let some_str = String::from("first?second");
let mut second_str = None;
match some_str.find('?') {
Some(i) => {
second_str = Some(&some_str[i + 1..]);
}
None => {}
}
match second_str {
Some(str) => {
println!("Find second str : {}", str);
},
None => {
println!("Not find second str!!");
}
}
}
1차 리팩토링(is_some())
사실 위 코드를 보면 match some_str.find('?')에서 None인 부분에 딱히 이후 로직이 필요 없어 넣지 않았습니다.
그래서 코드를 고치면 아래와 같이 is_some()을 통해 코드를 줄일 수 있습니다.
fn main() {
let some_str = String::from("first?second");
let mut second_str = None;
let find_index = some_str.find('?');
if find_index.is_some() {
let i = find_index.unwrap();
second_str = Some(&some_str[i + 1..]);
}
match second_str {
Some(str) => {
println!("Find second str : {}", str);
},
None => {
println!("Not find second str!!");
}
}
}
is_some()을 통해 None의 이후 로직을 없앴지만 아직 코드량이 많이 줄지 않았습니다.
2차 리팩토링(if let)
if let
표현식을 특정한 패턴과 일치하는지 확인하고 일치하는 경우에만 실행되는 로직을 만들 수 있습니다. 이를 통해 더 간결하고 가독성 있는 코드를 작성 할 수 있습니다.
fn main() {
let some_str = String::from("first?second");
let mut second_str = None;
if let Some(i) = some_str.find('?') {
second_str = Some(&some_str[i + 1..]);
}
match second_str {
Some(str) => {
println!("Find second str : {}", str);
},
None => {
println!("Not find second str!!");
}
}
}
결과
match some_str.find('?') {
Some(i) => {
second_str = Some(&some_str[i + 1..]);
}
None => {}
}
let find_index = some_str.find('?');
if find_index.is_some() {
let i = find_index.unwrap();
second_str = Some(&some_str[i + 1..]);
}
if let Some(i) = some_str.find('?') {
second_str = Some(&some_str[i + 1..]);
}
세 가지를 비교하면 코드량이 확실히 줄고 가독성이 즐가한 것을 알 수 있습니다.
'Language > Rust' 카테고리의 다른 글
Rust fmt 모듈 (0) | 2023.06.07 |
---|---|
Rust에서 RabbitMQ 사용하기 (WorkQueue) (0) | 2023.06.03 |
Rust의 Trait (0) | 2023.05.11 |
Rust 설치 및 VS Code 셋팅(Linux, Debian) (0) | 2023.04.26 |
Web Assembly 만들어 보기 (0) | 2023.04.15 |