第3章では、Rustプログラミングにおける基本的な構文について解説していきます。この章を通して、Rustの基本的な要素と文法に慣れ、後の章で扱う高度なトピックにスムーズに進めるようにしていきましょう。Rustの基本文法はシンプルでわかりやすい構造ですが、メモリの安全性や所有権の概念が基礎にあるため、最初から効率的で安定したコードを書けるようになります。
3.1 変数と定数の定義
Rustでは、変数と定数を使ってデータを扱いますが、他の多くの言語とは異なり、変数はデフォルトで不変(immutable)です。Rustでは、安全な並行処理のため、変数を明示的に変更可能にしなければならないため、コードが予期せず変更されるリスクを防ぎやすくなっています。
3.1.1 変数の定義
変数は let
キーワードで定義します。例えば、整数値の変数を作る場合、次のように書きます。
fn main() {
let x = 5;
println!("The value of x is: {}", x);
}
上記のコードでは、変数 x
を定義し、その値を5に設定しています。この変数はデフォルトで不変なので、 x
に再代入しようとするとコンパイルエラーが発生します。Rustでは、デフォルトの不変性がコードの安全性と予測可能性を保つのに役立ちます。
3.1.2 変更可能な変数
変更可能な変数を作成するには、 mut
キーワードを使用します。例えば、次のように mut
を使って変数 y
を変更可能にします。
fn main() {
let mut y = 10;
println!("The initial value of y is: {}", y);
y = 20;
println!("The new value of y is: {}", y);
}
この場合、 y
に新しい値を代入してもエラーは発生しません。mut
を用いることで、変数が予期しない変更を受ける可能性がある場合でも、その意図を明確に示すことができます。
3.1.3 定数の定義
定数は const
キーワードで定義します。定数は実行時に変更できず、定数式でしか初期化できません。また、変数とは異なりスコープ内で再定義することもできません。
const MAX_POINTS: u32 = 100_000;
ここで、 MAX_POINTS
は型 u32
(32ビットの符号なし整数)で定義されており、大文字とアンダースコアで命名されているのが特徴です。Rustでは、定数名は通常すべて大文字で書き、アンダースコアで区切ります。定数はグローバルに定義することができ、プログラム全体で使用することが可能です。
3.2 型の概要
Rustは静的型付け言語であり、すべての変数の型はコンパイル時に決まります。変数の型はRustのコンパイラが自動的に推論しますが、明示的に型を指定することも可能です。
3.2.1 基本的な型
Rustの基本的な型は以下の通りです。
- 整数型 (
i8
,i16
,i32
,i64
,i128
,isize
): 符号付きの整数。ビット数が異なる様々なサイズがあり、用途に応じて選べます。 - 符号なし整数型 (
u8
,u16
,u32
,u64
,u128
,usize
): 符号がなく、非負の整数のみを扱います。 - 浮動小数点型 (
f32
,f64
): 小数を扱うための型で、f32
は単精度、f64
は倍精度です。 - 文字型 (
char
): Unicode対応の1文字を表す型で、4バイトのメモリを使用します。 - ブーリアン型 (
bool
):true
またはfalse
の2つの値を持つ論理型です。
型を明示する場合は、変数の定義に :
を使って型を指定します。例えば、整数型の変数 z
を i32
として宣言する場合は次のようになります。
fn main() {
let z: i32 = 42;
println!("The value of z is: {}", z);
}
3.2.2 型変換
Rustは型の明示的な変換を必要とします。異なる型間で値を変換するには、 as
キーワードを使います。次に、整数型 i32
を f64
に変換する例を示します。
fn main() {
let int_value: i32 = 10;
let float_value: f64 = int_value as f64;
println!("The float value is: {}", float_value);
}
3.3 関数の定義と使用
Rustでは関数を定義する際に fn
キーワードを使用します。関数には入力(引数)と出力(戻り値)があり、型はすべて明示的に指定する必要があります。例えば、次のコードは、2つの整数を受け取り、その合計を返す関数 add
を定義しています。
fn add(x: i32, y: i32) -> i32 {
x + y
}
fn main() {
let result = add(5, 3);
println!("The sum is: {}", result);
}
関数の戻り値の型は ->
の後に記述します。また、Rustでは暗黙の return
キーワードを使わず、最後の式の結果がそのまま返される特徴があります。このため、 x + y
の行にはセミコロンを付けていません。
3.4 制御構文
Rustでは、基本的な制御構文を使用して条件分岐やループを実行できます。
3.4.1 条件分岐
条件分岐には if
キーワードを使います。Rustの if
文では条件に括弧を付ける必要がありませんが、ブロックの中には必ず {}
で囲む必要があります。
fn main() {
let number = 7;
if number < 5 {
println!("The number is less than 5");
} else if number > 5 {
println!("The number is greater than 5");
} else {
println!("The number is 5");
}
}
このコードは、 number
の値に応じて異なるメッセージを出力します。Rustでは、 if
文は式として使えるため、次のように値を代入する際にも使うことができます。
fn main() {
let condition = true;
let number = if condition { 5 } else { 10 };
println!("The value of number is: {}", number);
}
3.4.2 ループ
Rustには主に3つのループ構造があります。
無限ループ (loop
)r
fn main() {
let mut count = 0;
loop {
count += 1;
if count == 5 {
break;
}
println!("Count is: {}", count);
}
}
while
ループ
fn main() {
let mut num = 3;
while num != 0 {
println!("{}!", num);
num -= 1;
}
println!("Liftoff!");
}
for
ループ
for
ループはリストや範囲で繰り返しを行うために使用され、範囲演算子 (..
) と共に使うと便利です。
fn main() {
for number in 1..4 {
println!("The number is: {}", number);
}
}
初心者におすすめ!プログラミングスクールのススメ
未経験でも気軽に!サブスク型プログラミングスクール【Freeks】
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学の挫折率、驚きの87.5%!
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
有料と無料、スクールの違いは?
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
- 受講条件が異なる
- 学べるスキルやカリキュラム内容が異なる
- 就職や転職のサポート内容が異なる
どちらが自分に合っているか、よく考えて選ぶのが大事です。
サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
- 未経験者向けのわかりやすいカリキュラム
- 経験豊富なエンジニアのサポート
- オンラインで自分のペースで学習可能
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
終了後は副業もサポート!
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓