見出し画像

Rust superとselfとは 使い方と注意点について

Rustのsuperとselfは、モジュールや構造体、列挙型などのスコープを表すために使われるキーワードで、モジュールの階層や構造体のスコープ内での参照に役立ちます。


selfの使い方

selfは現在のスコープや自身の参照を示すために使用されます。

モジュール内でのself

モジュールのスコープを示すために使用します。

mod outer {
    pub mod inner {
        pub fn greet() {
            println!("Hello from inner!");
        }
    }

    fn use_inner() {
        self::inner::greet(); 
    }
}

self::inner::greet()を使って、現在のモジュール(outer)内のinnerモジュールを参照しています。


構造体やメソッドでのself

構造体やメソッドにおいて、自身のインスタンスを指すために使用します。

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 { 
        self.width * self.height
    }
}

selfを使って現在の構造体インスタンスのフィールドにアクセスしています。


superの使い方

superは現在のスコープの親スコープを参照するために使用されます。主に、モジュールの階層を上向きに参照するために使われます。


モジュール内でのsuper

superを使って親モジュールを参照します。

mod outer {
    pub mod inner {
        pub fn greet() {
            println!("Hello from inner!");
        }
    }

    mod inner_user {
        fn use_outer_inner() {
            super::inner::greet();
        }
    }
}

super::inner::greet()を使って、現在のモジュール(inner_user)の親モジュールであるouter内のinnerモジュールを参照しています。


注意点

スコープとモジュール階層

superとselfはスコープとモジュール階層を正確に参照するために使われます。
階層が複雑になると、誤った参照が生じる可能性があるため、スコープの構造を理解することが必要です。


ループやサイクルの防止

モジュール内での参照がループやサイクルを生じないように、モジュール構造を適切に設計することが必要です。循環参照は、エラーやパニックの原因となります。



Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?