I just uploaded a "refactoring challenge" file, in Java, with JUnit
tests: "2007-11-18 - Refactoring Challenge - LogicMatrix.zip"
If there a good way to express this code in Java:
public class LogicMatrix {
. public static void callTheRightMethod(boolean a, boolean b, boolean
c, boolean d, Interface callback) {
. . // TODO: Refactor this to be simple and obvious:
. . if (!a && !b && !c && !d)
. . . callback.x();
. . else if (a && !b && !c && !d)
. . . callback.z();
. . else if (!a && b && !c && !d)
. . . callback.w();
. . else if (a && b && !c && !d)
. . . callback.w();
. . else if (!a && !b && c && !d)
. . . callback.x();
. . else if (a && !b && c && !d)
. . . callback.x();
. . else if (!a && b && c && !d)
. . . callback.z();
. . else if (a && b && c && !d)
. . . callback.w();
. . else if (!a && !b && !c && d)
. . . callback.y();
. . else if (a && !b && !c && d)
. . . callback.x();
. . else if (!a && b && !c && d)
. . . callback.x();
. . else if (a && b && !c && d)
. . . callback.z();
. . else if (!a && !b && c && d)
. . . callback.y();
. . else if (a && !b && c && d)
. . . callback.y();
. . else if (!a && b && c && d)
. . . callback.x();
. . else if (a && b && c && d)
. . . callback.x();
. }
}
to be a bit more like the decision matrix that generated it...
= "XZWW"
+ "XXZW"
+ "YXXZ"
+ "YYXX";
without lots of reflection or other icky stuff? ;->
(This relates to the "If-else or DecisionMaker -- Fizz-Buzz Test"
thread --
http://tech.groups.yahoo.com/group/testdrivendevelopment/message/26540
)