Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function saveOrSaveAsOrMergeDialog(..) {
}function saveDialog(..) {
}
function saveAsDialog(..) {
}
function mergeDialog(..) {
}function saveOrSaveAsOrMergeDialog(..) {
// много лапшакода, куча ветвлений:
// 30 строк кода отвечающих за сохранение
// 30 строк кода отвечающих за мердж
// 30 строк кода отвечающих за всё остальное
}
function saveDialog(..) {
saveUtils();
}
function saveAsDialog(..) {
saveUtils();
otherUtils();
}
function mergeDialog(..) {
mergeUtils();
saveUtils();
}
function saveUtils (){
// 30 строк кода отвечающих за сохранение
}
function mergeUtils (){
// 30 строк кода отвечающих за мердж
}
function otherUtils (){
// 30 строк кода отвечающих за всё остальное
}
// 30 строк кода отвечающих за сохранение
// 30 строк кода отвечающих за мердж
ну и конечно же, у «первого» не будет
потому как он использует один и тот же метод для создания диалога, только с разными параметрами
который еще потом будет заоптимизирован и с помощью дополнительных ветвлений или рекурсии сделан универсальным.
Это вы вообще странное что-то написали. Как можно с помощью рекурсии сделать метод универсальным? О чём вы вообще? Рекурсия — это только часть алгоритма.
Это жесткий маневр, когд обработав часть метода мы вызываем его же с другими параметрами. Например, один метод отвечает за saveAs и save, но автор решает в ходе проверок, что ему легче в случае с saveAs вызвать этот метод еще раз, чтобы он сделал save — это иногда наблюдается у любителей языков с БП, чтобы избежать множества вложений if/else.
function saveOrSaveAsOrMergeDialog(..) {
if (...) {
saveUtils();
}
else if (...) {
saveUtils();
otherUtils();
}
else if (...) { // if на всякий случай
mergeUtils();
saveUtils();
}
}
function saveUtils (){
// 30 строк кода отвечающих за сохранение
}
function mergeUtils (){
// 30 строк кода отвечающих за мердж
}
function otherUtils (){
// 30 строк кода отвечающих за всё остальное
}
А за «первым» не замечали странной тяги к постоянным оптимизациям уже работающего кода, выделению повторяющихся кусков в универсальные библиотеки?
function f(a1, a2) ...
function f(obj)
{
a1= obj.is_special? 1 : 0;
a2= obj.type == 'VIP' ? 'money' : 'time';
....
}
function onClick()
{
...
if(textField1.text == 'Hello!' && button2.state == 'disabled'; ) { ... }
...
}
function onClick()
{
testFormInput(textField1.text, button2.state);
}
function testFormInput(text, state)
{
...
if(text == 'Hello!' && state == 'disabled') { ... }
...
}
$('#button').onclick = function() {testFormInput(textField1.text, button2.state);}
//...
function testFormInput(text, state)
{
...
if(text == 'Hello!' && state == 'disabled') { ... }
...
}
$('#button').onclick = function() {testFormInput(textField1.text, button2.state);}
//...
function onClick()
{
testFormInput(textField1.text, button2.state);
}
function testFormInput(text, state)
{
...
if(text == 'Hello!' && state == 'disabled') { ... }
...
}
/// <summary> /// Form submit method /// </summary> /// <param name="form"> this form</param> /// <param name="obj"> Object of parameters and flags </param>
a = b; // скопируем параметр b в a // вычислим дискриминант уравнения:
D = b^2 - 4*a*c;
// найдём корни:
if(D>0) { .. } else { ... }
Комментарии должны отображать глобальный смысл происходящего:
// вычислим дискриминант уравнения: D = b^2 - 4*a*c; // найдём корни: if(D>0) { .. } else { ... }
var D = MathUtils.discriminant(a, b, c);
var roots = MathUtils.roots(D);
var D = MathUtils.discriminant(a, b, c);
var roots = MathUtils.roots(a, b, D);
var roots = MathUtils.roots(a, b, c);
var discriminant = new Math.Discriminant(a, b, c);
var value = discriminant.value();
var roots = discriminant.roots();
v = new Vector(a, b, c);
roots = v.square_equation_roots();
Гораздо лучше так:v = new Vector(a, b, c); roots = v.square_equation_roots();
square_equation_roots как-то так:function square_equation_roots(){
// вычислим дискриминант уравнения:
D = this.b^2 - 4*this.a*this.c;
// найдём корни:
if(D>0) { .. } else { ... }
}
v = new Vector(a, b, c); roots = v.square_equation_roots();
Выглядит как г#@но, простите за прямоту.
Надо уважать право других программистов быть слабее вас. В конце концов чаще всего над конечным продуктом трудится больше 1го человека.
Вот геймдевелоперов часто видно издалека.
месиво из алгоритма, оптимизаций, хаков считать нормой.
Вот геймдевелоперов часто видно издалека. У них (вас?) есть мощный навык в помойке говнокода видеть четкую структуру, и месиво из алгоритма, оптимизаций, хаков считать нормой
var discriminant = b*b — 4 * a * c;var someEntity = ... ;
var s = ... ; // s is someEntity
// Создадим наш главный рабочий объект
var someEntity = new Processor();
var processor = new Processor();
var mainProcessor = new Processor();
// Основной обработчик клиентских вызовов (для красных вариантов)
var redProcessor = new Processor();
// Вспомогательный обработчик клиентских вызовов (для синих вариантов)
var blueProcessor = new Processor();
// Вспомогательный обработчик клиентских вызовов (для зелёных вариантов)
var greenProcessor = new Processor();
«Однопоточный программист»