понедельник, 11 декабря 2017 г.

Понятный код. Совет 2. Досрочный выход их функции

Работая над проектами, очень часто приходится видеть подобный код

function someFunction($a, $b) {
    if (($a->someMethod('someString1' && $a->someMethod('someString2')) || $b->someMethod('someString')) {
        $b->someMethod($a);
        if ($b->someMethod3('someString4')) {
            $b->someMethod4();       
        }
    } 
} 

В принципе это обычная практика, противозаконного в ней ничего нет, но читать и поддерживать подобные вещи сложновато.

В данном коде есть 2 проблемы:
1. Сложное комплексное условие;
2. Необоснованная вложенность условий;

Благо, существует прием, который позволяет устранить эти проблемы. Название ему - досрочный выход из функции. Суть приема заключается в том, что нужно пытаться выйти (возврящать return) из функции как можно раньше.

function someFunction($a, $b) {
    if (!($a->someMethod('someString1' && $a->someMethod('someString2'))) {
        if (!$b->someMethod('someString')) {
            return;
        }
    }

    $b->someMethod($a);

    if ($b->someMethod3('someString4')) {
        $b->someMethod4();       
    }
} 


Конечно есть очевидные минусы этого подхода:
1. Увеличение количества строк кода;
2. Иногда приходится перемещать большое количество строчек кода при добавлении нового условия;

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

вторник, 17 октября 2017 г.

Немного о Phalcon

Сейчас работая с фреймворков Phalcon. Честно сказать откровением он для меня не стал. Слишком простой, слишком типичный для современного инструментарий веб-разработчика. Хотя, возможно, простым он мне кажется, потому что я изучаю его по интерфейсам и документации. Типичное мое изучение фреймворков - чтение их кода.

Что мне нравится в нём:
- Довольно просто механизм внедрения зависимостей, я не сильно разбирался как он(механизм) инъецирует зависимости в компоненты, но по моим ощущения там все завязано на магических методах и инжектировании контейнера с зависимостями в компоненты;
- Довольно простые реализации компонентов. Типичный роутинг, типичные контроллеры, типичный фронт-контроллер, типичная реализация большинства компонентов;

Что мне не нравится в нем:
- Volt, шаблонизатор с синтаксисом smarty+twig+php. Зачем то запилили шаблонизатор со своим синтаксисом, взяли бы за основу смарти или то же твиг, но нет, нужен свой велосипед.