0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rustのスカラー型と複合データ型とその他の型

Posted at

Rustのスカラー型と複合データ型

Rustにはスカラー型と複合データ型とその他の3種類のデータ型が存在します。

スカラー型

スカラー型は単一の値を持つ基本的なデータ型です。

整数型(Integers)

  • 符号付き整数(i8, i16, i32, i64, i128, isize
  • 符号なし整数(u8, u16, u32, u64, u128, usize
let x: i32 = 42;
let y: u8 = 255;

浮動小数点型(Floating-Point Numbers)

  • f32(単精度浮動小数点数)
  • f64(倍精度浮動小数点数)
let x: f32 = 3.14;
let y: f64 = 2.718281828459045;

論理型(Booleans)

bool(trueまたはfalseの値を取る)

let is_active: bool = true;
let is_admin: bool = false;

文字型(Characters)

char(Unicodeのスカラ値を表す。1つの文字は4バイトで表現される)

let letter: char = 'A';
let emoji: char = '😊';

複合データ型

複合データ型は複数の値をまとめて扱うデータ型です。

タプル(Tuples)

異なる型の値をまとめて1つのグループとして扱う

let tup: (i32, f64, char) = (500, 6.4, 'Z');
let (x, y, z) = tup;
println!("The value of y is: {}", y);

配列(Arrays)

同じ型の値を固定長でまとめて扱う

let a: [i32; 3] = [1, 2, 3];
let first = a[0];
let second = a[1];

ベクター(Vectors)

同じ型の値を可変長でまとめて扱う(標準ライブラリのVec型を使用)

let mut v: Vec<i32> = Vec::new();
v.push(1);
v.push(2);
v.push(3);
println!("The second element is: {}", v[1]);

構造体(Structs)

複数の関連する値をひとつのグループにまとめて表現する

struct Person {
    name: String,
    age: u8,
}
let person = Person {
    name: String::from("Alice"),
    age: 30,
};
println!("{} is {} years old", person.name, person.age);

列挙型(Enums)

特定の値の集合を定義し、それらの値を1つの型として表現する

enum IpAddrKind {
    V4,
    V6,
}
let four = IpAddrKind::V4;
let six = IpAddrKind::V6;

その他のデータ型

その他の型は標準ライブラリで提供されるデータ型や、より複雑なデータ型を含みます。

文字列型(String Types)

Rustには主に2種類の文字列型があります。

文字列スライス(String Slices): &str

let s: &str = "Hello, world!";

String: 可変で所有権を持つ文字列型

let mut s: String = String::from("Hello");
s.push_str(", world!");

オプション型(Option Type)

オプション型は値が存在するかどうかを表現します。
値が存在する場合はSome、存在しない場合はNoneを使用します。

let some_number: Option<i32> = Some(5);
let absent_number: Option<i32> = None;

結果型(Result Type)

結果型は操作が成功したか失敗したかを表現します。成功の場合はOk、失敗の場合はErrを使用します。

use std::fs::File;
use std::io::ErrorKind;

fn main() {
    let f = File::open("hello.txt");

    let f = match f {
        Ok(file) => file,
        Err(error) => match error.kind() {
            ErrorKind::NotFound => match File::create("hello.txt") {
                Ok(fc) => fc,
                Err(e) => panic!("Problem creating the file: {:?}", e),
            },
            other_error => panic!("Problem opening the file: {:?}", other_error),
        },
    };
}

型エイリアス(Type Aliases)

型エイリアスは既存の型に別名を付けるための機能です。

type Kilometers = i32;

let x: Kilometers = 5;

ジェネリック(Generics)

ジェネリックは、具体的な型に依存しないコードを記述するための機能です。関数や構造体に対して使用できます。

fn largest<T: PartialOrd>(list: &[T]) -> &T {
    let mut largest = &list[0];
    for item in list {
        if item > largest {
            largest = item;
        }
    }
    largest
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?