Rust 놀이터
- Rust 놀이터 - 대화형 Rust 코딩 도구
변수
- 변수는
let
키워드를 사용하여 선언
- Rust는 대부분의 경우 변수의 자료형을 추론할 수 있으며, 추론이 불가능한 경우에는 변수 선언에 자료형을 추가해도 됨
- 동일한 이름의 변수에 여러 번 값을 할당할 수 있으며, 이를 변수 숨김(variable shadowing)이라고 함. 변수 숨김으로 자료형도 변경 가능
- 변수 이름은 항상
snake_case
형식으로 작성
fn main() { // rust가 x의 자료형을 유추합니다 let x = 13; println!("{}", x); // 자료형을 명시적으로 지정할 수도 있습니다 let x: f64 = 3.14159; println!("{}", x); // 선언 후 나중에 초기화도 가능하지만, 보통 그렇게 하진 않습니다 let x; x = 0; println!("{}", x); }
변수의 값 변경하기
- Rust에서는 변수의 변경 가능성에 대해 주의합니다.
- 값은 변경 가능(mutable)과 변경 불가(immutable) 두 가지로 구분됩니다.
- 변경 가능한 값은
mut
키워드로 표시됩니다.
fn main() { let mut x = 42; println!("{}", x); x = 13; println!("{}", x); }
기본 자료형
bool
- 참/거짓
u8
u16
u32
u64
u128
- unsigned interger 자료형
i8
i16
i32
i64
i128
- signed interger 자료형
usize
isize
- 메모리에 있는 값들의 인덱스와 크기
f32
f64
- 부동 소수점
(value1, value2, ...)
- 튜플(tuple)
[value1, value2, ...]
- 배열(array)
str
- 런타임에 길이가 정해지는 텍스트
텍스트는 다른 언어보다 복잡함 → Rust가 메모리 문제에 신경쓰기 때문
숫자형 자료형들은 숫자 뒤에 자료형 이름을 붙여 명시적으로 지정 가능 (ex>
13u32
, 2u8
)fn main() { let x = 12; // 기본적으로 i32 let a = 12u8; // 값 12, 자료형 u8 let b = 4.3; // 기본적으로 f64 let c = 4.3f32; // 값 3.4, 자료형 f32 let bv = true; let t = (13, false); // 튜플 let sentence = "hello world!"; println!( "{} {} {} {} {} {} {} {}", x, a, b, c, bv, t.0, t.1, sentence ); }
기본 자료형 변환
- 숫자형 자료형을 쓸 때 명시적으로 써야 함
u8
을u32
에 쓰면 Error!
as
키워드를 사용해 숫자형 자료형 변환
fn main() { let a = 13u8; let b = 7u32; let c = a as u32 + b; // let c = a + b; <- Error! println!("{}", c); let t = true; println!("{}", t as u8); }
상수
SCREAMING_SNAKE_CASE
- 상수의 이름 Naming Convention
- 변수와 달리, 상수는 반드시 명시적으로 자료형을 지정
- 상수는 컴파일 타임에 텍스트 지정자를 직접 값으로 대체
const PI: f32 = 3.14159; fn main() { println!( "아무 재료 없이 애플 {}를 만들려면, 먼저 우주를 만들어야 한다.", PI ); }
배열
- 배열의 자료형은
[T;N]
로 표현 T
: 자료형N
: 컴파일 타임에 주어지는 고정된 길이
[x]
연산자 → usize 형의 인덱스 (0부터 시작)
fn main() { let nums: [i32; 3] = [1, 2, 3]; println!("{:?}", nums); println!("{}", nums[1]); }
함수
fn (함수명)(파라메터1: 자료형, 파라메터2: 자료형, ...) -> 리턴값 자료형 {}
snake_case
- 함수 이름 Naming Convention
fn add(x: i32, y: i32) -> i32 { return x + y; } fn main() { println!("{}", add(42, 13)); }
여러개의 리턴 값
- 튜플(tuple)을 리턴함으로써 여러 개의 값을 리턴 가능
fn swap(x: i32, y: i32) -> (i32, i32) { return (y, x); } fn main() { // 리턴 값의 튜플을 리턴 let result = swap(123, 321); println!("{} {}", result.0, result.1); // 튜플을 두 변수명으로 분해 let (a, b) = swap(result.0, result.1); println!("{} {}", a, b); }
아무것도 리턴하지 않기
- 함수에 리턴형을 지정하지 않은 경우 빈 튜플을 리턴 →
unit
이라고도 함
- 빈 튜플은
()
로 표현
fn make_nothing() -> () { return (); } // 리턴 자료형은 ()로 암시 fn make_nothing2() { // 리턴할 것이 지정되지 않으면 이 함수는 ()를 리턴함 } fn main() { let a = make_nothing(); let b = make_nothing2(); // 아무 것도 없는 것은 출력하기 힘들기 때문에 // a와 b의 디버그 문자열을 출력한다 println!("The value of a: {:?}", a); println!("The value of b: {:?}", b); }
The Rust Programming Language 링크
- 1.2 Hello, World!
- 3.1 변수와 가변성
- 3.2 데이터 타입
- 3.3 함수