don't repeat yourself / copy and paste programming

Alexandr Gomoliako zzz на zzz.org.ua
Ср Ноя 23 19:01:16 UTC 2011


On Wed, Nov 23, 2011 at 8:29 PM, Gena Makhomed <gmm at csdoc.com> wrote:
> все-таки DRY - это достаточно важный принцип, и он соблюдается
> даже в исходниках nginx - общие части кода выносятся в макросы
> или в отдельные функции, и там нет дублирования через copy/paste.

Не так все просто.

Допустим, есть такая простая программа:

    a = 5;
    b = 17;

    c = a + b;
    print c;

    a = c;
    b = c + 8;

    c = a + b;
    print c;

Если вынесем "c = a + b; print c" в макрос и назовем его, SUM1,
то получим вот такой код:

    a = 5;
    b = 17;

    SUM1;

    a = c;
    b = c + 8;

    SUM1;

Теперь он стал непонятным и нечитабельным, потому что мы
не видим, что происходит с a, b и c после SUM1.

Чтобы видеть, нам нужно четко знать, куда будет попадать
результат и от каких параметров он зависит, т.е.:

    a = 5;
    b = 17;

    c = SUM1 (a, b);

    a = c;
    b = c + 8;

    c = SUM1 (a, b);

Так что и include в конфиге в общем случае тоже плохо.
Потому что прячет параметры.


Подробная информация о списке рассылки nginx-ru