Предложения по оптимизации?

#java #groovy

#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() и использовать ее вместо этого?

Ответ №1:

На самом деле ты можешь быть настолько заводным, насколько захочешь…

Вы могли бы сделать (например) обернуть его в закрытие:

 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 не выполняет много работы (что кажется маловероятным), вы не получите ничего, кроме удобства чтения…

Хотя это само по себе может быть победой 😉

Ответ №2:

«Предпочтительный» — это настолько субъективно, насколько это возможно.

Если вывод getTarFile() может измениться, вам НУЖНО использовать локальную переменную.

Что касается оптимизации, скорее всего, компилятор скомпилирует или иным образом оптимизирует JIT. Я сомневаюсь, что вы заметили бы какую-либо существенную разницу в производительности, сохранив ссылку в локальной переменной.

Ответ №3:

Я бы использовал local (принимая во внимание предостережение glowcoder), потому что IMO он локализует определение файла tar над кодом, который его использует.

Это дает небольшой когнитивный момент: «Эй, в следующем коде есть ссылка на один tar-файл».

Я оптимизирую для небольшого разговорного преимущества… но довольно незначительный. OTOH, если необходимо было изменить значение файла tar, и делать это в getTarFile нежелательно, это изменение будет локализовано.

С точки зрения производительности об этом не стоит думать, если у вас нет необычно интенсивного поиска файлов. Кажется маловероятным 😉