『TRPL Ch 3. Common Programming Concepts』

Variables and Mutability

  • 러스트에서 변수(variable)는 기본적으로 불변(immutable)하다.
  • let num: i32 = 10 - 불변 변수 선언.
  • let mut num: i32 = 10 - 가변 변수 선언. mut 키워드를 붙인다.
  • const NUM: i32 = 10 - 상수 선언.
    • 항상 불변하기 때문에 mut 키워드를 사용할 수 없다.
    • 불변 변수와 다르게 상수는 상수 표현식으로만 초기화할 수 있다. 함수의 결과나 런타임 중 계산되는 값으로 초기화할 수 없다.
  • Shadowing: 새로 선언한 변수명이 이전에 사용한 변수명과 같다면 새 변수가 이전 변수를 ‘가린다’.
    fn main() {
        let x = 5;
        let x = x + 1;
        let x = x * 2;
    
        println!("The value of x is: {}", x); // The value of x is: 12
    }
    
    • 쉐도잉을 통해 변수를 재선언함으로써 타입을 바꿀 수 있다.

Data Types

  • 스칼라 타입 (Scalar types)

    • i8, i16, i32, i64, i128 - 8, 16, 32, 64, 128 비트 정수 타입.
    • f32, f64, f128 - 32, 64, 128 비트 부동소수점 타입.
    • bool - 불리언 타입.
  • 복합 타입 (Compound types)

    • let tup: (i32, f64, u8) = (500, 3.14, 1) - 튜플.
      • let (x, y, z) = tup처럼 전개할 수 있다.
    • let arr = [1, 2, 3, 4, 5] - 배열.
      • let arr: [i32; 5] = [1, 2, 3, 4, 5] - 타입과 길이 명시.
      • let arr = [3; 5] - [3, 3, 3, 3, 3]과 같다.
      • arr[0]처럼 접근한다. arr[index] 처럼 변수를 인덱스로 넘길 수는 없다.

Functions

  • fn main() { ... } 형식으로 함수를 선언한다.
  • 함수 바디는 statement와 expression을 담을 수 있다.
  • 중괄호를 이용하면 새로운 스코프를 만들 수 있다.
    let x = 5;
    let y = {
        let x = 3;
        x + 1
    };
    
  • x + 1 뒤에 세미콜론이 붙지 않은 이유는 이것이 expression이기 때문이다. 세미콜론을 붙이면 statement가 된다.
  • 함수를 값을 반환할 수 있다. 반환 값에 이름을 붙이지 않고 화살표 뒤에 타입만을 명시해도 된다.
    fn five() -> i32 {
        5
    }
    
  • 파라미터를 받을 수도 있다.
    fn plus_one(x: i32) -> i32 {
        x + 1
    }
    

Control Flow

  • if ... else if ... else를 지원한다.
  • if는 expression이기 때문에 let statement의 우변에 올 수 있다.
    let number = if condition {
        10
    } else {
        20
    };
    
  • loop - 프로그램을 종료하거나 break value를 걸기 전까지 블록을 반복한다.
  • while condition - 조건이 거짓이 될 때까지 블록을 반복한다.
  • for element in array - 컬렉션의 각 요소를 순회하며 블록을 반복한다.

이 문서를 인용한 문서