checklist

Kolejność rozwiązywania problemów

Utkwiło mi w pamięci zdanie „Dobra zasada mówi, żeby najpierw rozwiązywać łatwiejsze problemy, a potem trudniejsze” zapamiętane z jednej z książek o programowaniu, które bardzo dobrze mówi o tym co chcę dzisiaj napisać.

Do dzisiejszego wpisu zainspirował mnie kod kolegi, który narzekał na prędkość wykonywania programu. Postaram się przedstawić jego problem przy użyciu kodu, w którym wyolbrzymię błąd jaki znaleźliśmy.

<?php

class Klass 
{
    public function publicMethod() 
    {
        return $this->slowMethod() && $this->quickMethod();
    }

    private function quickMethod() 
    {
        //fast
    }

    private function slowMethod() 
    {
        //slow
    }
}

W powyższym kodzie kolega zapomniał o jednej ważnej rzeczy. O tym jak działają operatory logiczne. Metoda prywatna w powyższej klasie będzie zawsze wolna bez względu na wynik jej działania. Można było temu zapobiec stosując taki zapis:

    public function publicMethod() 
    {
        return $this->quickMethod() && $this->slowMethod();
    }

Co to zmienia i dla czego to w ogóle ma być szybsze? Zastosowany tu operator „logicznego i” działa w taki sposób, że jeśli wyrażenia po jego lewej i prawej stronie zwrócą logiczną prawdę to wtedy i tylko wtedy całe wyrażenie będzie prawdziwe. Co więcej jeśli wyrażenie po jego lewej stronie zwraca fałsz to wyrażenie po prawej nie będzie wykonane. Nie ma sensu wykonywać wyrażenia po prawej bo wynik jego działania nie będzie miał wpływu na to co zwróci operator.

Są to podstawy ale nie jest to pierwszy przypadek kiedy widzę kod zawodowego programisty, który o tej podstawie zapomina. Warto od czasu do czasu przeczytać książkę o programowaniu, która nam tę wiedzę odświeży.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *