if/else
if
문은 어떤 조건을 만족하는 경우, 그에 해당하는 코드를 실행하도록 논리적 분기를 만드는 방법입니다. 만일 조건이 만족되지 않으면 해당 분기의 코드는 실행되지 않고 넘어갑니다. 보통 if
문은 첫 번째 조건을 검사하는 부분인 if
와, 그 다음 조건을 만족하는지를 검사하는 else if
, 그리고 모두 해당되지 않는 경우에 실행되는 else
로 구성됩니다.
파이썬에서 if
문을 구현하면 다음과 같습니다. 항상 if
문은 if
라는 키워드로 시작합니다. 여기서는 변수 x
가 y
보다 작은지를 검사하고 있는데, x
는 1.0이고 y
가 10이기 때문에 조건이 만족됩니다. 조건이 만족되는 경우에는 아래에 있는 다른 조건들은 검사하지 않고 넘어가기 때문에 실행 결과는 "x is less than y"
가 출력됩니다.
x = 1.0
y = 10
if x < y:
print("x is less than y")
elif x == y:
print("x is equal to y")
else:
print("x is not less than y")
실행 결과
x is less than y
만일 x
의 값을 10으로 수정하고 다시 실행한다면 이번에는 "x is equal to y"가 출력될 것입니다.
러스트에서 동일한 코드를 작성해 보겠습니다. 여기서 몇 가지 다른 점이 있는데, 첫 번째로 x
와 y
를 조건문에서 바로 비교할 수 없습니다. 왜냐하면 두 변수의 타입이 다르기 때문에 둘 중 하나를 나머지의 타입으로 변환해 주어야 하기 때문입니다. 여기서는 y
를 f64
로 타입 변환을 해서 두 값을 비교하고 있습니다. 두 번째로는 파이썬의 elif
가 else if
로 바뀐 것입니다. 세 번째는 러스트는 스코프를 중괄호로 구분하고 있기 때문에, if문의 각 분기에 해당하는 코드를 중괄호로 묶어주고 있습니다.
fn main() { let x = 1.0; let y = 10; if x < (y as f64) { // casting println!("x is less than y"); } else if x == (y as f64) { println!("x is equal to y"); } else { println!("x is not less than y"); } }
실행 결과
x is less than y
실행 결과는 파이썬과 동일합니다.
let if
러스트에서는 if문의 각 분기를 변수에 바로 할당하는 것이 가능합니다. 방금 보았던 if문을 아래와 같이 바꿀 수 있습니다. 각 분기에서 문자열을 프린트했었는데, 프린트가 사라졌고 각 분기의 마지막에 붙어있던 세미콜론도 사라졌습니다. 그 다음 if문 전체를 result
라는 변수에다가 할당하고 있습니다.
fn main() { let x = 1.0; let y = 10; let result = if x < (y as f64) { "x is less than y" } else if x == (y as f64) { "x is equal to y" } else { "x is not less than y" }; println!("{}", result); }
실행 결과
x is less than y
실행 결과를 확인해보면 이전과 동일합니다. 그 이유는 if문의 각 분기에 해당하는 문자열들이 result
변수에 할당되기 때문인데, 위 코드에서는 첫 번째 조건인 x < (y as f64)
가 만족되기 때문에, 결국 위 if문은 아래와 동일합니다.
let result = "x is less than y";
주의해야 하는 점은 위처럼 let if
문을 쓰려면 각 분기에서 할당하는 값들이 모두 동일한 타입이어야 한다는 것입니다.
만일 if
를 함수에서 바로 리턴한다면, 다음과 같은 코드도 가능합니다.
fn check_password(password: i32) -> bool { if password == 1234 { true } else { false } } fn main() { let password = 1234; let result = check_password(password); println!("Result: {}", result); }