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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクター
- Stringと&str
- HashMap
- コレクションの反復処理