▼目次
・所有権とは
・JavaとRustの比較
▼文字書き起こし
所有権とは、変数の中身を所有する権利です。
変数の中身とはなんでしょう?
変数は、イメージでいうと箱のことです。
変数の中身は、箱に入っているデータのことです。
Rustでは変数から変数に代入すると、変数の中身の所有権ごと相手に渡します。
これをムーブと言います。
一方、JavaやC#などの他の言語の場合は、値や参照のコピーになります。
RustとJavaのコードを比較して、Rustの特徴を見てみましょう。
まずJavaの場合で書いてみます。
-Java-
public static void main(String[] args) {
String a = new String(""hello"");
String b = a;
System.out.println(a);
System.out.println(b);
}
結果はこうなります。
-結果-
hello
hello
このところで、変数bに変数aを代入しています。
コンパイルして実行してみましょう。
aにもbにも「hello」が入っているので、helloが2つ表示されました。
Rustで書いてみます。
fn main(){
let a = "hello".to_string();
let b = a; //★
println!("{}", a);
println!("{}", b);
}
-結果-
error[E0382]: borrow of moved value: `a`
(直訳→移動した値の借用: `a`)
このコードは、Javaと同じく、このところで変数bに変数aを代入して、最後にaとbを順番に表示させるコードです。
コンパイルして実行してみましょう。
Rustではエラーになっています。
一体なぜなのでしょうか?
これは、変数aのデータの所有権がなくなってしまっているからです。
変数aの所有権は変数bに移動(ムーブ)してしまっているので、aはもう参照できませんと言われています。
b = a は、JavaやC#など、他の言語の場合は値や参照のコピーであり、Rustの場合は所有権のムーブになるのです。
この所有権の概念があることにより、確保したメモリ領域が解放されず、メモリが確保されたままになることが起きにくくなるメリットがあります。
また、メモリ管理のガベージコレクションを採用しないことにより、メモリに対する処理や負荷を減らすメリットもあります。
▼文字書き起こしブログ
https://kino-code.com/what-is-ownership/
▼自己紹介
現在:フリーランス(マーケティング関連の人工知能開発、データ分析や業務自動化など)
前職:リクルート
▼Twitter
https://twitter.com/kino_code/likes
▼Facebook
https://www.facebook.com/%E3%82%AD%E3%83%8E%E3%82%B3%E3%83%BC%E3%83%89-105693727500005/
▼BGM
LAKEY INSPIRED - I Found Me
https://www.youtube.com/watch?v=lpgYzL3opqM
▼タグ
#所有権 #プログラミング言語 #入門
プログラミング言語における所有権とは?|3分でわかりやすく解説
カテゴリ一覧
スポーツ
ニュース
音楽
ラーニング
趣味
グルメ
ガールズ
ゲーム
ギャンブル・宝くじ
エンタメ
アニメ・漫画
どうぶつ