建议优化?

时间:2011-11-01 22:22:04

标签: java groovy

def antBuilder = new AntBuilder()
antBuilder.tar(basedir: getOutputDirectory(),  destfile: getTarFile())
antBuilder.gzip(src: getTarFile(), destfile: getTarGzipFile())
antBuilder.delete(file: getTarFile())
antBuilder.delete(dir: getOutputDirectory(), includes:"*.xml")

我有一种方法可以做到这一点。如您所见,getTarFile()方法被称为三次整体。编码它的首选方法是什么,使用getTarFile()三次或定义一个局部变量来保存getTarFile()的值并使用它?

3 个答案:

答案 0 :(得分:1)

你可以像你想要的那样得到Groovy ......

你可以(例如)把它包装在一个闭包中:

def doStuff = { tar, out, gzip ->
  new AntBuilder().with {
    tar( basedir: out,  destfile: tar )
    gzip( src: tar, destfile: gzip )
    delete( file: tar )
    delete( dir: out, includes:"*.xml" )
  }
}

并通过以下方式致电:

doStuff( getTarFile(), getOutputDirectory(), getTarGzipFile() )

无论你采取什么方式,除非getTarFile正在做大量工作(这似乎不太可能),否则你不会获得比可读性更多的东西......

虽然这本身就是胜利; - )

答案 1 :(得分:0)

'首选'与你能得到的主观性一样。

如果getTarFile()的输出可以改变,那么你需要使用局部变量。

至于优化,很可能会由编译器编译或优化JIT。我怀疑你通过在局部变量中保存引用来注意到任何显着的性能差异。

答案 2 :(得分:0)

我使用本地(记住glowcoder的警告),因为IMO将tar文件的定义本地化为使用它的代码。

这提供了一个轻微的认知亮点:“嘿,在下面的代码中引用了一个tar文件。”

我正在优化以获得轻微的会话优势......但非常轻微。 OTOH,如果需要操作tar文件值,并且在getTarFile中这样做是不可取的,那么该更改将被本地化。

性能方面不值得考虑,除非你有异常密集的文件查找。似乎不太可能;)