Как вернее?
От: MerZoD  
Дата: 05.01.08 17:39
Оценка:
Есть гетер. Если используешь обьект возращаемый гетером несколько раз в примерно одном месте. Так вот как вернее постоянно дергать гетер или один раз запомнить обьект возвращаемый гетером? (Обьект в гетера однозначно не изменяется в данном месте).
Re: Как вернее?
От: Blazkowicz Россия  
Дата: 05.01.08 18:37
Оценка: 1 (1) +1
Здравствуйте, MerZoD, Вы писали:

MZD>Есть гетер. Если используешь обьект возращаемый гетером несколько раз в примерно одном месте. Так вот как вернее постоянно дергать гетер или один раз запомнить обьект возвращаемый гетером? (Обьект в гетера однозначно не изменяется в данном месте).


Абстрактный какой-то вопрос, выдраный из контекста. Если "примерно одно место" ограничивается одним методом, то лично я всегда выношу объект в локальную переменную.
Re: Как вернее?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 06.01.08 09:47
Оценка:
Здравствуйте, MerZoD, Вы писали:

MZD>Есть гетер. Если используешь обьект возращаемый гетером несколько раз в примерно одном месте. Так вот как вернее постоянно дергать гетер или один раз запомнить обьект возвращаемый гетером? (Обьект в гетера однозначно не изменяется в данном месте).

Если речь про легкий getter, то сохраняю объект в локальной переменной с модификатором final, если метод обращается к нему более 2-х раз, и речь здесь скорее идет только о стилистике-читаемости, а не о какой-то оптимизации.
Re: Как вернее?
От: Roman Odaisky Украина  
Дата: 06.01.08 20:48
Оценка: :)
Здравствуйте, MerZoD, Вы писали:

MZD>Обьект в гетера однозначно не изменяется в данном месте


В кого не изменяется? http://ru.wikipedia.org/wiki/Гетера
До последнего не верил в пирамиду Лебедева.
Re: Как вернее?
От: BigInteger  
Дата: 09.01.08 08:46
Оценка:
Здравствуйте, MerZoD, Вы писали:

MZD>Есть гетер. Если используешь обьект возращаемый гетером несколько раз в примерно одном месте. Так вот как вернее постоянно дергать гетер или один раз запомнить обьект возвращаемый гетером? (Обьект в гетера однозначно не изменяется в данном месте).


А какая цель вообще преследуется? Если хочется оптимизировать код, т.е. извабить JVM от лишних вызовов метода, тогда не стоит этого делать. Вообще не стоит делать оптимизацию кода до того момента, пока это действительно не потребуется, особенно в ущерб читабельности.
Re[2]: Как вернее?
От: Blazkowicz Россия  
Дата: 09.01.08 10:13
Оценка: +4
Здравствуйте, BigInteger, Вы писали:

BI>А какая цель вообще преследуется? Если хочется оптимизировать код, т.е. извабить JVM от лишних вызовов метода, тогда не стоит этого делать. Вообще не стоит делать оптимизацию кода до того момента, пока это действительно не потребуется, особенно в ущерб читабельности.

Читаемость как раз страдает когда по 10 раз вызывается метод, чтобы достать объект, вместо одного раза и последующей работы с этим объектом через локальную переменную.
Re[3]: Как вернее?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 09.01.08 10:21
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Читаемость как раз страдает когда по 10 раз вызывается метод, чтобы достать объект, вместо одного раза и последующей работы с этим объектом через локальную переменную.

Причем в final-переменную.
Re[2]: Как вернее?
От: chand0s  
Дата: 21.03.08 16:09
Оценка:
BI>А какая цель вообще преследуется? Если хочется оптимизировать код, т.е. извабить JVM от лишних вызовов метода, тогда не стоит этого делать. Вообще не стоит делать оптимизацию кода до того момента, пока это действительно не потребуется, особенно в ущерб читабельности.
А мне кажется VM сделает этому геттеру inline и даже этих крошечных расходов на вызов метода не будет.
Re[3]: Как вернее?
От: chand0s  
Дата: 21.03.08 16:10
Оценка:
Фублин, на дату последнего ответа не посмотрел, sorry.
Re[3]: Как вернее?
От: vsb Казахстан  
Дата: 21.03.08 16:57
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Читаемость как раз страдает когда по 10 раз вызывается метод, чтобы достать объект, вместо одного раза и последующей работы с этим объектом через локальную переменную.


А вот здесь наоборот такую переменную inline-ят. У меня самого чёткого отношения нет, вроде и так и так читабельно.
Re[4]: Как вернее?
От: Blazkowicz Россия  
Дата: 21.03.08 17:00
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А вот здесь наоборот такую переменную inline-ят. У меня самого чёткого отношения нет, вроде и так и так читабельно.

You have a temp that is assigned to once with a simple expression

Re[5]: Как вернее?
От: vsb Казахстан  
Дата: 21.03.08 19:06
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, vsb, Вы писали:


vsb>>А вот здесь наоборот такую переменную inline-ят. У меня самого чёткого отношения нет, вроде и так и так читабельно.

B>

B>You have a temp that is assigned to once with a simple expression


У вас есть временная переменная, которой один раз присваивается простое выражение. И что? У вас ведь это и есть.
Re[6]: Как вернее?
От: Aib https://razborpoletov.com
Дата: 21.03.08 20:58
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, vsb, Вы писали:


vsb>>>А вот здесь наоборот такую переменную inline-ят. У меня самого чёткого отношения нет, вроде и так и так читабельно.

B>>

B>>You have a temp that is assigned to once with a simple expression


vsb>У вас есть временная переменная, которой один раз присваивается простое выражение. И что? У вас ведь это и есть.


К сожалению компилятор не так умен как вы думали:

return (new A()).getA();
 Code:
  0:   new     #2; //class A
  3:   dup
  4:   invokespecial   #3; //Method A."<init>":()V
  7:   invokevirtual   #4; //Method A.getA:()I
  10:  ireturn

а это для промежуточной final
 
 Code:
 0:   new     #2; //class A
 3:   dup
 4:   invokespecial   #3; //Method A."<init>":()V
 7:   astore_1
 8:   aload_1
 9:   invokevirtual   #4; //Method A.getA:()I
 12:  istore_2
 13:  iload_2
 14:  ireturn


Но помоему оно того не стоит
Re[7]: Как вернее?
От: Eugeny__ Украина  
Дата: 24.03.08 08:48
Оценка: +1
Здравствуйте, Aib, Вы писали:

Aib>К сожалению компилятор не так умен как вы думали:


[байткод]

Насколько я знаю, компилятор, который переводит java код в байткод, почти не занимается оптимизацией(разве что заменяет конкатенации строк на StringBuffer.append()). в основном оптимизацию производит JIT.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[6]: Как вернее?
От: Blazkowicz Россия  
Дата: 24.03.08 10:08
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>У вас есть временная переменная, которой один раз присваивается простое выражение. И что? У вас ведь это и есть.

Нет. Когда переменная используется множество раз в одном методе, это немного другая ситуация.
Re[4]: Как вернее?
От: elmal  
Дата: 24.03.08 10:27
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А вот здесь наоборот такую переменную inline-ят. У меня самого чёткого отношения нет, вроде и так и так читабельно.

Да это то случай простейший, здесь инлайнить имеет смысл. Я для себя выработал правило — всегда выносить переменную, если она используется в методе 2 или более раз. Не из целей оптимизации, а из целей читаемости — я документирую таким образом тип этой переменной и называю ее нормальным именем, символов становится меньше, читать проще. Когда используется она один раз часто не выношу, а пользуюсь просто геттером, но если надо обработать Null или еще что-то сделать с переменной, за выражения типа callMethod(processNull(getVar1(processNull(getVar2(processNull(getVar3()))))) готов убить. К сожалению студенты так очень любят писать, так как если сложно понимается — значит круто, да еще и строчек меньше . А иногда так пишут и опытные, которые привыкли к такому стилю, так как в свое время их не остановили — вот тогда вообще жесть .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.