🍷

Rust 基本文法 -変数、定数-

2023/09/10に公開

はじめに

前回の記事で Rust の環境構築を爆速でやってみました。
今回から、 Rust の基礎文法を学んでいくにあたり、以下の Rust Playground を使っていこうと思います。

https://play.rust-lang.org/

まずはじめに変数編です。
変数宣言とはいえ、私が普段使っている言語とは違った毛色でしたので、まとめていきます。

変数宣言

Rust の変数宣言は letで表現されます。

fn main() {
    let age = 26;
    println!("{}", age)
}

これが変数の基本形。
letで宣言した age26という数値を代入し、コンソール画面に出力しています。

余談: println!の引数について

println! の第一引数に{}とありますが、これはプレースホルダという名前で、
第二引数に指定された値を {}内に埋め込むという表現になります。

そのため、以下のような書き方も可能です。

fn main() {
    let age = 26;
    println!("あなたの年齢は {} 歳です", age)
}

こうすると、以下のように出力されます。

あなたの年齢は 26 歳です

let の再代入は不可

以下のように ageを再代入しようとするとエラーになります。

fn main() {
    let age = 26;
    println!("{}", age);
 
    age = 15;
    println!("{}", age);
}
error[E0384]: cannot assign twice to immutable variable `age`

直訳すると、不変変数 ageに2回代入することができないという意味になります。
ここで「うん?不変変数?」と思われた方、勘が良いですね。

可変変数を宣言することも可能

先ほどの例で宣言した変数 ageは immutable な変数であり、再代入が不可となっています。
以下のように、変数宣言時に型を与えてあげます。

fn main() {
    let mut age = 26;
    println!("{}", age);
    age = 15;
    println!("{}", age);
}

実行してみると...

26
15

このようにエラーで怒られなくなり、ageに代入した値が出力されるようになりました。

let mut age = 26;

見てお分かりの通りですが、 age の前に mut が追加されています。
これは mutable の略で可変可能な型として認識されます。

変数の再宣言

再代入は immutable であれば不可ということがわかりましたが、
変数の再宣言は可能なのでしょうか?

fn main() {
    let age = 26;
    println!("{}", age);
    let age = 15;
    println!("{}", age);
}

実行してみると...

26
15

はい、このように出力されました。
変数ageの再宣言は可能ということがわかりました。

定数宣言

Rust にも定数を宣言することが可能です。
定数は constで表現され、再代入、再宣言が不可となります。
以下のように実行してみます。

fn main() {
    const AGE = 26;
    println!("{}", AGE);
}

しかしコンパイル時に、このようなエラーが出ました。

error: missing type for `const` item

const定義時に肩がないことが原因のようです。
そう、Rustの定数宣言時には型注釈が必須となります。
以下のように型注釈してあげます。

fn main() {
    const AGE: i32 = 26;
    println!("{}", AGE);
}

実行してみると...

26

無事、出力されました。
定数AGEの右側に :i32と付け加えました。これが Rust の型注釈をおこなう方法です。

このように定数の宣言時には型注釈が必須であることがわかったと思います。

余談: i32型とは?

32ビット 符号ありの整数型で、他の言語の integer に相当します。
他の型については以下の記事が参考になりました。
https://isub.co.jp/rust/rust-whole-number-floating-point/

おわりに

今回の記事では Rust の変数、定数宣言について書いていきました。
私も Rust Playground で動かしながらでしたので、学びは多かったです。

普段、Typescript等では letのような変数宣言はあまりしませんが、Rustでは再代入が不可でしたので、まだ安全と言えるのでしょうか。
この辺りの変数宣言に関しては実際に使ってみて知見を得てみようと思います。

では。

コラボスタイル Developers

Discussion