Рефакторинг а ля "remove dublicate code"
От: TheHobbit  
Дата: 11.02.08 11:21
Оценка:
Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
Re: Рефакторинг а ля "remove dublicate code"
От: DOOM Россия  
Дата: 11.02.08 11:32
Оценка: 1 (1)
Здравствуйте, TheHobbit, Вы писали:

TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?


Не понял в чем проблема?


function a(c,d)
{
 return d*c;
}
function b(c,d)
{
    return c+d;
}
function calc(fname,c,d)
{
    return fname(c,d);
}
alert(calc(a,2,3));
alert(calc(b,2,3));
Re: Рефакторинг а ля "remove dublicate code"
От: Mamut Швеция http://dmitriid.com
Дата: 11.02.08 11:33
Оценка:
Здравствуйте, TheHobbit, Вы писали:

TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?



Ничего не понял


function f1(param)
{
    alert("Фнукция 1\n" + param);
}

functon f2(param)
{
    alert("Фнукция 2\n" + param);
}

function test(f, param)
{
    f(param);
    // или, что еще лучше, f.apply(this, new Array(param)) 
    // таким образом с this передается контекст функции
}


test(f1, "параметр");
test(f2, "параметр");


apply


dmitriid.comGitHubLinkedIn
Re: Рефакторинг а ля "remove dublicate code"
От: anonymous Россия http://denis.ibaev.name/
Дата: 11.02.08 11:46
Оценка: 1 (1) +1
Здравствуйте, TheHobbit, Вы писали:

TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?


В JavaScript имя функции есть имя переменной содержащей указатель на тело функции, потому что функция — это объект.
Re[2]: Рефакторинг а ля "remove dublicate code"
От: TheHobbit  
Дата: 11.02.08 13:57
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, TheHobbit, Вы писали:


TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?


DOO>Не понял в чем проблема?



DOO>
DOO>function a(c,d)
DOO>{
DOO> return d*c;
DOO>}
DOO>function b(c,d)
DOO>{
DOO>    return c+d;
DOO>}
DOO>function calc(fname,c,d)
DOO>{
DOO>    return fname(c,d);
DOO>}
DOO>alert(calc(a,2,3));
DOO>alert(calc(b,2,3));
DOO>


lot of thanks for the answer
Re[2]: Рефакторинг а ля "remove dublicate code"
От: TheHobbit  
Дата: 11.02.08 13:58
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Здравствуйте, TheHobbit, Вы писали:


TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?



M>Ничего не понял


M>

M>function f1(param)
M>{
M>    alert("Фнукция 1\n" + param);
M>}

M>functon f2(param)
M>{
M>    alert("Фнукция 2\n" + param);
M>}

M>function test(f, param)
M>{
M>    f(param);
M>    // или, что еще лучше, f.apply(this, new Array(param)) 
M>    // таким образом с this передается контекст функции
M>}


M>test(f1, "параметр");
M>test(f2, "параметр");

M>



M>apply



lot of thanks for the answer
Re[2]: Рефакторинг а ля "remove dublicate code"
От: TheHobbit  
Дата: 11.02.08 13:59
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, TheHobbit, Вы писали:


TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?


A>В JavaScript имя функции есть имя переменной содержащей указатель на тело функции, потому что функция — это объект.


lot of thanks for the answer
Re[3]: Рефакторинг а ля "remove dublicate code"
От: Mamut Швеция http://dmitriid.com
Дата: 11.02.08 17:20
Оценка:
TH>lot of thanks for the answer

У нас тут кнопочки с оценками есть...


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.