まず、if文を使った場合、例えばこんな感じ。
/**
* FizzBuzz
*/
public class FizzBuzz {
final String F = "Fizz";
final String B = "Buzz";
public void fizzBuzz(int number) {
for (int i = 1; i < number + 1; i++) {
boolean fizz = (i % 3 == 0);
boolean buzz = (i % 5 == 0);
if (fizz && buzz) {
output(F);
} else if (fizz) {
output(B);
} else if (buzz) {
output(F + B);
} else {
output(Integer.toString(i));
}
}
}
private void output(String str) {
System.out.println(str);
}
public static void main(String[] args) {
new FizzBuzz().fizzBuzz(Integer.parseInt(args[0]));
}
}
System.out.println が4回も出てくるのでリファクタリングしてみた。
次に、if文のところを ?
と :
で置き換えてみたもの。
/**
* FizzBuzz 2
* if文使わないバージョン
*/
public class FizzBuzz2 {
final String F = "Fizz";
final String B = "Buzz";
public void fizzBuzz(int number) {
for (int i = 1; i < number + 1; i++) {
boolean fizz = (i % 3 == 0);
boolean buzz = (i % 5 == 0);
System.out.println(
fizz && buzz ? F + B
: fizz ? F
: buzz ? B
: Integer.toString(i)
);
}
}
public static void main(String[] args) {
new FizzBuzz2().fizzBuzz(Integer.parseInt(args[0]));
}
}
インデント工夫してみたけど、やはり伝わりづらいか。。。
Shift キーを押す回数を減らせるので、コーディングは100倍楽に感じる。