Rust-modules

提供:Dev Guides
移動先:案内検索

Rust-モジュール

コードの論理グループはモジュールと呼ばれます。 複数のモジュールは、 crate と呼ばれるユニットにコンパイルされます。 Rustプログラムには、バイナリクレートまたはライブラリクレートが含まれている場合があります。 バイナリクレートは、_main()_メソッドを持つ実行可能なプロジェクトです。 ライブラリクレートは、他のプロジェクトで再利用できるコンポーネントのグループです。 バイナリクレートとは異なり、ライブラリクレートにはエントリポイントがありません(main()メソッド)。 Cargoツールは、Rustのクレートを管理するために使用されます。 たとえば、_network_モジュールにはネットワーク関連の関数が含まれ、_graphics_モジュールには描画関連の関数が含まれます。 モジュールは、他のプログラミング言語の名前空間に似ています。 サードパーティのクレートは、https://crates.io/[crates.io]から貨物を使用してダウンロードできます。

Sr.No Term & Description
1

crate

Rustのコンパイル単位です。クレートはバイナリまたはライブラリにコンパイルされます。

2

cargo

木箱用の公式Rustパッケージ管理ツール。

3

module

クレート内のコードを論理的にグループ化します。

4

crates.io

公式のRustパッケージレジストリ。

構文

//public module
pub mod a_public_module {
   pub fn a_public_function() {
     //public function
   }
   fn a_private_function() {
     //private function
   }
}
//private module
mod a_private_module {
   fn a_private_function() {
   }
}

モジュールはパブリックまたはプライベートにできます。 プライベートモジュールのコンポーネントは、他のモジュールからアクセスできません。 Rustのモジュールはデフォルトでプライベートです。 それどころか、公開モジュールの関数は他のモジュールからアクセスできます。 モジュールを公開するには、 pub キーワードを接頭辞として付ける必要があります。 パブリックモジュール内の関数もパブリックにする必要があります。

図:モジュールの定義

この例では、パブリックモジュール-_movies_を定義しています。 モジュールには、パラメーターを受け入れてその値を出力する関数_play()_が含まれています。

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
fn main(){
   movies::play("Herold and Kumar".to_string());
}

出力

Playing movie Herold and Kumar

キーワードを使用

_use_キーワードは、パブリックモジュールのインポートに役立ちます。

構文

use public_module_name::function_name;

pub mod movies {
   pub fn play(name:String) {
      println!("Playing movie {}",name);
   }
}
use movies::play;
fn main(){
   play("Herold and Kumar ".to_string());
}

出力

Playing movie Herold and Kumar

ネストされたモジュール

モジュールはネストすることもできます。 _comedy_モジュールは_english_モジュール内にネストされ、さらに_movies_モジュール内にネストされています。 以下の例では、_movies/english/comedy_モジュール内で関数_play_を定義しています。

pub mod movies {
   pub mod english {
      pub mod comedy {
         pub fn play(name:String) {
            println!("Playing comedy movie {}",name);
         }
      }
   }
}
use movies::english::comedy::play;
//importing a public module

fn main() {
  //short path syntax
   play("Herold and Kumar".to_string());
   play("The Hangover".to_string());

  //full path syntax
   movies::english::comedy::play("Airplane!".to_string());
}

出力

Playing comedy movie Herold and Kumar
Playing comedy movie The Hangover
Playing comedy movie Airplane!

図-ライブラリクレートを作成し、バイナリクレートで消費する

モジュール movies を含む movie_lib という名前のライブラリクレートを作成しましょう。 movie_lib ライブラリクレートを構築するには、 cargo ツールを使用します。

手順1-プロジェクトフォルダーの作成

フォルダー_movie-app_の後にサブフォルダー_movie-lib_を作成します。 フォルダーとサブフォルダーが作成されたら、このディレクトリに src フォルダーとCargo.tomlファイルを作成します。 ソースコードは、_src folder_に配置する必要があります。 srcフォルダーにlib.rsおよびmovies.rsファイルを作成します。 _Cargo.toml_ファイルには、バージョン番号、作成者名などのプロジェクトのメタデータが含まれます。

プロジェクトのディレクトリ構造は次のようになります-

movie-app
   movie-lib/
      -->Cargo.toml
      -->src/
         lib.rs
         movies.rs

手順2-Cargo.tomlファイルを編集してプロジェクトメタデータを追加する

[package]
name = "movies_lib"
version = "0.1.0"
authors = ["Mohtashim"]

ステップ3-lib.rsファイルを編集します。

このファイルに次のモジュール定義を追加します。

pub mod movies;

上記の行は、公開モジュール- movies を作成します。

ステップ4-movies.rsファイルを編集する

このファイルは、moviesモジュールのすべての機能を定義します。

pub fn play(name:String){
   println!("Playing movie {} :movies-app",name);
}

上記のコードは、パラメーターを受け入れてコンソールに出力する関数* play()*を定義しています。

ステップ5-ライブラリクレートを構築する

*cargo build* コマンドを使用してアプリをビルドし、ライブラリクレートが適切に構成されているかどうかを確認します。 プロジェクトのルート(movie-appフォルダー)にいることを確認してください。 ビルドが成功すると、ターミナルに次のメッセージが表示されます。
D:\Rust\movie-lib> cargo build
   Compiling movies_lib v0.1.0 (file:///D:/Rust/movie-lib)
   Finished dev [unoptimized + debuginfo] target(s) in 0.67s

ステップ6-テストアプリケーションを作成する

movie-appフォルダーに別の movie-lib-test フォルダーを作成し、その後にCargo.tomlファイルとsrcフォルダーを作成します。 これは、以前に作成したライブラリクレートを使用するバイナリクレートであるため、このプロジェクトにはmainメソッドが必要です。 srcフォルダーにmain.rsファイルを作成します。 フォルダー構造は次のようになります。

movie-app
   movie-lib
  //already completed

   movie-lib-test/
      -->Cargo.toml
      -->src/
         main.rs

ステップ7-Cargo.tomlファイルに以下を追加します

[package]
name = "test_for_movie_lib"
version = "0.1.0"
authors = ["Mohtashim"]

[dependencies]
movies_lib = { path = "../movie-lib" }

-ライブラリフォルダーへのパスは依存関係として設定されます。 次の図は、両方のプロジェクトの内容を示しています。

貨物Tomlファイル

ステップ8-以下をmain.rsファイルに追加します

extern crate movies_lib;
use movies_lib::movies::play;
fn main() {
   println!("inside main of test ");
   play("finddevguides".to_string())
}

上記のコードは、movies_libという外部パッケージをインポートします。 現在のプロジェクトのCargo.tomlをチェックして、クレート名を確認します。

ステップ9-カーゴビルドとカーゴランの使用

私たちは貨物ビルドと貨物実行を使用してバイナリプロジェクトをビルドし、以下に示すように実行します-

貨物の実行