I'm new to Groovy but have some experience with Java, C and Python. I'd appreciate your feedback on Groovy style and features in this FizzBuzz code.
Review Checklist
- Is it idiomatic Groovy code?
- Can anything be taken away?
- Can it be more functional?
- Could I make use of any Groovy-specific features?
FizzBuzzTest.groovy
import org.fizzbuzz.FizzBuzz import org.junit.Before import org.junit.Test class FizzBuzzTest { FizzBuzz fb @Before void setUp() { fb = new FizzBuzz() } @Test void testGiven1Returns1AsString() { assert '1' == fb.toString(1) } @Test void testGiven2Returns2AsString() { assert '2' == fb.toString(2) } @Test void testGiven3ReturnsFizz() { assert 'Fizz' == fb.toString(3) } @Test void testGiven5ReturnsBuzz() { assert 'Buzz' == fb.toString(5) } @Test void testGiven15ReturnsFizzBuzz() { assert 'FizzBuzz' == fb.toString(15) } } FizzBuzz.groovy
package org.fizzbuzz class FizzBuzz { String toString(number) { if (isMultipleOf3(number) && isMultipleOf5(number)) return 'FizzBuzz' if (isMultipleOf3(number)) return 'Fizz' if (isMultipleOf5(number)) return 'Buzz' number.toString() } private boolean isMultipleOf5(number) { isMultipleOf.curry(5)(number) } private boolean isMultipleOf3(number) { isMultipleOf.curry(3)(number) } private def isMultipleOf = { int multipleOf, number -> number % multipleOf == 0 } static void main(String... args) { def fb = new FizzBuzz() for (num in 1..100) { println fb.toString(num) } } }