🦀
The Rust Programing Language 5日目
前回のあらすじ
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