0Pricing
Learn Rust Coding · レッスン

useとパス

アイテムをインポートします

「useとパス」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

アイテムをスコープに取り込む

あらゆる場所でstd::collections::HashMapのような完全なパスを入力するのは面倒です。useキーワードを使うとアイテムをスコープに取り込めるため、短い名前で参照できます。

基本的なuse

useの後は、アイテムの末尾の名前で参照します。ここではHashMapをインポートして、そのまま使います。

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("ana", 10);
    println!("{:?}", scores.get("ana"));
}

絶対パスと相対パス

絶対パスはcrate(クレートルート)から始まります。相対パスは現在のモジュールから始まり、必要に応じてselfやsuperを使います。

mod a {
    pub mod b {
        pub fn hi() { println!("hi from b"); }
    }
    pub fn call_b() {
        crate::a::b::hi();
        self::b::hi();
    }
}

fn main() {
    a::call_b();
}

モジュール内でのuse

useの効果が及ぶのは、それが記述されたスコープだけです。モジュール全体で使う名前を短くするには、モジュールの先頭に記述します。

mod work {
    use std::collections::HashSet;
    pub fn run() {
        let mut s = HashSet::new();
        s.insert(1);
        s.insert(1);
        println!("size {}", s.len());
    }
}

fn main() {
    work::run();
}

asによる名前変更

2つのアイテムの名前が同じ場合や、名前が長すぎる場合は、asを使ってインポート時に名前を変更します。

use std::collections::HashMap as Map;

fn main() {
    let mut m: Map<&str, i32> = Map::new();
    m.insert("x", 1);
    println!("{:?}", m.get("x"));
}

インポートのグループ化

波かっこを使うと、同じパスにある複数のアイテムを1行でインポートできます。これにより、インポート部分を整理できます。

use std::collections::{HashMap, HashSet};

fn main() {
    let map: HashMap<i32, i32> = HashMap::new();
    let set: HashSet<i32> = HashSet::new();
    println!("{} {}", map.len(), set.len());
}

入れ子のグループとself

グループ内でselfを使うと、モジュール自体をそのアイテムと一緒にインポートできます。これにより、モジュール名と特定のメンバーの両方を使えます。

use std::io::{self, Write};

fn main() {
    let _ = io::stdout().write_all(b"hello\n");
}

globインポート

globの*を使うと、パスに含まれるすべての公開アイテムを取り込めます。名前の出どころが分かりにくくなることがあるため、控えめに使いましょう。ただし、preludeやテストではよく使われます。

mod colors {
    pub fn red() -> &'static str { "red" }
    pub fn blue() -> &'static str { "blue" }
}

use colors::*;

fn main() {
    println!("{} {}", red(), blue());
}

慣用的なインポートスタイル

慣例として、関数は親モジュール経由でインポートします(use std::cmp; cmp::max(...))。一方、型は名前でインポートします(use std::collections::HashMap;)。この書き方にすると、呼び出しの意図が明確になります。

use std::cmp;

fn main() {
    println!("{}", cmp::max(3, 9));
}

外部クレートへのパス

依存関係では、パスはクレート名から始まります。たとえばrand::thread_rngです。クレートをCargo.tomlに記述したら、stdの場合と同じ方法でアイテムをインポートします。

インポートを整理する

関連するインポートをまとめ、名前の衝突を避けるために名前を変更し、アプリケーションコードではglobより明示的なインポートを優先しましょう。インポートが整理されていると、ファイル全体をすばやく把握できます。

理解度チェック

パスについての知識を確認しましょう。

まとめ

アイテムをインポートする方法を学びました。

  • useを使うと、短い名前でアイテムをスコープに取り込めます
  • 絶対パスはcrateから始まり、相対パスではselfやsuperを使います
  • asで名前を変更し、波かっこでまとめ、*でglobインポートを行います
  • 分かりやすさのため、型は名前で、関数は親モジュール経由でインポートします

よくある質問

「useとパス」レッスンは無料ですか?

はい。「useとパス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「useとパス」で何を学びますか?

アイテムをインポートします ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「useとパス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. モジュールとmod
  2. pubと可視性
  3. useとパス
  4. クレートとクレートルート
← Learn Rust Codingに戻る