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フィードバックを取得できます。ローカル設定は不要です。