🦀

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

2022/12/04に公開

Day 76 のテーマ

今日は Rust の書籍を読み始めたので、読みながらその感想などを書ければいいかなと思っています。

読み始めた本はこちら。

この書籍の原著はこちらです。

というわけで、読み進めていこうと思います。

目次

目次は以下のようになっています。

  • 第1章 Rustを始めよう
  • 第2章 数値演算などの基本を把握しよう
  • 第3章 オブジェクトに名前を付ける
  • 第4章 実行の流れを制御する
  • 第5章 データシーケンスを使う
  • 第6章 基本のデータ型を使う
  • 第7章 列挙と照合
  • 第8章 混成的なデータ構造を使う
  • 第9章 関数を定義する
  • 第10章 ジェネリックな関数や型を定義する
  • 第11章 メモリを割り当てる
  • 第12章 データの実装
  • 第13章 クロージャを定義する
  • 第14章 変更可能な文字列を使う
  • 第15章 範囲とスライス
  • 第16章 イテレータを使う
  • 第17章 入出力とエラー処理
  • 第18章 データのカプセル化[メソッドとモジュール]
  • 第19章 トレイトを使う
  • 第20章 オブジェクト指向プログラミング
  • 第21章 標準ライブラリのコレクション
  • 第22章 所有権、移動、コピー
  • 第23章 借用とライフタイム
  • 第24章 さらにライフタイムについて

第1章 Rustを始めよう

この章での内容:

  • Rust のプログラムを書いて実行する方法
  • テキストと数をターミナルにプリントする方法
  • コードにコメントを入れる方法

print! マクロを使ってsyyty力を行っていました。ここで、マクロ関数の違いについて説明がありました。

  • 関数
    • そのプログラムの別の場所で定義された関数のコードをランタイムに実行するので、実行の制御は別の場所に渡ります
  • マクロ
    • コンパイラに対して、そのマクロ呼び出しをマクロ定義の本文で置き換えるように依頼します

また、print! ですが厳密には以下のように分解されます。

  • print: マクロの名前
  • !: 直前の名前がマクロであることを示す記号

何気なく使っている関数とマクロですが、この違いは改めて頭に入れておきたい説明だと思います。

第2章 数値演算などの基本を把握しよう

この章での内容:

  • 整数演算、浮動小数点演算の計算方法
  • 複数の文を含むプログラムの書き方
  • 文字列を複数行に分けて各方法

基本的な機能だったのかもしれないのですが、実は今日始めて知ったのが、Rust には Java でいうところのテキストブロック(複数行文字列リテラルを簡単に扱う方法)が既に入っていたんですね。Java のテキストブロックは、Java 15 で正式リリースされた機能で、次のように複数行を表現することができました。

String message = """
                 These
                 are
                 3 lines.
                 """;

Rust では、普通に文字列リテラルを表現する時に改行していれば複数表現ができるようです。

println!("These
are
3 lines");
These
are
3 lines

第3章 オブジェクトに名前を付ける

この章での内容:

  • 「値」と「オブジェクト」と「変数」
  • 変数の「可変性」という概念
  • 初期化と再代入の違い
  • 使っていない変数に対する警告を抑制する方法
  • 「ブール式」という概念
  • 代入でコンパイラがどんな型チェックを行うのか
  • 算術演算と代入の両方を実行できる演算子
  • Rust の標準ライブラリで定義されている関数の呼び出し方

標準ライブラリで提供されている関数を使うことは普通に今までもやってきましたが、紹介されていることで、"ああ、たしかに" と思ったことがありました。関数の呼び出し方ですが、モジュールの名前から関数名を指定する形式と、引数に対して関数を呼び出す形式がありました。
それらに形式の名前があったことを知りました。

  • プロシージャ形式

    • モジュール名::関数名(引数)
    • 例. str::len("abcde")
  • オブジェクト指向形式

    • 引数.関数名()
    • 例. "abcde".len()

Day 76 のまとめ

今日は 1 章から 3 章までを軽く読んでみましたが、説明が簡潔でわかりやすい本でした。今週は毎日 3〜4 章ずつ読み進めようかなと思っています。

GitHubで編集を提案

Discussion