Для такого простого случая я бы выбрал тот, который выглядит лучше всего с точки зрения кода.
В некоторых случаях рекомендуется один раз позвонить и прочитать сохраненное возвращаемое значение, например, в
for (int i = 0; i < list.size(); i++)
doSomethingThatDoesNotAffectSizeOfList();
, поскольку у компилятора могут возникнуть проблемы с определением, влияет ли тело цикла на размер списка. Правильно реализованный список всегда должен легко определять его размер, но в других примерах (или при работе с плохо реализованными коллекциями) он может быть хуже.
В общем случае, если метод сложен в вычислительном отношении, вы можете использовать memoization , что в основном означает, что вы кэшируете уже вычисленные значения ввода / вывода.
Запомненная функция «запоминает» результаты, соответствующие некоторому набору определенных входных данных. Последующие вызовы с запомненными входами возвращают запомненный результат, а не пересчитывают его, тем самым устраняя первичную стоимость вызова с заданными параметрами из всех, кроме первого вызова функции с этими параметрами.
Эта методика позволяет использовать метод "сохранить возвращаемое значение для эффективности" в самом методе, что облегчает его обслуживание ...