LINUX.ORG.RU

[нубский вопрос] оптимальность кода


0

0

Подскажите, как оптимальнее, с точки зрения компилятора (в т.ч. для байткода JVM), писать:

        if (currency.equals("RUR")) {
            if (price.getValue().longValue() == 0) {
                return price.getValue();
            }
            
            if (price.getCurrency() == BasicCurrency.USD) {
                return price.getValue().multiply(usdRubExchangeRate);
            }
            
            return price.getValue();
        }
        if (currency.equals("RUR")) {
            if (price.getValue().longValue() == 0) {
                return price.getValue();
            } else if (price.getCurrency() == BasicCurrency.USD) {
                return price.getValue().multiply(usdRubExchangeRate);
            } else {
                return price.getValue();
            }
        }
★★★★★

Re: [нубский вопрос] оптимальность кода

> Подскажите, как оптимальнее, с точки зрения компилятора (в т.ч. для байткода JVM), писать:

Premature optimization is the root of all evil.~--- (c) Donald Knuth.

PS:
говножаба не нужна

CL-USER ()

Re: [нубский вопрос] оптимальность кода

Посмотри листинг скомпиленного класса. Мне кажется, что компилятор должен соптимизировать первый вариант, так что байткоды в обоих случаях будут одинаковы.

static_lab ★★★★★ ()

Re: [нубский вопрос] оптимальность кода

> price.getValue().longValue()

> price.getValue().multiply(usdRubExchangeRate);

блин, это же песец какой-то, товарищи, как вы пишете на таком страшноя языке

anonymous ()

Re: [нубский вопрос] оптимальность кода

а вообще плюсую, не в этом месте надо оптимизировать

anonymous ()

Re: [нубский вопрос] оптимальность кода

Строго говоря и по логике это два разных кода. )
Для компиляторов существует порог оптимизации для конструкций else if
- свыше некоторого числа их (на памяти для BSO было как более 11) выполняются попытки построения логики ветвления через табличные переходы.
Оптмизацию байткода я не ковырял.

elipse ★★★ ()

Re: [нубский вопрос] оптимальность кода

В данном конкретном случае разницы никакой.

smh ★★★ ()

Re: [нубский вопрос] оптимальность кода

        if (currency.equals("RUR")) {
           
            if (price.getCurrency() == BasicCurrency.USD) {
                return price.getValue().multiply(usdRubExchangeRate);
            }
           
            return price.getValue();
        }

жеж . не? оптимизация для читабельности

anTaRes ★★★★ ()

Re: [нубский вопрос] оптимальность кода

А зачем price.getValue() вычисляешь помногу раз? По-моему было бы достаточно одного.

dave ★★★★★ ()
Ответ на: Re: [нубский вопрос] оптимальность кода от CL-USER

Re: [нубский вопрос] оптимальность кода

> Premature optimization is the root of all evil.~--- (c) Donald Knuth.

Если повторяешь слова за умными дядями, то нужно знать и другой принцип. Он называется "избежание преждевременной пессимизации". :)

dave ★★★★★ ()

Re: [нубский вопрос] оптимальность кода

В моём видении в первом случае код более оптимален тем, что имеются независимые блоки условных операторов. Но не знаю, даёт ли это какой-то выигрыш помимо читабельности.

Упрёка в разной функциональности не понял, куски кода абсолютно одинаково работают для _данного_ конкретного случая.

Это не желание что-то оптимизировать, а скорее желание определиться, как писать оптимальнее.

Кому-то не понравился код price.getValue().multiply(usdRubExchangeRate) - каким образом в Вашем языке выполняется работа с большими числами ? Это - BigDecimal.

Ну и на счёт общей корявости кода — буду рад примеру исправления, благо код не большой.

P.S. - price.getValue() ничего не вычисляет, это просто геттер.

roy ★★★★★ ()

Re: [нубский вопрос] оптимальность кода

Слабо запустить и посмотреть что быстрее работает?

true_admin ★★★★★ ()
Ответ на: Re: [нубский вопрос] оптимальность кода от roy

Re: [нубский вопрос] оптимальность кода

> Ну и на счёт общей корявости кода — буду рад примеру исправления, благо код не большой.

http://www.linux.org.ru/jump-message.jsp?msgid=4075004&cid=4075523

и Ваш вопрос отваливается

name_no ★★ ()

Re: [нубский вопрос] оптимальность кода

        if (currency.equals("RUR")) 
        {          
            if (price.getCurrency() == BasicCurrency.USD) 
            {
                return price.getValue().multiply(usdRubExchangeRate);
            }
            
            return price.getValue();
        }

Ы?

Anoxemian ★★★★★ ()

Re: [нубский вопрос] оптимальность кода

И правда, упустил как-то. Спасибо. Для себя же решил, что лучше лишний if/else не городить.

roy ★★★★★ ()

Re: [нубский вопрос] оптимальность кода

price * usdRubExchangeRate, очевидно же

нафига вообще по сто раз getValue непонятно, хоть во временную переменную запомнить, хоть не так по-уродски будет выглядеть

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.