본문 바로가기

Rust

[Rust]5. 흐름 제어 (조건문과 반복문)

흐름 제어(Control Flow)는 보통 조건문 반복문을 얘기합니다.

말그대로 프로그램의 흐름을 조건에 따라 달리 처리해줄수 있기 때문이죠.


1. 조건문 문법

Rust에서 조건문은 다른 언어와 거의 유사하나, 차이점을 짚어보겠습니다.

러스트에서 if문은 다음과 같이 사용합니다.

if 조건식{명령}

보시다시피 조건식에 소괄호를 쓰지 않는 점을 빼곤 C와 대동소이합니다


단, 이때 조건식의 반환값이 boolean인 Expression이어야합니다.

그냥 평범하게 사용할때는 크게 신경쓸 필요는 없습니다. 예를들어 짝수임을 판별하기 위해 조건식으로 number%2 == 0을 사용한다 쳐도, 별 문제가 없습니다.

그 이유는 조건에 대한 연산들 (==, <= , !=, >=, >, <, &&, || )로 이루어진 Expression의 리턴값이 boolean이기 때문이죠.


반면 이런 코드는 불가능합니다.

let a=1;

if a {}

보시다시피 a는 정수 1이지, boolean값인 true가 아닙니다.

따라서 해당 코드는 컴파일 에러가 발생합니다.


이제 else if, else를 살펴봅시다.

if 조건식1 {} 

else if 조건식2 {} 

else {}

앞서 언급했던 것처럼, 소괄호가 없다는 점과, 조건식의 타입이 boolean이어햐 한다는 점을 제외하고는 다른 언어와 동일합니다.


2. 조건문 Expression

조건문 또한 Expression입니다. 즉, 다음과같은 변수 선언이 가능합니다.

let condition=true;

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

이 코드에서 number은 5가됩니다. 조건이 true이기 때문에, 5가되는거죠.


하지만 다음과같은 코드는 불가능합니다.

let condition=true;

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

원인은, 러스트는 정적타이핑 언어이기 때문입니다.

만약에 이런 코드가 가능하다면, 조건식에 따라 조건문의 반환값의 타입이 달라집니다. (true일땐 정수, false일땐 문자열)

이는 정적 타이핑이 불가능하다는 의미기 때문에, 컴파일 에러를 발생시킵니다.


3. 반복문

러스트는 세가지 반복문이 있습니다. (loop,while,for)

일단 loop에 대해서 설명합니다.

3-1.loop
지극히 단순한 구조입니다.
loop {할일}
해당 블록을 무한 반복합니다.
즉, while(true)을 좀더 간략히 표현했다 생각하시면 됩니다.

if문이 Expression이었던것 처럼 loop또한 Expression입니다.
즉, 다음과같은 코드가 가능합니다.  (단 while, for는 불가능합니다)

let a=loop{break 1;};
이때 a는 1이됩니다.
loop문에서 반복을 중단하기 위한 break 1;에 있는 1이 loop Expression의 반환값이 됩니다.
따라서 a는 1이 되는것이죠.
(버전차이 때문에 ideone.com에서는 해당 코드가 작동하지 않습니다. )

3-2.while

while은 if와 거의 일치합니다. 조건은 괄호없이 boolean이 옵니다.

사용방법은 다음과 같습니다.


   while 조건 {할일}


3-3. for

러스트에서 for은 python의 for문과 유사합니다. 범위기반 반복을 기본으로 하고있거든요.

for number in (1..4){할일};

파이썬의 range(a,b)가 (a..b)에 해당합니다.
즉, 반복의 범위를 지정해줍니다. (1..4)의 경우, 범위는 1,2,3입니다.
위코드의 (1..4)로 반복문을 실행하는 경우, number=1, number=2, number=3에 대해 각각 순서대로 실행합니다.

만약, range의 순서를 역순으로 해야한다면 (1..4)를 (1..4).rev()로 대체해주면 됩니다. 
이 경우 number=3,number=2,number=1 순서로 실행을 합니다.

범위 기반이기 때문에, range대신에 배열 이터레이터를 사용할수 있습니다. 예를들면 다음과같습니다.
 let a = [10, 20, 30, 40, 50];
 for element in a.iter() {할일}
이 코드같은 경우에, element=10, element =20, element =30,element =40,element =50일때에 대해 각각 순서대로 실행해줍니다.




'Rust' 카테고리의 다른 글

[Rust]6. 소유권(Ownership)  (0) 2018.11.09
[Rust]4. 함수  (0) 2018.11.07
[Rust]3. 컴파운드 타입  (0) 2018.11.06
[Rust]2. 스칼라 타입  (0) 2018.11.06
[Rust]1. 변수와 상수  (1) 2018.11.05