変数を作る

Rustで変数を作るにはletを使う.

fn main() {
    let x = 42;
    println!("{}", x); // 42
}

println!{} は変数の値で置き換えられる.

変数はデフォルトで変更できない

fn main() {
    let x = 42;
    x = 100; // コンパイルエラー!
}

Rustの変数はデフォルトで変更不可.変更したいならmutを付ける:

fn main() {
    let mut x = 42;
    x = 100; // OK
    println!("{}", x); // 100
}

語弊注意: 他の言語でいう「定数」とは微妙に違うけど,今は「mutがないと変更できない」とだけ覚えておこう.

数値型: 3つだけ覚えろ

Rustには数値型がたくさんあるけど,とりあえずこの3つだけ覚えればいい:

何者か
i32 普通の整数 42, -1, 0
usize 配列のインデックスや長さに使う整数(0以上) 0, 1, 100
f64 小数 3.14, -0.5, 1.0
fn main() {
    let age: i32 = 25;
    let index: usize = 0;
    let pi: f64 = 3.14;

    println!("age: {}, index: {}, pi: {}", age, index, pi);
}

語弊注意: 実際にはi8, i16, i64, u8, u32, f32など大量にある.でもこのチュートリアルでは全部無視.i32, usize, f64で乗り切る.

型を書かなくてもRustが推論してくれることが多い:

fn main() {
    let x = 42;     // i32 と推論される
    let y = 3.14;   // f64 と推論される
}

基本的に型は省略できる.コンパイラが判断できないときだけ書けばいい.

型変換

型が違うと計算できない.asで変換する:

fn main() {
    let a: i32 = 10;
    let b: f64 = 3.14;

    let result = a as f64 + b;
    println!("{}", result); // 13.14

    let index = a as usize;
    println!("{}", index); // 10
}

bool

真偽値.truefalse

fn main() {
    let is_cool = true;
    let is_boring: bool = false;
    println!("{} {}", is_cool, is_boring);
}

char

1文字.シングルクォートで囲む.

fn main() {
    let c = 'A';
    let emoji = '🦀';
    println!("{} {}", c, emoji);
}

あまり直接使うことはない.文字列(String)を使うことの方が多い.

String

文字列には2種類ある:

何者か
&str 文字列リテラル.コードに直接書いたやつ.固定.
String 動的な文字列.変更できる.
fn main() {
    let s1 = "hello";                   // &str(文字列リテラル)
    let s2 = String::from("hello");     // String
    let s3 = "hello".to_string();       // これも String

    println!("{} {} {}", s1, s2, s3);
}

語弊注意: &strStringの違いについて正確に説明すると長くなるので省略.迷ったらString::from("...") を使おう.&strが必要な場面でStringを渡しても大体うまくいく.

println! のフォーマット

fn main() {
    let name = "Rust";
    let version = 2021;

    // 基本
    println!("Hello, {}!", name);

    // 複数の値
    println!("{} edition {}", name, version);

    // デバッグ表示(後で構造体のときに便利)
    println!("{:?}", (1, 2, 3));
}

{} で普通の表示,{:?} でデバッグ表示.デバッグ表示は後の章で活躍する.


これで変数と型はOK.次は関数と制御フローを学ぼう.