Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

冗長なtryブロックのマージ

臭い名

冗長な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

備考

特になし