Rust 基本文法 -変数、定数-
はじめに
前回の記事で Rust の環境構築を爆速でやってみました。
今回から、 Rust の基礎文法を学んでいくにあたり、以下の Rust Playground を使っていこうと思います。
まずはじめに変数編です。
変数宣言とはいえ、私が普段使っている言語とは違った毛色でしたので、まとめていきます。
変数宣言
Rust の変数宣言は let
で表現されます。
fn main() {
let age = 26;
println!("{}", age)
}
これが変数の基本形。
let
で宣言した age
に26
という数値を代入し、コンソール画面に出力しています。
余談: 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 に相当します。
他の型については以下の記事が参考になりました。
おわりに
今回の記事では Rust の変数、定数宣言について書いていきました。
私も Rust Playground で動かしながらでしたので、学びは多かったです。
普段、Typescript等では let
のような変数宣言はあまりしませんが、Rustでは再代入が不可でしたので、まだ安全と言えるのでしょうか。
この辺りの変数宣言に関しては実際に使ってみて知見を得てみようと思います。
では。
Discussion