Rustの基本構文

変数、基本の型、関数、コメント、および制御フローは、ほとんどすべてのプログラミング言語が持つプログラミング概念です。

これらの基本的な概念はすべてのRustプログラムに存在し、それらを早めに学習すれば、Rustの使い方をできるだけ早く学べます。

変数

Rustは強く型付けされた言語ですが、変数の型を自動的に判別する機能があることに注意してください。これは、弱く型付けされた言語に紛れやすいです。

変数を宣言する場合には、letキーワードを使用する必要があります。 例えば:

let a = 123;

JavaScriptを学んだ開発者はこの言葉に非常に敏感であり、C言語を学んだ開発者はこの言葉を理解していません。

このステートメントが宣言された後、次の3行のコードは禁止されています。

a = "abc";
a = 4.56; 
a = 456;

最初の行のエラーは、aが123として宣言された後、aは整数であると判定され、文字列型の値を割り当てることができないことです。

2行目のエラーは、数値の自動変換で精度が低下し、Rust言語では精度が低下した自動的にデータ型変換が許可されていないことです。

3行目のエラーは、aが可変変数ではないことです。

最初の2つのエラーは簡単に理解できますが、3番目のエラーはどういう意味ですか?aは変数ではありませんか?

Rust言語の安全性と並行性を高めるため、言語の方には、変数の値をできるだけ変更せずに設計されます。これより、aの値は不変ですが、これはaが「変数」(英語のvariable)ではないことを意味ではありません。ホームページでは、aのような変数は「不変変数」などの変数を呼び出しています。

編集したプログラムの一部が値が不変という仮定によって実行され、コードの他の部分が値を変更している場合、コードの値が不変の部分は設計どおりに実行しない可能性があります。エラーは実行した後に発見しにくいのためです。これはRust言語がこのメカニズムを設計する理由です。

もちろん、変数を「可変」(mutable)にする場合には、mutキーワードのみ必要です。

let mut a = 123;
a = 456;

このプログラムは正しいです。

定数と不変変数の違い

不変変数は不変なので、定数ではないでしょうか? なぜ変数と呼ばれますか?

変数と定数の間には違いがあります。 Rustでは、次のプログラムが実行できます。

let a = 123;
let a = 456;

しかし、aが定数の場合、それは実行できません。

const a: i32 = 123;
let a = 456;

変数の値は「再バインディング」できますが、「再バインディング」の前に勝手に変更できません。これより、コンパイラーは各「バインディング」の後に領域内のプログラムロジックを完全に推測できます。Rustには型を自動的に判別する機能がありますが、場合によっては型を宣言する方が便利です。

let a: u64 = 123;

ここでは、aが符号なし、64ビットの整数変数であると宣言されています。型が宣言されていない場合、aは自動的に符号付き32ビット整数変数として判別され、aの値の範囲に大きな影響を与えます。

シャドウイング(Shadowing)

シャドウイングとは、他のオブジェクト指向言語の「オーバーライド(Override)」または「オーバーロード(Overload)」とは異なります。 シャドウイングとは、上記の「再バインディング」です。引用符を追加する理由は、この概念が説明されていない場合に置き換えるためです。

シャドウイングとは、変数の名前を再利用できるメカニズムを指します。

実例

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

このプログラムが実行した結果は次の通りです

The value of x is: 12

シャドウイングと可変変数の割り当ては異なります。シャドウイングとは、同じ名前を使用して別の変数の本体を表すことを指し、その型、変数属性、および値は変更できます。しかし、可変変数の割り当てでは、値のみが変更できます。

let mut s = "123";
s = s.len();

このプログラムはエラーが発生します:文字列変数に整数値を割り当てることはできません。

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です