fn main() {
let x = 42;
if x < 42 {
println!("42보다 작다");
} else if x == 42 {
println!("42와 같다");
} else {
println!("42보다 크다");
}
}
loop
loop 무한 루프
break 루프 탈출
fn main() {
let mut x = 0;
loop {
x += 1;
if x == 42 {
break;
}
}
println!("{}", x);
}
while
while 조건이 false인 경우, 반복문 종료
fn main() {
let mut x = 0;
while x != 42 {
x += 1;
}
}
for
.. 연산자는 시작 숫자에서 끝 숫자 전까지의 숫자들을 생성하는 반복자 생성
..= 연산자는 시작 숫자에서 끝 숫자까지의 숫자들을 생성하는 반복자 생성
fn main() {
for x in 0..5 {
println!("{}", x);
}
for x in 0..=5 {
println!("{}", x);
}
}
match
switch 구문과 유사
match의 조건은 빠짐 없이 모든 케이스를 처리해야 함
match와 분해의 조합은 현재까지 Rust에서 가장 흔하게 사용하는 패턴
fn main() {
let x = 42;
match x {
0 => {
println!("0 발견");
}
// 여러 개 값과 대조할 수 있다
1 | 2 => {
println!("1 또는 2 발견!");
}
// 범위로 대조할 수 있다
3..=9 => {
println!("3에서 9까지의 숫자 발견");
}
// 찾은 숫자를 변수에 바인딩할 수 있다
matched_num @ 10..=100 => {
println!("10에서 100까지의 숫자 {} 발견!", matched_num);
}
// 모든 케이스가 처리되지 않았을 경우 반드시 존재해야 하는 기본 match
_ => {
println!("뭔가 다른거 발견!");
}
}
}
loop에서 값 리턴하기
loop에서 break과 동시에 값을 리턴
fn main() {
let mut x = 0;
let v = loop {
x += 1;
if x == 13 {
break "13 찾았다";
}
};
println!("loop에서: {}", v);
}
블록 표현에서 값 리턴하기
if, match, 함수, 그리고 범위 블록은 모두 고유의 값 리턴 방식을 갖고 있음
블록의 마지막 구문에 ;가 없다면 Rust는 그 값을 블록의 리턴 값으로 간주
if 구문을 간단한 3항 연산자처럼 쓸 수도 있음
fn example() -> i32 {
let x = 42;
// Rust의 3항 연산 표현
let v = if x < 42 { -1 } else { 1 };
println!("if로부터: {}", v);
let food = "햄버거";
let result = match food {
"핫도그" => "핫도그다",
// 리턴문 하나 뿐이라면 중괄호는 필수가 아님
_ => "핫도그가 아니다",
};
println!("음식 판별: {}", result);
let v = {
// 이 범위 블록은 함수 범위를 더럽히지 않고 값을 가져오게 해준다
let a = 1;
let b = 2;
a + b
};
println!("block에서: {}", v);
// Rust에서 함수 마지막에 값을 리턴하는 관용적 표현
v + 4
}
fn main() {
println!("function에서: {}", example());
}