0Pricing
Learn Rust Coding · レッスン

Stringと&str

所有するテキストと借用したテキスト

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

2種類のString型

Rustには主に2種類のテキスト型があります:

  • String — 所有権を持つ、伸長可能な文字列です。
  • &str — 借用した文字列スライスで、テキストへのビューです。
fn main() {
    let owned: String = String::from("hello");
    let borrowed: &str = "world";
    println!("{} {}", owned, borrowed);
}

文字列リテラルは&str

二重引用符でテキストを記述すると、&strになります。これは固定されており、プログラムのバイナリに格納されます。

fn main() {
    let greeting = "Hi there"; // type is &str
    println!("{}", greeting);
}

Stringの作成

String::fromまたは.to_string()メソッドを使って、所有権を持つStringを作成します。

fn main() {
    let a = String::from("abc");
    let b = "xyz".to_string();
    println!("{} {}", a, b);
}

Stringの拡張

Stringは所有権を持ち、伸長可能なので、push_strとpushで文字列を追加できます。

fn main() {
    let mut s = String::from("Hello");
    s.push_str(", ");
    s.push_str("Rust");
    s.push('!');
    println!("{}", s);
}

連結

+演算子またはformat!マクロを使って文字列を結合します。format!は入力を消費しません。

fn main() {
    let first = String::from("Hello");
    let second = String::from("World");
    let joined = format!("{} {}", first, second);
    println!("{}", joined);
}

Stringを&strとして借用する

Stringは自動的に&strとして借用できます。これにより、関数はどちらの型も受け取れるようになります。

fn print_text(text: &str) {
    println!("text: {}", text);
}

fn main() {
    let owned = String::from("owned");
    print_text(&owned);
    print_text("literal");
}

&strパラメーターを優先する理由

関数は通常、Stringではなく&strを受け取ります。所有権を持つ文字列、リテラル、スライスのいずれも渡せるため、より柔軟です。

fn shout(s: &str) -> String {
    s.to_uppercase()
}

fn main() {
    println!("{}", shout("quiet"));
}

バイト単位の長さ

len()メソッドが返すのは文字数ではなくバイト数です。ASCIIテキストでは、1文字が1バイトになります。

fn main() {
    let s = "hello";
    println!("{} bytes", s.len());
}

内容の確認

読み取りに便利なメソッドには、contains、starts_with、is_emptyがあります。

fn main() {
    let s = "hello world";
    println!("{}", s.contains("world"));
    println!("{}", s.starts_with("hello"));
}

所有権の違い

Stringはヒープ上のデータを所有し、その解放を担います。一方、&strは既存のデータを借用するだけで、何も所有しません。

fn main() {
    let owned = String::from("data");
    let view: &str = &owned[0..2];
    println!("owned {} view {}", owned, view);
}

相互変換

相互に変換できます:

  • &strからString:.to_string()またはString::from。
  • Stringから&str:&sまたはs.as_str()。
fn main() {
    let s = String::from("convert");
    let slice: &str = s.as_str();
    let back: String = slice.to_string();
    println!("{} {}", slice, back);
}

クイックチェック

2種類のテキスト型の違いを思い出しましょう。

まとめ

Rustの文字列:

  • String — 所有権を持ち、伸長可能で、ヒープに確保されます。
  • &str — 借用したスライスまたはビューで、リテラルがこの型です。
  • String::fromまたはto_string()で作成し、push_strで拡張します。
  • 関数のパラメーターには&strを優先します。
fn main() {
    let mut msg = String::from("Rust");
    msg.push_str(" rocks");
    let view: &str = &msg;
    println!("{} ({} bytes)", view, view.len());
}

よくある質問

「Stringと&str」レッスンは無料ですか?

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

「Stringと&str」で何を学びますか?

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

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

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

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

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

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

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

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

  1. ベクター
  2. Stringと&str
  3. HashMap
  4. コレクションの反復処理
← Learn Rust Codingに戻る