LoginSignup
1
0

引数のおける参照・所有権のまとめ? in Rust

Last updated at Posted at 2024-04-11

rustc : ver 1.77.1

初めまして Twil3 です。


いきなりなのですが、

関数を作るときに引数に
& を付けるのか、付けないのか。
mut を付けるのか、付けないのか。


わからないのですよね?!

そこで、自分なりに調べてみたので、まとめとして残しておきたいと思います!
稚拙な文章ですがどうぞ許してくださいm(_ _)m


今回は例として特定の値に1足して返す(add_one)関数を使って書いていきます。

まず、add_one関数を定義します。

add_one.rs
fn add_one() -> {
    a+1
}

では、引数の設定をしたいのですが....

& を付けるのか mut を付けるのか、はたまた なにも付けない なのか判断が難しいんですよ!


ここで &,mutについて調べてみると、


  • &
    -> 変数の値を用いて、新しく変数を作る ( = 参照 )
    -> 元の変数の値を変更しない場合

  • mut
    -> 変数の値自体を変更することが可能 ( = 可変 )
    -> 元の変数の値を変更したい場合

  • なにも付けない
    -> 変数の値自体を変更 ( = 所有権 )
    -> 元の変数の値を変更したい場合


と、出てきました。

結局どうすればいいのか


つまるところ、今回の引数には **mut** もしくは **なにもつけない** のが正解ということになります。
add_one.rs
fn add_one(mut n: i32) -> i32 {
    a+1
}

もしくは

add_one.rs
fn add_one(n: i32) -> i32 {
    a+1
}

となるのですが、ここで上の.rsをコンパイルすると

add_one.rs -> warning
warning: variable does not need to be mutable
 --> add_one.rs:1:12
  |
1 | fn add_one(mut n: i8) -> i8 {
  |            ----^
  |            |
  |            help: remove this `mut`
  |
  = note: `#[warn(unused_mut)]` on by defaul

という Warning が出ます。
要約すると mut要らないよ! っていうことですね。


最後に

関数の引数で mut を使うことは多分少ないと思います。
まだ Rust を学び始めて間もないので全然わからないことが多いので、補足があれば是非教えてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0