9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者入門】Rustのuse、extern create、mod、struct、implについて

Posted at

アクセス修飾子

  • Rustでのpublicpub になってprivateの場合は先頭は何もなしでprivate 扱いになる

    // public
    pub fn 関数名 { 
    }
    
    pub mod モジュール名 { 
    }
    
    // private
    fn 関数名 { 
    }
    
    mod モジュール名 { 
    }
    

struct、implについて

  • Rustにはclassがないため、代わりに structimpltraitを使用する

【struct】

  • structとは構造体を定義する時に使用する

    • 構造体とは異なる型のデータをひとまとめにしたもの
    • データ名と型を構造体の中に定義する
    struct user {
      pub name: String,
    }
    

【impl】

  • implstruct上で動作する関数を定義することができる

    • implは、structと同名にすることで structAppleに対して実装を行ってるという認識になる
    pub struct Animal {
        pub name: String
    }
    
    impl Animal {
        pub fn get_name(&self) -> &str {
            &self.name
        }
    }
    
    use web_app::models::users::Animal;
    
    fn main() -> (){
        let animal = Animal { name: "ゴリラ".to_string()};
        println!("{}", Animal::get_name(&animal));
    }
    

use、extern create、modについて

【extern crate】

  • 外部のクレート(ライブラリ)をインポートする時に使う
  • lib.rs に定義するだけで基本的には使用できるようになる
extern crate diesel;

【mod】

  • モジュールとは機能の集まりで関数、モジュールがまとめられている

  • モジュールの定義には3つある

    • mod モジュール名 { … } で定義

    • 同じファイル内でmod を定義して使用する

      ```rust
      // モジュール定義
      pub mod my_mod {
      // 関数の定義
      pub fn log(a: &str) {
        // ターミナルに引数でもらった値を表示
        println!("{}",a);
      }
      

      }
      fn main() -> (){
      // 上記のmy_modのlog関数を利用
      my_mod::log("テスト 太郎");
      }

      
      
  • モジュール名.rs を作って lib.rs に pub mod モジュール名 と書いて定義する。つまりファイルからモジュールを定義する。

    • 別ファイルでモジュールを定義

      // モジュール定義
      pub mod my_mod {
      	// 関数の定義
        pub fn log(a: &str) {
      		// ターミナルに引数でもらった値を表示
          println!("{}",a);
        }
      }
      
    • lib.rsで下記のようにmod を定義

      pub mod sample;
      
    • main.rsuseを扱って読み込んで使用

      • 今回の場合のパスはプロジェクト名/ファイル名/モジュール名
      use web_app::sample::my_mod; 
      
      fn main() -> (){
          my_mod::log("テスト 太郎 ");
      }
      
  • モジュール名/mod.rs を作って、lib.rs にpub mod モジュール名 と書いて定義する

    • 新しくディレクトリを作成してその配下にmod.rs を作成してmodを定義

      pub mod sample;
      
    • さらに作成したディレクトリ配下にモジュール名.rs を作成してmodを定義

      // モジュール定義
      pub mod my_mod {
      	// 関数の定義
        pub fn log(a: &str) {
      		// ターミナルに引数でもらった値を表示
          println!("{}",a);
        }
      }
      
    • main.rsuseを扱って読み込んで使用

      use web_app::sample_mods::sample::my_mod;
      
      fn main() -> (){
          my_mod::log("テスト 太郎");
      }
      

【use】

  • useは各ファイルでモジュールライブラリなどのインポート時に利用する

  • 別ファイルで定義しているモジュールを使いたい場合に使用

    use web_app::sample::my_mod
    
    fn main() -> (){
        my_mod::log("テスト 太郎");
    }
    
  • ライブラリなども同様でuseでパスを指定すれば使用する事ができる

    use web_app::sample::my_mod
    use chrono::Local;
    
    fn main() -> (){
        my_mod::log("テスト 太郎");
    		// 現在の日付と時刻を表示
        println!("{}", Local::now());
    }
    
  • 使用したライブラリ

  • パスについて
    • 先頭にcreateプロジェクト名ライブラリ名 などで始まるパスは絶対パス
    • selfsuper で始まるパスは相対パス
    • 下記のリンクにもパスについて記載がある

  • as で名前を変更することも可能

    use web_app::sample::my_mod as test;
    
    fn main() -> (){
        test::log("テスト 太郎");
    }
    

まとめ

  • structは構造体
  • implを利用する事でstruct に動作を実装する事ができる
  • 外部のクレート(ライブラリ)を使用する場合はlib.rsextern crate クレート名
  • モジュールはpub mod モジュール名{ 関数、モジュール } で詳細を定義して lib.rs or mod.rspub mod モジュール名 で定義してuse で使用ができる
  • use は絶対パスか相対パスでモジュールやライブラリをインポートして使用する事ができる
9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?