かまやまの勉強ノート

ど初心者がプログラミングとか初歩的なところからの勉強記録。

憧れのRust ~4.基本的な文法編 ~

かまやまです。
遅れました。毎日雨ですね。
相変わらずの3日ぼうずですが復帰できました。

 

さて、前回Hello worldがやっとできました!
今回は基本的な文法を学んでいきたいと思います٩( ᐛ )و

 

基本的な文法を学ぶ会

 

どこからやろうかな。
まずは前回のHello worldのソースから見ていきましょうか。
こちらのサイトでもHello worldのソース解説があったのでおさらいです。

Hello, World! - The Rust Programming Language

    fn main() {
        println!("Hello, world!");
    }

 

main()はjavaとかにあるあれですね。

常に全ての実行可能なRustプログラムで走る最初のコードになります。

ですです。実行した際にデフォルトで呼ばれるあれです。

 

printlnは標準出力のようですね。

println!はRustのマクロを呼び出すということです。代わりに関数を呼んでいたら、 println(!なし)と入力されているでしょう。

printlnは関数でprintln!はマクロになるそうです。
関数はわかるのですがマクロ.....?

 

マクロといえば
c言語とかだとdefineで定義されるやつのイメージです。
文字列を定義したものに置き換えるといった処理を想像します。
コンパイルするときもマクロはなんだか順番が違った気がしています。
(c言語を書いたのが何年も前であんまり覚えてないです...)

参考: C言語のマクロの基本

 

Rustでも同じようにマクロの機構があるのですね。
私のレベルがとてつもなく低いので、全く理解できていないのですが、
もう少しレベルが高くなったら理解への挑戦をしていきたいです!

参考: 

qiita.com

 

Hello worldで最初からマクロが出てきて、心が折れそう(°▽°)

ですが基本的構文やっていきたいと思います(°▽°)

 

精神状態を安定させるために、足し算でもしましょう。
式 - Rust By Example 日本語版 この辺りを参考に

test.rs

    fn main() {
        let x = 1;
        let y = 2;
        println!(x + y);
    }

こんな感じかな?

    $ rustc test.rs
    error: format argument must be a string literal
    --> test.rs:4:14
    |
    4 |     println!(x + y);
    |              ^^^^^
    |
    help: you might be missing a string literal to format with
    |
    4 |     println!("{}", x + y);
    |              ^^^^^
    
    error: aborting due to previous error

 

エラーです(°▽°)

plintlnは文字列を引数にしなければならないのと

    println!("{}", x + y);

この書き方はなんでしょう...?

ググってみるとありがたい記事発見(°▽°人)

qiita.com

ありがとうございます。

 

この記事を読んだあとに改めて見てみると

{}がプレースホルダでここにフォーマットの指定を書いて、
第2引数がそのフォーマットに従って出力されるのですね。
c言語とかで%sとかで書くやつと同じですね。

 

修正して以下のソースコードにします。

    fn main() {
        let x = 1;
        let y = 2;
        println!("{}",x + y);
    }

コンパイルして実行!

    $ ./test
    3

できました!
足し算だけだけど嬉しい!

 

ここ数年触っている言語がスクリプト言語なので
コンパイル周りがまっったくわかっていないので、
そこも含め少しずつ理解できたらと思います(°▽°)

 

少ししか進められなかったのですが、次回も基本的な文法をやっていきたいです。