DRYな備忘録

Don't Repeat Yourself.

RustをMacにインストールしてHelloWorldとFizzBuzz

Rust、話題なので、やってみる。ミーハーなので。

brew install rust

% brew install rust
% rustc -V
rustc 1.16.0
% cargo -V
cargo-0.17.0-dev (f9e5481 2017-03-03)

Hello, Rust!

% cd
% mkdir -p proj/rust/playground/hello
% cd proj/rust/playground/hello
fn main() {
    println("ハロー, Rust!");
}
% rustc hello.rs
error[E0423]: expected function, found macro `println`
 --> hello.rs:2:5
  |
2 |     println("ハロー, Rust!");
  |     ^^^^^^^ did you mean `println!(...)`?

error: aborting due to previous error

%

めっちゃ親切やん

fn main() {
-    println("ハロー, Rust!");
+    println!("ハロー, Rust!");
}
% rustc hello.rs
% ./hello
ハロー, Rust!
%

できた

Write & Runがだるい

コンパイルして、実行ファイルを実行、っていう流れがだるいな、って思ったら、cargo runというのがあるっぽい。本当はプロジェクトつくるときにcargo newするのが作法のようで、cargo newするとtestsも自動的につくってくれるっぽい。いいっぽい。今回は後からCargo.tomlを追加した。

FizzBuzz

こういう感じにしたい

% fizzbuzz 15
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
FizzBuzz!!!

こうなった

use std::env;

fn fizzbuzz(x: i8) {
    for i in 1..(x + 1) {
        match (i % 3, i % 5) {
            (0, 0) => println!("FizzBuzz!!!"),
            (0, _) => println!("fizz"),
            (_, 0) => println!("buzz"),
            _ => println!("{}", i),
        }
    }
}

fn main() {
    match env::args().last().unwrap().parse::<i8>() {
        Ok(x) => fizzbuzz(x),
        Err(err) => println!("数字を指定してください: {}", err),
    }
}

結果

% cargo run 18
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/fizzbuzz 18`
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
FizzBuzz!!!
16
17
fizz

いい感じ。成果物です。

github.com

コミットの細かさには定評がある僕です。

参考

雑感

  • とりあえず書き始めたけど、思ったより難しくて、ちゃんとチュートリアル読まなあかんな、と思った
  • わりと楽しく書けそう

Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development