【MacでRust入門】Rust日本語版チュートリアルの要点まとめ ~ 第5回 変数・定数

2022-08-17
Main Image

目次

こんにちは。

最近流行りのRustを初めてみよう!ということでチュートリアルを読み始めました。

内容を忘れないように & チュートリアルがTL;DRな方向けにブログ記事に要点をまとめていこうと思います。

前回は簡単な数あてゲームを作りました。

今回は第5回です。Rustの変数と定数について要点をまとめます。

Rustの変数がデフォルトで不変なのは何故か?の理由

前回も出てきたように、Rustの変数はデフォルトで不変です。

たとえばこのようなコードは**不変な変数には2回代入できないよ!**と怒られてコンパイルできません。

fn main() {
    let x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);
}

なぜ不変がデフォルト、つまりRustで推奨されているのかというと、「その値が今後変わらないことが保証されているので、第三者がコードを読むときの負荷が減るから」ということらしい。つまり、「この宣言された変数が、どこかで書き換わってるかもしれないな〜」と構えながらコードを読む必要がなくなるので、読みやすくなるんですね。変数が「不変である」とわかっていることによって、バグの原因を追うのにも役立ちます。

そして、mutを書いて可変にすることによって、あえて読者に対して「この変数は将来中身の値が変わりますよ!」という意図を宣言して構えさせるわけです。

これはTypeScriptで極力letではなくconstを使う理由に似ていますね。わかりみが深い。

と思ったらRustにもconstがあるという。↓

Rustの変数と定数の違い

変数ではなく定数の宣言にはconstを使います。Rustのconstによる定数宣言には必ず型注釈を付ける必要があります。

また、mutは使えません。(というより必ず不変なので使う必要がない)

さらに、定数は変数と違って定数式(宣言文)にしか使えず、関数の呼び出し結果や実行時に評価される値にはセットできません。

const MAX_POINTS: u32 = 100_000;

必ず型をつけるのはTypeScript(推論させる)とは違いますね。Pythonの通例のように大文字アンダースコアというのは馴染み深い。

Rustのシャドーイングとは?

letで宣言した変数をさらにletで宣言することでシャドーイングし、元の値を2番目の変数で覆い隠すことができます。

mutで可変にしたのとは違い、シャドーイングしても不変なので再代入するとエラーになります。

fn main() {
    let x = 5;
    let x = x + 1; // これがシャドーイング x=6になる
    {
        let x = x * 2; // これもシャドーイング x=12になる
        println!("The value of x in the inner scope is: {}", x); // これは12
    }
    println!("The value of x is: {}", x); // これはx=6
}

シャドーイングは{}のスコープ内で有効なので、上の例だと最後のx6に戻ります。

前回作成したゲームのコードで使ったように、同じ名前の変数を使いまわして型を変えることができます。

まとめ

というわけで今回はRustの変数と定数の特徴についてまとめました。

  • letで宣言する変数はmutを使って可変にできるが、基本は不変が推奨。
  • constで定数を宣言できる。命名は大文字アンダースコア。定数は型宣言が必須。
  • letで同じ名前の変数を再宣言でき、これをシャドーイングという。別の型にするのによく使う。mutと違って再代入はできない。

次回は変数の色々な型についてまとめます。

それでは〜

Rust オススメの参考書籍

▼ 入門者向け。Pythonとの比較あり。Kindleでも読める。

手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた

▼ 中級者向け。オライリーならではの詳解。硬派な方向け。

プログラミングRust 第2版

参考リンク

Rustチュートリアル (日本語版 非公式) https://doc.rust-jp.rs/book-ja/

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord