🎃

[備忘録06]作って学ぶブラウザのしくみ / URLの構文解析の実装/ URL構造体の作成

2024/12/31に公開1

[構造体の実装]

saba_core/src/url.rsファイルで以下のようにurl構造体を定義する

use alloc::string:String;

#[derive(Debug, Clone, PartialEq)] 
// derive属性はRustの構造体や列挙型に対して、自動的にトレイトを実装するための属性です。ここでは、Debugトレイト、CloneトレイトとPartialEqトレイトを実装しています。
pub struct Url {
    url: String,
    host: String,
    port: String,
    path: String,
    searchpart: String,
}

use alloc::string::ToString;

impl Url {
    pub fn new(url: String) -> Self { //コンストラクタ
        Self {
            url,
            host: "".to_string(),
            port: "".to_string(),
            path: "".to_string(),
            searchpart: "".to_string(),
        }
    }
}

構造体はデータをまとめるだけでなく、構造体に関する関数を実装することもできる。

構造体のインスタンスに紐づいた関数をメソッドという。メソッドは第一引数に必ず自分自身を表す**&selfまたは&mut self**を持つ。
これにより特定の構造体のインスタンスに対する振る舞いを定義することができる。

実際にURLを解析するのはparseメソッドで行う。
このparseメソッドの返り値は**Result<Self, String>**を返すことにする。

  • Result型[^1]はメソッドや操作の結果を表現するために使用される列挙型。成功した場合はOkと結果の値を、エラーが発生した場合にはErrとそのエラーの値を保持する。
  • メソッドの定義の前についているpubキーワードは、parseメソッドが外部からも呼び出し可能なことを表す。
imp Url {
    pub fn parse(&mut self)-> Result<Self, String> {
        //処理内容
    }
}

Result<Self, String>によって、メソッドの中でエラーが発生した場合にエラー情報を返すことができ、呼び出し元がエラーを適切に処理できる。
引数である、&mut selfは、メソッドが可変な参照経由でオブジェクト自体にアクセスすることを示す。
selfはメソッドが呼び出されたオブジェクト自体を示し、&mutは可変な参照を示す。これにより、コンストラクタで作成した空文字のフィールドをparseメソッド内で変更できる。

[^1]Result型はメソッドや操作の結果を表現するために使用される列挙型

Discussion

kanaruskanarus
typo
  • use alloc::string:String;

    use alloc::string::String;

  • imp Url {

    impl Url {

  • メソッドは第一引数に必ず自分自身を表す**&selfまたは&mut self**を持つ。

    &self または &mut self または self