RustBook - 3.5 Control Flow

숲사람·2022년 3월 23일
0

Rust

목록 보기
6/15

이 시리즈는 Rust Book을 공부하고 정리한 문서입니다. 댓글로 많은 조언 부탁드립니다.
Rust Book: https://doc.rust-lang.org/book/


모든 범위 블록은 고유의 값을 리턴할수있다. 블록 내에서 ; 로 끝나지않은 표현식이 리턴 값이 된다.

if 표현식

if 는 표현식이다 값을 리턴 할 수 있음.

if 조건 {}

    let number = 3;

    if number < 5 {
        println!("condition was true");
    } else {
        println!("condition was false");
    }
  • {} 블럭으로 묶이는 부분 수행
  • 조건문은 bool 타입 이어야함. 자동으로 형변환해주지 않는다. 아래와 같으면 컴파일 에러 발생.
let num = 3;
if num {
    ....
}

else if 는 다음과 같이 else if 조건 {} . 첫번째 참인 조건을 만나면 나머지 else if 및 else는 조건을 체크하지도 않는다.

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("number is divisible by 4");
    } else if number % 3 == 0 {
        println!("number is divisible by 3");
    } else if number % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}

표현식(Expression) 형식으로 let 구문에서도 if 사용해 바인딩 가능. 아래 5,6 에는 세미콜론이 없음에 유의.

    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

    println!("The value of number is: {}", number);

만약 아래와같이 if 와 else 블럭이 서로다른 타입을 리턴하면 컴파일 타임에 에러가 발생한다.

    let condition = true;

    let number = if condition {
        5
    } else {
        "six"
    };

loop

조건식 없는 반복문. loop 블럭과 break 로 탈출. 다른 반복문 for , while외에 loop가 필요한 이유는 loop가 표현식이기 때문이다. 값을 리턴할 수 있다.

fn main() {
    loop {
        println!("again!");
        break;
    }
}

break with a value

loop 표현식에서 값 리턴하기 break 이후에 나오는 값을 리턴할 수 있다. 세미콜론없는 표현식이 아니라 break 사용 유의.

break 로 값을 리턴하는것은 loop 에서만 사용 가능하다.

loop는 표현식이다 값을 리턴할 수 있다. break도 표현식이다. loop에 리턴값을 제공할 수 있다.

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("The result is {}", result);
}

while

while 은 loop 와 다르게 조건식이 있어야 한다. while 조건 {}

fn main() {
    let mut number = 3;

    while number != 0 {
        println!("{}!", number);

        number -= 1;
    }

    println!("LIFTOFF!!!");
}

for

for 변수 in 표현식
표현식 부분에 어떤 타입이 들어가는지 아직 애매. iterator가 올수 있다. 튜플은 안된다. (0..4) -> 0 1 2 3 까지 카운팅 되는 iterator(?)

fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a.iter() {
        println!("the value is: {}", element);
    }
}
profile
기록 & 정리 아카이브 용도 (보다 완성된 글은 http://soopsaram.com/documentudy)

0개의 댓글