If, else funkcyjnie

0

Witam wszystkich mam oto taką metodę która przelicza kursy walut czy opłaca się ją przerobić jakoś funkcyjnie teraz jest to takie modne xd . Głównie o to chodzi czy wydajnościowo da się to zrobić lepiej o to fragment kodu


BigDecimal getAccountAmountInPLN(final Account account) {
        if (account.getCurrency() == EUR)
            return account.getAmount().multiply(new BigDecimal(Currency.EUR.rate)).setScale(3, 1);
        else if (account.getCurrency() == USD)
            return account.getAmount().multiply(new BigDecimal(Currency.USD.rate)).setScale(3, 1);
        else if (account.getCurrency() == CHF)
            return account.getAmount().multiply(new BigDecimal(Currency.CHF.rate)).setScale(3, 1);
        else
            return account.getAmount().setScale(2);
    }
0

Może użyć switch?

2

Czemu nie zrefaktorujesz tego zeby to wygladalo mniej wiecej tak?

BigDecimal getAccountAmountInPLN(final Account account) {
        if ( account.getCurrency() == PLN ){
            return account.getAmount().setScale(2);
        }
        return account.getAmount().multiply(new BigDecimal(getCurrency().rate)).setScale(3, 1);
    }
0

A co u Ciebie zwraca getAmount()? JSR-354 nie dostarcza wszystkiego co potrzebujesz do takich konwersji?

    MonetaryAmount amount = ...;
    CurrencyConversion conversion = MonetaryConversions.getConversion("CHF");
    MonetaryAmount amountInCHF = amount.with(conversion);

Zaokrąglenia pewnie też można robić...

1

Ja jak już to bym zrobił obiektowo, tzn skorzystał z polimorfizmu :)

0

A czemu Account nie posiada metody do tego, skoro Account samo wie jaką ma walutę i w ogóle nie musi robić ifów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0