<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


リファクタリング・バカプログラム

きしださん企画に投稿したプログラムを「エロい」と褒められたので、さらに洗練して整理してみました。 思わず「なるほど」とうなづいてしまったそこのあなた。こんなもんをリファクタリングしてここまで整然とさせる行為自体がどうにもバカなことを見落としているよ。

/** * エントリポイントのクラス */ public class PrintTest { public static void main(String[] args) { String[][] data = { { "aa", "bb", "cc" }, { "dd", "ee" } }; // String[][] data = {}; //String[][] data = null; new RealPrinter().print(data); } } /** * データを出力しないクラス */ class PrinterStub { protected void printData(String[][] data) { System.out.println("データがありません"); } protected void printNotNull(String[][] data) { System.out.println("データが空です。"); } protected void printDoubleArray(String[][] data, int idx) { } protected void printSingleArray(String[][] data, int idx1, int idx2) { } protected void printDelimiter() { } protected void printString(String[] ar, int idx) { } } /** * データを出力するクラス */ class RealPrinter extends PrinterStub { private PrinterStub[] instances = { new PrinterStub(), this }; /** * trueなら1, falseなら0を返すメソッド。 唯一のバカ部分。 */ private static int bValue(boolean b) { return 5 - Boolean.toString(b).length(); } public void print(String[][] data) { int p = bValue(data != null); instances[p].printData(data); } protected void printData(String[][] data) { int p = bValue(data.length > 0); instances[p].printNotNull(data); } protected void printNotNull(String[][] data) { printDoubleArray(data, 0); } protected void printDoubleArray(String[][] data, int idx) { int p = bValue(data.length > idx); instances[p].printSingleArray(data, idx, 0); System.out.println(); instances[p].printDoubleArray(data, idx + 1); } protected void printSingleArray(String[][] data, int idx1, int idx2) { int p = bValue(data[idx1].length > idx2); instances[p].printString(data[idx1], idx2); int p2 = bValue(data[idx1].length > idx2 + 1); instances[p2].printDelimiter(); instances[p].printSingleArray(data, idx1, idx2 + 1); } protected void printDelimiter() { System.out.print(","); } protected void printString(String[] ar, int idx) { System.out.print(ar[idx]); } }


この記事に対するコメント

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/42-ae7d0209
この記事にトラックバックする(FC2ブログユーザー)

バカプログラマを目指して

先日作ったintTest.java&quot; target=&quot;_blank&quot;&gt;forも ... 寝ても覚めても技術屋【2007/03/26 22:15】


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。