Pull to refresh

Comments 8

Применяем рефакторинг «встраивание переменной» _result, документируем по scriptDoc, защищаемся от пустого параметра paramsNew (+ тем самым позволяем замещать пустой строкой <=> удалять) и улучшаем (улучшаем?) читабельность. Авось кому сгодится :).

/**
 * Функция для модификации GET-параметров uri
 * 
 * @param {String} uri 
 * @param {String} paramsNew
 * @param {Boolean} [isReplace]
 *
 */
var uriQueryParamsModifier = function (uri, paramsNew, isReplace) {
    var paramsUri;
    paramsNew = paramsNew || '';
    
    paramsUri = ((paramsUri = uri.match(/\?([^#]+)/)) && paramsUri[1]);
    
    if (paramsUri && isReplace) {
        return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : paramsNew);
    } 
    
    if (paramsNew) {
        return uri.replace(/(#)|$/, (!paramsUri ? '?' : '&') + paramsNew + '$1');
    }
    
    return uri;
}
Согласен, хотя read-only стиль вполне подходит прагме 555 :)
Но!
if (paramsUri && isReplace) {
return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : paramsNew);
}

ХМ.
Масло маслянное, если у Вас paramsNew == '', так чего стесняться?
if (paramsUri && isReplace) {
return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : '' );
}

И — завершающее return uri; — поясните, к чему так?
Кроме шуток — не понимаю смысла функции, возвращающей отданный ей аргумент. Тогда уж null, что ли.
Точно, точно, camelCase или underscore стиль — не суть. Читабельность повышается, имхо, за счет масла масляного: условия читаемы по диагонали и вертикали — 1) если есть что заменять и чем, то… 2) если есть чем модифицировать (т.к. не замена/удаление, то добавление), то… 3) вырожденное условие в виде «return uri» реализует вырожденную функцию.

Вот последнее… тут зависит от восприятия — мне показалось, что будет менее неожиданным (Ruby?), если некий модификатор ничего не сделает с объектом ежели «обнулит» его. С другой стороны, вместо последнего return м. б. и исключение, и return null, в зависимости от требования внешней среды.
Профиксил до читабельного варианта (было — Perl!), избавился от лишнего кода (правда умерло масло маслянное — уж не обессудьте ), с «return uri» — согласный.
код можно сильно сократить вставив в начало функции
if (!paramsNew)
return uri;

ну и судя по логике работы, она должна называться uriQueryParamsModifie[d]
нельзя сократить. Вчитайтесь.
if (paramsUri && isReplace)
return uri.replace(/\?[^#]+/, '?' + paramsNew);
return uri.replace(/(#)|$/, (!paramsUri? '?': '&') + paramsNew + '$1');

в Вашем варианте paramsNew проверяется 3 раза (зачем?).
кроме этих проверок, при пустом paramsNew обрабатываются регулярные выражения (одно или два, если параметры уже есть). зачем все это, если заранее известен результат?
А, мой косяк.
Смотрите последнюю (обновленную) версию, там сократить нельзя.
Sign up to leave a comment.

Articles