LoginSignup
1
0

More than 5 years have passed since last update.

[Rust]セミコロンレスでFizzBuzzを書いてみた

Posted at

はじめに

世の中にはセミコロンレスJavaというものがあると知ったので、Rustでもセミコロンレスなコードを書いてみました。

セミコロンレスとは

セミコロン(;)を一切使わずにコードを書くことらしい。

詳しくは下記のURLを参照してください。

Semicolonless Java 2012
セミコロンレスJavaはJava8の夢を見るか?

実装

セミコロンレスJavaではif文などを使ってセミコロンを使わないようにしているようだ。
Rustでもifを使って書いてみたのが以下。

main.rs
#![allow(unused_comparisons)]

pub fn main() {
    if (1..101).map(|n|
            println!("{}",
                if n % 15 == 0 {
                    "FizzBuzz".to_string()
                }else if n % 3 == 0 {
                    "Fizz".to_string()
                }else if n % 5 == 0 {
                    "Buzz".to_string()
                }else{
                    format!("{}", n)
                }
            )
        ).collect::<Vec<_>>().len() >= 0  // ブール値が必要なので意味もなくlen()を呼んで比較。
    {} // セミコロンレスにするためのifなので、{}の中身は不要。
}

マクロバージョン

ifがそのまま見えていると気持ち悪いので、マクロにしてみたのが以下。

main.rs(改)
#![allow(unused_comparisons)]

macro_rules! semicolonless {
    ($e:expr) => (if $e {})
}

pub fn main() {
    semicolonless!(
        (1..101).map(|n|
            println!("{}",
                if n % 15 == 0 {
                    "FizzBuzz".to_string()
                }else if n % 3 == 0 {
                    "Fizz".to_string()
                }else if n % 5 == 0 {
                    "Buzz".to_string()
                }else{
                    format!("{}", n)
                }
            )
        ).collect::<Vec<_>>().len() >= 0
    )
}

1
0
3

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