はじめに
世の中にはセミコロンレス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
)
}