Показать сообщение отдельно
  #1 (permalink)  
Старый 11.01.2012, 16:11
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

как лучше всего организовать код?
такс. попробую обьяснить проблему на как можно более абстрактном примере.

есть две функции, которые совершают аналогичные в конечном результате действия. Их совместить низя. Но проблема не в этом.

Эти две функции разрастаются ещё на две (раньше на три, пока я не смекнул, как можно совместить две из них в одну, это неважно).

В итоге получается аж 4 функции!

это введение. теперь, собственно, перейду к абстрактному коду на примере одной из двух функций :

итак, есть две функции (т.к. корневая разрастается) : A и B.
function A(){};
function B(){};

функция B оперирует с переданным ей аргументом с переданными её настройками. Так сказать, "опциональное декорирование".
function B(obj, opt1, opt2){
    /*её тело совсем неважно, но пусть будет так :*/
    obj[opt1] = opt2;
};

Функция A, в свою очередь, принимает аргументы для настройки, генерирует аргументы для B и вскармливает всё это функции B :
function A(opt, another_opt){
    var z = "";
    z = "my string is : "+opt+" and it contains "+another_opt;
    var d = {};
    B(d, "options", z);
    /*.....*/
};

Обе функции являются процедурными, т.е. не возвращают результата.
как видите, первая функция является "надстройкой" над второй. Проблема заключается в том, что необходимо сохранить последовательность действий A и B.

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

В голове крутится аргумент-переключатель Boolean-типа, который будет находиться в начале функции и выполнять определённые действия, но в этом случае функция превращается в рекурсивную. На примере кода это будет :
function A(switcher,args/*1,2,3*/){
    if(switcher === true){
        /*привычные для A действия*/
        var d = {};
        A(true, d, arg2, arg3);
        // дальшейшие операции с d.
    } else {
        /*тут код функции B*/
        arg1[arg2] = arg[3];
    }
};


Вопрос к вам, о форумчане : как бы это сделали вы и как это логичнее сделать?

Последний раз редактировалось melky, 11.01.2012 в 16:22.
Ответить с цитированием