Menu
Coddy logo textTech

String と &str

CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 54/66。

Rustには、異なる目的に使用される2つの主要な文字列型があります:String&str。それらの違いを理解することは、Rustでテキストを効果的に扱うために不可欠です。

String は、変更可能な、所有権のあるヒープ割り当ての文字列です。String を作成すると、プログラムはそのデータを所有し、そのメモリを管理する責任を負います。mut を付けて宣言すると可変(mutable)になるため、サイズを大きくしたり、小さくしたり、内容を変更したりすることができます。

let mut my_string = String::from("Hello");
my_string.push_str(" World"); // Stringは所有権があり、変更可能であるため、これは機能します

対照的に、&str(「ストリングスライス」と読みます)は、文字列データへの借用された、不変のビューです。これは、自身が指し示すデータを所有していません。単にどこか別の場所に存在する文字列コンテンツへの参照です。"Hello" のような文字列リテラルは、実際には &str 型です。

let my_slice: &str = "Hello World"; // これは文字列スライスです

Stringを、書き込んだり変更したりできる自分の本を所有しているようなものだと考えてください。一方で、&strは誰か他の人の本を借りているようなものです。読むことはできますが、変更することはできません。この区別はRustの所有権システムの基本であり、メモリ安全性を確保するのに役立ちます。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

チートシート

Rustには主に2つの文字列型があります:

  • String - 所有権を持つ、ヒープ割り当ての、可変な文字列
  • &str - 借用された、不変の文字列スライス(文字列データへの参照)

Stringの作成:

let mut my_string = String::from("Hello");
my_string.push_str(" World");

文字列リテラルは&str型です:

let my_slice: &str = "Hello World";

Stringはそのデータを所有し、変更することができますが、&strは変更できない参照です。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン