さらに凄いバカなプログラムを作ろう3
http://d.hatena.ne.jp/nowokay/20070324
もう一つアイデアを思いついたので、書いてみました。ただし、実行環境依存なコードなので他の人のところでは動かないかもしれません・・・。とりあえず、Windows上のJDK1.5.0_11とJDK1.6.0では動きました。
今回の実装でいまいちなところは、条件が満たされないときに元のメソッドをreturnできないので、ネストが深くなってしまい読みにくいところですね。ちょっと書き方を変えてそれっぽくしてみました。楽しんで頂ければ幸いです。
public class SortedPrinter2 { public static void print(final int[] data) { IF (data == null, new Execuable() {public void execute() { System.out.println("Nullです"); }}, new Execuable() {public void execute() { IF (data.length == 0, new Execuable() {public void execute() { System.out.println("空です"); }}, new Execuable() {public void execute() { FOR (0, data.length - 1, new Iteratable() {public void execute(final int index) { FOR (index + 1, data.length, new Iteratable() {public void execute(final int index2) { IF (data[index] > data[index2], new Execuable() {public void execute() { int swap = data[index]; data[index] = data[index2]; data[index2] = swap; }}); }}); }}); FOR (0, data.length, new Iteratable() {public void execute(final int index) { IF (index != 0, new Execuable() {public void execute() { System.out.print(" "); }}); System.out.print(data[index]); }}); System.out.println(); }}); }}); } public static void main(String[] args) { print(new int[]{14, 13, 71, 2, 24, 19}); print(new int[]{3, 2}); print(new int[]{5}); print(new int[]{}); print(null); print(new int[]{14, 13, 71, 2, 24, 19, 14, 15}); print(new int[]{3, 2, 3, 2}); } public static void IF(final boolean b, final Execuable truePart, final Execuable falsePart) { Execuable[] result = new Execuable[] {truePart, falsePart}; result[convertInt(b)].execute(); } public static void IF(final boolean b, final Execuable truePart) { IF (b, truePart, new NullExecuable()); } public static void FOR(final int start, final int finish, final Iteratable iterable) { IF (start < finish, new Execuable() { public void execute() { iterable.execute(start); FOR (start + 1, finish, iterable); } } ); } // @:true, 1: false private static int convertInt(boolean b) { Boolean bool = Boolean.valueOf(b); int hash = bool.hashCode(); return (hash - 1231) / 6; } } interface Execuable { void execute(); } interface Iteratable { void execute(int index); } class NullExecuable implements Execuable { public void execute() {} }