Victoree's Blog

[1] Rust의 데이터 타입과 함수 본문

Rust

[1] Rust의 데이터 타입과 함수

victoree 2023. 2. 16. 00:05
728x90

1. DataType:: [Scala와 Compound]

1) Scala

  • 하나의 값으로 표현되는 타입
  • 정수형, 부동소수점 숫자, boolean, 문자

* signed / unsigned int

  • signed 변수 : -(2^(n - 1)) 부터 2^(n - 1) - 1까지 표현 가능
  • unsigned 변수 : 0부터 2^n -1까지 표현 가능

* 부동소수점

fn main() {
    let x = 2.0; // Default가 f64

    let y: f32 = 3.0; // f32
}

2) Compound

  • Array (각 요소가 다 같은 타입), Tuple (다른 타입의 값들을 하나로 묶을 수 있음)
  1. Array
    배열을 고정된 길이를 갖으며, 한번 선언되면 크기는 커지거나 작아지지 않음
  2. Tuple튜플은 compound로 고려되었기 때문에, 해당 변수는 튜푤 전체가 bind됨. 개별 값을 밖으로 빼내오려면, 패턴매칭을 통해 투푤을 구조해제하면 됨.
  3. let tup: (i32, f64, u8) = (500, 6.4, 1); let (x, y, z) = tup; println!("The value of y is: {}", y);

2. Function

  • void인 경우 return type을 () 로 명시함
  • Rust의 대부분의 코드는 표현식이며, 이는 어떤 값을 return 함
    • let x = (let y = 6);
    • C 나 Ruby의 경우, (let y = 6) 에 반환값이 있기에 위 코드가 문제 없이 동작하지만(x에 6이 대입됨), Rust에서는 반환값이 없어서 버그가 발생함.
fn main() {
    let x = 5;

    let y = {
        let x = 3;
        x + 1 // 세미콜론이 없는 경우, 이를 반환함
    };

    println!("The value of y is: {}", y);
}
  • 표현식이 세미콜론으로 끝나게 되면, 이는 구문으로 변경되어 반환값이 없어져 표현식이 아니게 됨.

* Function Overloading

  • 오버로딩은 지원되지 않음
    • 고정된 갯수의 파라미터를 가지고, 한가지 셋의 파라미터 타입을 가짐.
    • Default 벨류를 지원하지 않음
// 하지만 함수의 파라미터는 generic 할 수 있음
fn pick_one<T>(a: T, b: T) -> T {
    if std::process::id() % 2 == 0 { a } else { b }
}

fn main() {
    println!("coin toss: {}", pick_one("heads", "tails"));
    println!("cash prize: {}", pick_one(500, 1000));
}
728x90
Comments