Funkcja która wykonuje proste operacje warunkowe i zwraca wynik

0

Witam nurtuje mnie pytanie czy praktyka zamiany instrukcji warunkowej do postaci funkcji która zwraca wynik tejże operacji ma jakiś sens. Czy może lepiej po prostu zadbać o odpowiednie nazwy zmiennych. Co w przypadku bardziej złożonych zapytań .Dla przykładu mamy taki o to kod

class A {
    public setCarStatus(): void {
        if (carName == carDocumentName) {
            if (carL == carDocumentL && carX == carDocumentX) {
                this.operationOne();
            }
            else this.operationTwo();
        }
    }

    private operationOne(): void { }
    private operationTwo(): void { }


}
class B {
    public setCarStatus(): void {
        if (this.checkNameCompatibility()) {
            if (this.checkPartsCompatibility()) 
                this.operationOne();
            else this.operationTwo();
        }
    }

    private checkNameCompatibility() {
        if (carName == carDocumentName) return true;
        return false;
    }

    private checkPartsCompatibility() {
        if (carL == carDocumentL && carX == carDocumentX) return true;
        return false;
    }

    private operationOne(): void { }
    private operationTwo(): void { }


}
1

W praktyce to dobry pomysł - w typowym kodzie zestawy warunków powtarzają się i nic mnie bardziej nie wkurza niż zobaczenie, że ktoś dodał jakiś nowy status zamówienia i przeleciał przez 20 ifów dodając kolejnego ORa. (a te 20 ifow sprawdza dokładnie to samo tylko ma wyrażenia w różnej kolejności).
Jeśli w ifie jest and lub or to w prawie zawsze oplaca się wydzielić do funkcji i nazwać ten warunek.

W twoim przypadku wydzielenie checkPartsCompatibilityraczej tak, checkNameCompatibility różnie ; tu już trzeba użyć wyobraźni i pomyślec jak ten kod będzie ewoluował -nazwa, którą wybrałeś checknameCompatibility nijak dla mnie nie wynika z tego co jest w warunku - czyli... wskazuje, że ma to jakiś głębszy, znany tobie sens i dodając taką funkcję powiedziałeś nieco więcej o twoich intencjach (przyda się czytającym).

1

Duplikacja to jedno a czytelność to drugie. Zostawienie tych porównań bezpośrednio w warunku wymaga od czytającego kod zagłębić się i zrozumieć "co te porównania oznaczają". Opakowanie tego nazwaną metodą pozwala przeczytać kod bez potrzeby wchodzenia w szczegóły.

0

Czyli na ogół to dobry sposób na zwiększenie czytelności, co w przypadku wydajności taki skok dla procesora jest jakoś specjalnie odczuwalny i co gdy dla naszego algorytmu każda milisekunda jest na wagę złota?

1

W warunkach roboczych procesor nie wykonuje tu żadnego skoku. To nie stare C/C++.

https://stackoverflow.com/questions/1159087/inlining-in-java

1

ja tylko od siebie dodam, że mnie osobiście drażni taki zapis

        if (carL == carDocumentL && carX == carDocumentX) return true;
        return false;

skoro zwracam bool i sprawdzam bool to po co jeszcze if?

return carL == carDocumentL && carX == carDocumentX;

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