臭い名
冗長なtryブロック
臭い英名
redundancy try block
リファクタリング名
tryブロックのマージ
リファクタリング英名
merge try block
改善理由
・tryブロックははパフォーマンスが悪いのでできるだけまとめる
・・処理の見通し改善。正常系と例外系を切り離して読める
対応
・統合する
サンプルコード
リファクタリング前後をパフォーマンス測定
package trycatch; public class SampleRedundancyTryBlock { private static final int TEST_COUNT = 100; public static void main(String[] args) { long start = System.nanoTime(); for (int i = 0; i < TEST_COUNT; i++) { redundancyTryMethod(); } long end = System.nanoTime(); System.out.println(end - start); start = System.nanoTime(); for (int i = 0; i < TEST_COUNT; i++) { mergedTryMethod(); } end = System.nanoTime(); System.out.println(end - start); } private static void redundancyTryMethod() { try { hoge("test"); } catch (HogeException e) { } try { hage("test"); } catch (HageException e) { } } private static void mergedTryMethod() { try { hoge("test"); hage("test"); } catch (HogeException e) { } catch (HageException e) { } } private static String hoge(String value) throws HogeException { if (value == null) { throw new HogeException(); } return value; } private static String hage(String value) throws HageException { if (value == null) { throw new HageException(); } return value; } private static class HogeException extends Exception { } private static class HageException extends Exception { } }
出力
参考値。何度か計測したが似たような数値だった。
12980 9961
備考
特になし