🦔
Rust のデータ型の上限・下限の扱い方とその応用
はじめに
Rustには様々なデータ型が存在しますが、u8
、u16
あるいは i32
のように上限値と下限値がわからなくなることはないでしょうか。僕はめちゃくちゃあります。
いちいち調べるのも面倒なのでどうせならコード上で確認したい!そんな場合に有効な方法を簡単ですが紹介します。
u8::MAX, i32::MIN のように指定する
u8
やi32
などの数値系型の上限値、下限値には MAX
やMIN
を指定することが可能です。
これにより、上限値や下限値を簡単に知ることができます。
fn main() {
println!("型: u8 下限値: {} 上限値: {}", u8::MIN, u8::MAX);
println!("型: i8 下限値: {} 上限値: {}", i8::MIN, i8::MAX);
println!("型: u16 下限値: {} 上限値: {}", u16::MIN, u16::MAX);
println!("型: i16 下限値: {} 上限値: {}", i16::MIN, i16::MAX);
println!("型: u32 下限値: {} 上限値: {}", u32::MIN, u32::MAX);
println!("型: i32 下限値: {} 上限値: {}", i32::MIN, i32::MAX);
println!("型: u64 下限値: {} 上限値: {}", u64::MIN, u64::MAX);
println!("型: i64 下限値: {} 上限値: {}", i64::MIN, i64::MAX);
println!("型: usize 下限値: {} 上限値: {}", usize::MIN, usize::MAX);
println!("型: isize 下限値: {} 上限値: {}", isize::MIN, isize::MAX);
println!("型: f32 下限値: {} 上限値: {}", f32::MIN, f32::MAX);
println!("型: f64 下限値: {} 上限値: {}", f64::MIN, f64::MAX);
}
これらを実行して出力すると以下のようになります。
型: u8 下限値: 0 上限値: 255
型: i8 下限値: -128 上限値: 127
型: u16 下限値: 0 上限値: 65535
型: i16 下限値: -32768 上限値: 32767
型: u32 下限値: 0 上限値: 4294967295
型: i32 下限値: -2147483648 上限値: 2147483647
型: u64 下限値: 0 上限値: 18446744073709551615
型: i64 下限値: -9223372036854775808 上限値: 9223372036854775807
型: usize 下限値: 0 上限値: 18446744073709551615
型: isize 下限値: -9223372036854775808 上限値: 9223372036854775807
型: f32 下限値: -340282350000000000000000000000000000000 上限値: 340282350000000000000000000000000000000
型: f64 下限値: -179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 上限値: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
このようにざっと出力することができます。
RESTAPI やコマンドライン引数で受け取った値を判定する
単純に出力するだけならあまりユースケースとして物足りないと思いますが、
Rust で RESTAPI やコマンドライン引数を使って、上限値、下限値に達しているかどうか調べたいときにも有効かと思います。
以下の例はコマンドライン引数で値を引き受けた場合です。
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
let input = &args[1];
match input.parse::<u32>() {
Ok(value) => {
if value <= u8::MAX.into() {
println!("値 {} は u8 の範囲内です。", value);
} else {
println!("値 {} は u8 の範囲を超えています。", value);
}
}
Err(_) => println!("入力が無効です。"),
}
}
値を受け取って、それが妥当な数値であるかを判別するには、このように条件分岐を加えることができます。
おわりに
条件分岐で 上限値チェックをしたい場合、
if num < 255 {}
の書き方ではなく、if num < u8::MAX {}
のような書き方の方が個人的にはスマートで好きです。
ではでは!
Discussion