🦀

100日後にRustをちょっと知ってる人になる: [Day 81]書籍: Rust プログラミング完全ガイド その5

2022/12/08に公開

Day 81 のテーマ

Day 79 までに Rust の書籍の Rustプログラミング完全ガイド の 1 章から 7 章までを読み終わりました。

今週中にこの書籍を読み終えようとおもっているのですが、今日はどこまで読み進められるでしょうか。というわけで、読んでいきたいと思います。

第10章 ジェネリックな関数や型を定義する

この章での内容:

  • ただ 1 つの関数定義で呼び出しによって各種のデータ型を処理できるようにする豊富お
  • ジェネリック関数が使う方の指定を型推論によって省略する方法
  • 構造体やタプル構造体や列挙の型を、ただ 1 回書くだけで個々のインスタンスが別々のデータ型を格納できるようにする方法
  • Option と Result という 2 種類の重要な標準ジェネリック列挙体の使い方。Option は選択可能なオプションを表現する。Result は失敗の有無と関数の実行結果を表す
  • 標準関数を使って OptionResult の処理を容易にする方法

ジェネリック関数についてメモ

型パラメータT 使っての関数の定義がジェネリック関数です。使用する時に具体的な型を指定、または型推論により型を指定します。

fn f<T>(param: T) ->T {
    param
}

let a = f(1);
let b = f(1.2);
let c = f("string");

println!("{:?}", a);
println!("{:?}", b);
println!("{:?}", c);

ジェネリック構造体についてメモ

型パラメータをジェネリックな構造体として使用する事もできます。

struct S<T1, T2> {
    n1: T1,
    n2: T2,
}

let a = S {
    n1: 1,
    n2: 'a',
};

Option<T> 列挙体についてメモ

Option<T> は以下のように定義されています。

enum Option<T> {
    Some(T),
    None,
}

これは、何か T 型であるものを返すか、あるいは返すものがないという意味になります。

Result<T> 列挙体についてメモ

Result<T> は次のように定義されています。

enum Result<T, E> {
    Ok(T),
    Err(E),
}

Option や Result の値に関する処理を簡単にしてくれるユーティリティがあります。例えば以下のようなものです:

第11章 メモリを割り当てる

この章での内容:

  • メモリ割り当ての種類。それぞれの性能と性質と制限事項
  • あるオブジェクトに、どのアロケーションを使うかを Rust で指定する方法
  • リファレンスと Box はどこが違うのか

ヒープ領域 - BOX の使い方についてメモ

例えば次のような構造体があります。

struct Point {
    x: i32,
    y: i32,
}

これをヒープ領域に確保したい場合は、Box を使って次のようにします。

let p: Box<Point> = Box::new(Point {
    x: 1,
    y: 2,
});
println!("{} {}", p.x, p.y);

C 言語で malloc() を使用してヒープ領域を確保するような操作を、Rust では Box を使っていると思えばよいかもしれません。

Day 81 のまとめ

今日は 10 章のジェネリック関数をはじめとするジェネリックな構造についてと、 11 章の ヒープ領域の使い方などに関するメモリの割当てについて読み進めてみました。

  • 第10章 ジェネリックな関数や型を定義する
    • ただ 1 つの関数定義で呼び出しによって各種のデータ型を処理できるようにする豊富お
    • ジェネリック関数が使う方の指定を型推論によって省略する方法
    • 構造体やタプル構造体や列挙の型を、ただ 1 回書くだけで個々のインスタンスが別々のデータ型を格納できるようにする方法
    • Option と Result という 2 種類の重要な標準ジェネリック列挙体の使い方。Option は選択可能なオプションを表現する。Result は失敗の有無と関数の実行結果を表す
    • 標準関数を使って OptionResult の処理を容易にする方法
  • 第11章 メモリを割り当てる
    • メモリ割り当ての種類。それぞれの性能と性質と制限事項
    • あるオブジェクトに、どのアロケーションを使うかを Rust で指定する方法
    • リファレンスと Box はどこが違うのか
GitHubで編集を提案

Discussion