1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[初学者向け]Rustを触ってみよう ~変数と基本文法編~

Posted at

はじめに

こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。
今回の記事はRustの基本文法の書き方についてです。変数とそのデータ型までを備忘録的に記事にしています。前回の記事の続きですので、先に環境構築を行いたい方は以下の記事を参考にしてください。

変数

Rustの変数定義について見ていきます。
Rustの場合、letを用いて変数を定義するようです。

変数定義
let num = 10;

変数の中身の確認方法は以下です。

dbg!を利用
dbg!(num);

もしくは

printlnを利用
println!("{}",  num);

マクロってなんだ?

Rustの本を読んでいてマクロってなんだっけ?となった。変数の中身をdbg!とかprintln!で確認しているが、エクセルのマクロの話じゃないよね。
関数とも違うらしいのでピンとこなかった。多分Cとかやっている人にはピンとくるんだろうと思う。
公式ドキュメントの説明と睨めっこしてなんとなく理解したことをまとめる。

  • 関数は型や引数を厳密に決める必要があるが、マクロはそれにとらわれない
  • コンパイル前に動く
  • 関数は「何かをやる手順」を決めるもので、マクロは「どんな手順を書くか」を決めるもの

Pythonでいうところのデコレータに近いもの?厳密には違う気がするが、今はそんな理解に留める。

これは後でしっかりまとめていこうと思う。

実行したコード
fn main() {
    let num = 10;
    let num1 = 2;
    dbg!(num);
    println!("{}", num1);
}
実行結果
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/test_hello`
[src/main.rs:6:5] num = 10
2

算術演算子の場合

実行したコード
fn main() {
    let num = 10 + 2;
    let num1 = num * 3;
    dbg!(num);
    dbg!(num1);
}
実行結果
[src/main.rs:6:5] num = 12
[src/main.rs:7:5] num1 = 36
}

num1の計算が10 + 2 * 3の計算ではなく、先に10 + 2が計算された後に* 3の計算がされる。先に変数numが定義され、その後にnum1の計算がされる。この順番をしっかり押さえていきたい。

不変と可変の話

Rustの変数定義はデフォルトでは不変である。再代入は認めない。ただ、定数はまた別にある。再代入をする際の記述方法もちゃんとあります。

書き方
let mut num = 10;
num = num * 2;

mut修飾子を使うことで、本来不変の変数を可変にすることが可能になります。

今回はデータの型については詳しく書かないです。型推論が搭載されている言語の場合、変数程度では型を意識するところは多くないです。

初心者向けに解説すると、変数などに格納するデータには型というものがあります。データとは、数値とか、文字とかそういうのですね。

条件分岐

if文の書き方は以下になります。変数の値はかなり適当ですが、上の続きでそのまま書いています。

条件分岐の書き方
fn main() {
    let num = 10 + 1;
    let num1 = num * 3;

    if num == 12{
        println!("値は12です");
    } else {
        println!("12ではなくなっています");
    }
}
実行結果
12ではなくなっています

if文の書き方は特に他の言語と違いはないですね。

dbg!のマクロを使うと条件式の中身の確認もできて便利そう。

書き方
fn main() {
    let num = 10 + 1;
    let num1 = num * 3;

    if dbg!(num == 12){
        println!("値は12です");
    } else {
        println!("12ではなくなっています");
    }
}
書き方
[src/main.rs:7:8] num == 12 = false
12ではなくなっています

繰り返し

条件分岐の次は繰り返しですね。

for

書き方
for i in 1..5{
    println!("i = {}", i);
}

これは変数iの数が1~4の間ブロックの中の処理を繰り返していきます。

実行結果
i = 1
i = 2
i = 3
i = 4

便利だけど若干わかりにくい書き方だな〜と思ったのが以下⬇️の書き方です。

書き方
for i in 1..=5{
    println!("i = {}", i);
}
実行結果
i = 1
i = 2
i = 3
i = 4
i = 5

この場合、変数iの数が1~5までになると。むしろ初学者にはこっちの方がわかりやすいかも。

while

while文ももちろんありますね。Whileは条件式を書いて、その条件式がTrueになっている時だけ繰り返しの処理を行います。以下は公式ドキュメントにあったコードです。

書き方
let mut number = 3;

    while number != 0 {
        println!("{}!", number);

        number -= 1;
    }

    // 発射!
    println!("LIFTOFF!!!");
  1. 可変の変数を定義して、3を代入
  2. while文の条件式は『0ではない場合』を指定
  3. whileのブロック範囲内で、変数numberの値を画面に表示(最初は3)
  4. 変数numberから数値を1ずつ減らしていく
  5. 変数numberの値が1ずつ減っていき、0になったらwhileのブロックを抜けて最後の『LIFTOFF!!!』を画面に表示して終了

loop

loopはずっと繰り返す構文です。breakを使うとループを抜けることができるタイプの繰り返しですね。
無限ループは以下の書き方。Ctrl + Cでストップできます。

書き方
loop {
    println!("ずっと繰り返す"); 
}

break文で抜ける場合はif文で条件を指定する。

書き方
    let mut count = 0;

    loop {
        println!("Count: {}", count);
        count += 1;

        if count == 5 {
            break; // ループを終了する
        }
    }

    println!("ループの終了");

タグに関しては今回は触れません。

おわりに

読了ありがとうございます。
とりあえず余計なことは考えず、基本の構文について記事にしました。
初学者がつまづきそうなものは一旦スキップ。基本中の基本をまずは学んで、深いところは後ででよろしいと思っているタイプです。
次回は関数周りですね。
398bd021-8cdb-4200-822c-ec44286d504e_720.png

余談

基本構文の条件分岐と繰り返しを学んでいる時が一番面白くないと思ってしまうのは自分だけかな、、?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?