Rust:Data Types

Data Types - The Rust Programming Language

スカラー型(Scalar):4種類

  1. 整数型(Integer)
  2. 浮動小数点型(Floating-point)
  3. 真理値型(Boolean)
  4. 文字型(Character)

Integer Overflow

ランタイムエラーが発生した場合、debugモードでコンパイルした時はpanicを起こす。

fn main(){
    let x: u8 = "hello".len() as u8;
    let y: u8 = x + u8::MAX;
    println!("{}", y);
}

cargo run --releaseで実行すると、256から0に戻って処理をする。上記の場合はy=4となる。

wrapping_*()メソッド

--releaseと同じ挙動になる。

fn main(){
    let x: u8 = "hello".len() as u8;
    let y = x.wrapping_add(u8::MAX);
    println!("{}", y);
}
checked_*()メソッド

オーバーフロー時はNoneを返す。

fn main(){
    let x: u8 = "hello".len() as u8;
    match x.checked_add(u8::MAX) {
        Some(result) => println!("result: {}", result),
        None => println!("overflow"),
    }
}
overflowing_*()メソッド

結果とオーバーフローの有無をboolean型で返却する

fn main(){
    let x: u8 = "hello".len() as u8;
    let (result, overflow) = x.overflowing_add(u8::MAX);
    println!("result: {}, overflow: {}", result, overflow);
}
saturating_*()メソッド

オーバーフロー時に型の最小値または最大値を返す

fn main(){
    let x: u8 = "hello".len() as u8;
    let y = x.saturating_add(u8::MAX);
    println!("{}", y); //255を返す
}

add(足し算)の他に、sub: 引き算、mul: 掛け算、div: 割り算、neg: 符号反転(符号付き整数のみ)がある

複合型(Compound):2種類

  • タプル型(Tuple)
  • 配列(Array)