letとmut
Rustの変数はデフォルトで変更できません。値を変更する変数にはmutを付けます。
変更できる変数RUST
fn main() {
let name: &str = "Mity";
let mut score: i32 = 70;
score += 15;
println!("{name}: {score}点");
}実行結果OUTPUT
Mity: 85点mutを付けずに値を変更するとコンパイルエラーになります。変更が不要なら、変更できないままにしておくほうが意図を伝えやすくなります。
基本のデータ型
整数にはi32、小数にはf64、真偽値にはbool、文字列リテラルには&strをよく使います。所有する文字列はStringです。
型を使い分けるRUST
fn main() {
let age: u32 = 20;
let height: f64 = 170.5;
let is_student: bool = true;
let name: String = String::from("Mity");
println!("{name}: {age}歳、身長{height}cm、学生={is_student}");
}実行結果OUTPUT
Mity: 20歳、身長170.5cm、学生=true整数型は混ぜられない
i32とu32は別の型です。必要な変換方法と値の範囲を確認してから変換します。条件分岐と繰り返し
Rustのifは式でもあるため、条件によって値を作れます。forは範囲やコレクションを順番に処理します。
ifとforRUST
fn main() {
let score = 82;
let result = if score >= 60 { "合格" } else { "再挑戦" };
for number in 1..=3 {
println!("{number}回目: {result}");
}
}実行結果OUTPUT
1回目: 合格
2回目: 合格
3回目: 合格関数を定義する
関数はfnで定義し、引数と戻り値の型を明示します。最後の式が戻り値になる場合、セミコロンを付けません。
送料を計算するRUST
fn shipping_fee(weight: u32) -> u32 {
if weight <= 2 { 300 } else { 600 }
}
fn main() {
println!("送料: {}円", shipping_fee(3));
}実行結果OUTPUT
送料: 600円整数を安全に変換する
asは範囲外の値を切り詰めることがあります。値が範囲内か確認したい場合はtry_fromを使い、失敗をResultとして扱います。
try_fromで変換するRUST
fn main() {
let value = u8::try_from(300_i32);
println!("{value:?}");
}実行結果OUTPUT
Err(TryFromIntError(()))while・break・continue
whileは条件が真の間、continueは今回の反復を飛ばし、breakはループを終了します。
ループを制御するRUST
fn main() {
let mut number = 0;
while number < 5 {
number += 1;
if number == 2 { continue; }
if number == 4 { break; }
println!("{number}");
}
}実行結果OUTPUT
1
3練習
整数のリストから60点以上だけを選び、合計を返す関数を作ってみましょう。次の所有権とはでは、配列やStringを関数へ渡すときの考え方を学びます。