🦀

The Rust Programing Language 5日目

2023/11/04に公開

前回のあらすじ
enum、完全に理解した

本日は7章

本日の学び

モジュール

  • クレート内のコードをグループ化する
  • cargo new --libでライブラリクレートを作成できる
  • modキーワードで宣言
  • ファイルディレクトリのように、コードをその意味ごとにまとめるのに使用する
  • public, privateを定義できる
    • 通常では全て非公開になっている
  • モジュールへのパスは絶対パスか相対パスで記述
    • 絶対パスはクレートルートからのパス
      • crate::front_of_house::hosting::add_to_waitlist();
    • 相対パスでは親モジュールから始まる場合、superを最初につければ良い
      • ファイルシステムの../みたいな感じ
        - 構造体を公開しても、フィールドは非公開
        - 個別に公開・非公開を選択できる
    • 非公開フィールドがある場合、インスタンを作成する公開された関連関数が必要
      • 無いと外から見えないフィールドがあり、初期化できないので
  • enumは公開すると中身も全て公開される
  • useキーワードで、一度パスを指定すればスコープに入れていつでも使える
    • importみたいなことだと思う
    • 慣例では、関数の親モジュールに対してuseを指定する
      • 関数直接呼べるとローカルにあるように見えるので
    • 同名の要素2つをスコープには持ち込めないので、そういう場合も親モジュールを持ち込む
      • asキーワードでエイリアスを指定することもできる
      • use std::io::Result as IoResult;
        • これはよくやるらしい
  • pub useとすると、外部からもそのパスを利用することができるようになる
    • 再公開、という
    • 正直ちょっとよくわかっていない、どういうこと?これ
  • 同じところから持ってくる時は、パスをネストして記述を簡略化できる
    • use std::{cmp::Ordering, io};
  • パスの記述にはワイルドカードも使える
    • use std::collections::*;
      • glob演算子というらしい
  • モジュールを複数ファイルに分割する際、モジュールの階層をファイル名で表現するだけで良い
    • pub mod hosting;のようにすると、同名ファイルを探して読み込まれる

本日のまとめ

なんとなくの想像として、リファクタリングしやすそうだなと思った。
書いていてモジュール分割したくなった時に対応しやすそう、実際どうなのかはわからないが、、、

全部を完全に理解して先に進もうとすると時間がかかるので、微妙によくわからないところは一旦おいておく。
とりあえず1週読んで、何か作りながら覚えていくというのが目標。

Discussion