『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
- 컬렉션의 각 요소를 순회하며 블록을 반복한다.