RustのFizzBuzzコード解説
rust
// for.rs fn main() { // 'n' will take the values: 1, 2, ..., 100 in each iteration for n in 1..101 { if n % 15 == 0 { println!("fizzbuzz"); } else if n % 3 == 0 { println!("fizz"); } else if n % 5 == 0 { println!("buzz"); } else { println!("{}", n); } } }
実行方法
1. コンパイルして実行
bash
# コンパイル rustc for.rs # 実行 (Linux/macOS) ./for # 実行 (Windows) for.exe
2. Cargoを使った実行(おすすめ)
bash
# プロジェクト作成(初回のみ) cargo new fizzbuzz_project cd fizzbuzz_project # src/main.rsを上記コードで置き換えて実行 cargo run
コード解説
雑学:FizzBuzzの歴史
FizzBuzzはイギリスの遊びが起源で、プログラミングの世界では新人エンジニアの基本的なコーディング能力を確認するための有名な問題です。GoogleやFacebookなどの面接でも実際に出題されることがあります。
技術解説
-
ループ部分:
1..101-
Rustの範囲指定は
開始..終了で、終了値は含まれません -
1から100まで処理したい場合は
1..101と書く必要があります -
1..=100とも書けます(終了値を含む新しい記法)
-
-
剰余演算子:
%-
除算の余りを求める演算子
-
n % 15 == 0は「nが15で割り切れるか」をチェック
-
-
効率化の業界話
rust// 一般的な最適化:15のチェックを最初に持ってくる if n % 15 == 0 { println!("fizzbuzz"); } else if n % 3 == 0 { println!("fizz"); } else if n % 5 == 0 { println!("buzz"); } else { println!("{}", n); }
-
なぜ15を最初にチェックするか?
-
3と5両方で割り切れる数は必然的に最小公倍数の15でも割り切れる
-
条件分岐を効率的にするための定石です
-
Rust特有の注意点
-
コンパイル時チェック:Rustはコンパイル時に多くのエラーを検出
-
メモリ安全:所有権システムにより実行時エラーが減少
-
ゼロコスト抽象化:高級な構文でもパフォーマンスはC/C++並み
応用編
最近のRustでは、match式を使ったよりRustらしい書き方も人気:
rust
for n in 1..=100 { match (n % 3, n % 5) { (0, 0) => println!("fizzbuzz"), (0, _) => println!("fizz"), (_, 0) => println!("buzz"), _ => println!("{}", n), } }
このコードはタプルパターンマッチングを使っており、より宣言的でRustらしいスタイルと言えます。
まとめ
このFizzBuzzコードはシンプルですが、ループ、条件分岐、基本的な演算子など、プログラミングの基礎が詰まっています。Rustで書くことで、コンパイル時の安全性チェックや現代的な構文も学べる良い例題です。
豆知識:FizzBuzzが書けないプログラマ志願者が意外と多いため、技術面接でフィルタリングとして使われることがあるというのは業界では有名な話です。
0 件のコメント:
コメントを投稿