Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Граница дублирования кода / 25 сообщений из 42, страница 1 из 2
28.10.2020, 09:26
    #40012475
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
в коде несколько раз повторяется строка
Код: javascript
1.
var $param41 = $('[name^="tpar_template"][value="' + loginTemplateParamId + '"]').closest('[data-param-container="true"]');


нужно ли ее выносить в отдельный метод?
...
Рейтинг: 0 / 0
28.10.2020, 09:47
    #40012484
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
А ты сам как думаешь?
...
Рейтинг: 0 / 0
28.10.2020, 09:50
    #40012485
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Судя по имени переменной $param41 подозреваю что вынесение той строчки не самая большая проблема с читабельностью данного кода ))
...
Рейтинг: 0 / 0
28.10.2020, 10:39
    #40012507
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
не, ну это понятно что дублирующийся код нужно выносить
но например i+++ выносить думаю не стоит
а где грраница когда надо а когда нет
...
Рейтинг: 0 / 0
28.10.2020, 12:52
    #40012572
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
имха, когда метод будет занимать меньше...

меньше места или меньше времени на тестирование.

иначе не стоит
...
Рейтинг: 0 / 0
28.10.2020, 15:47
    #40012687
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview,

Выносить или не выносить вообще никак не связано с размером куска кода. Это должно определяться только тем, насколько этот кусок кода является отдельной логической частью. Иногда и просто сложение двух переменных может иметь смысл вынести.
...
Рейтинг: 0 / 0
28.10.2020, 16:32
    #40012715
Граница дублирования кода
listtoview
а где грраница когда надо а когда нет

если код используется хотя бы 2 раза, его надо выносить в отдельную ф-ю/пер-ю
...
Рейтинг: 0 / 0
28.10.2020, 17:06
    #40012739
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
fkthat
listtoview,

Выносить или не выносить вообще никак не связано с размером куска кода. Это должно определяться только тем, насколько этот кусок кода является отдельной логической частью. Иногда и просто сложение двух переменных может иметь смысл вынести.
Это вынесение для повышения читаемости кода.
C т.з. проектирования нужно выносить всё, что потенциально может меняться.
В первую очередь - код, в качестве которого сомневаешься, связанный с внешними подпрограммами, логикой СУБД, отчетами и т.п.
...
Рейтинг: 0 / 0
29.10.2020, 20:08
    #40013213
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview
а где грраница когда надо а когда нет

В ответе на вопрос "допустим, что-то изменилось. потребуется ли мне править одно и то же в четырёх местах?"
...
Рейтинг: 0 / 0
29.10.2020, 21:48
    #40013248
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview
не, ну это понятно что дублирующийся код нужно выносить
но например i+++ выносить думаю не стоит
а где грраница когда надо а когда нет

Мы тут недавно о микросервисах талдычили. Я несколько раз поднимал книжку Ньюмана. И откладывал.
Нечетко там все. Зыбко.

Но тут к месту цитата.

Single Responsibility Principle.

Собирайте вместе все, что изменится по одной и той-же причине, и разделяйте все,
что изменится по разным причинам.

Роберт Мартин
...
Рейтинг: 0 / 0
29.10.2020, 22:23
    #40013251
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview
не, ну это понятно что дублирующийся код нужно выносить
но например i+++ выносить думаю не стоит
а где грраница когда надо а когда нет


Каждый решает сам, я смотрю на:

- Содержит ли код конкретную идею? (напр, исполняет известную формулу)
- Вероятны ли дополнительные повторения этого фрагмента в будущем?
- насколько вероятны изменения в этом фрагменте? (синхронизация фрагментов)

Одного из критериев для меня достаточно, чтобы обратить код в функцию или (иногда) макро.
...
Рейтинг: 0 / 0
29.10.2020, 22:30
    #40013254
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
тогда повторение кода заменится на повторение вызова метода этого кода ;-D
Inline методы как раз делают обратное - разворачивают методы в прямой код без вызовов, т.к. это перегруз.
Алексей Роза 2020
listtoview
а где грраница когда надо а когда нет

если код используется хотя бы 2 раза, его надо выносить в отдельную ф-ю/пер-ю
...
Рейтинг: 0 / 0
29.10.2020, 22:39
    #40013255
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Иногда я пишу такие строки.

Код: java
1.
2.
3.
logger.info("x = {}", x);
.....
logger.info("x = {}", x);



Здесь SonarQube радостно сообщает что дубликация строковой константы. Ха...
Когда уже создатели правил вкрутят мозг этому сонару... Вобщем заставить дурака
молится. Тоже что фиксить все что ненормализовано в коде. Или... иногда лучше
попить чайку, если возникло желание дедублицировать строки.

Может желание пройдет.
...
Рейтинг: 0 / 0
29.10.2020, 23:04
    #40013258
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
SonarQube, конечно, полная фигня, но в этих строчках, имхо, напрашивается

Код: java
1.
logger.var("x", x);
...
Рейтинг: 0 / 0
30.10.2020, 00:00
    #40013281
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Я иногда сознательно денормализую код. Больше промежуточных переменных. Но ходишь отладчиком
и удобно... Смотришь типы. Тем более код пока в фазе беты.
Хотя его можно переписать в 1 строку. Но я оставлю так.
Агрессивный компиллятор все равно свернет. А мне по человечески
так приятно.

Код: java
1.
2.
3.
4.
 if (columnTypeName.equals(PgTypes.NUMERIC.name().toLowerCase())) {
      BigDecimal bigDecimal = (BigDecimal) sqlFieldValue;
      ColumnVector xColumnVector = batch.cols[i];
      ((DecimalColumnVector) xColumnVector).vector[rowInBatch] = new HiveDecimalWritable(HiveDecimal.create(bigDecimal));
...
Рейтинг: 0 / 0
30.10.2020, 23:50
    #40013612
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview
а где грраница когда надо а когда нет
А нет границы. Потомки её оценят. Если будут материться читая, или ища, или исправляя - значит неудачно вынес/не вынес. Ещё можно ориентироваться не на абстрактное возможное изменение в будущем. Так можно всё что угодно вынести в метод/функцию. А на логическую единицу бизнес-процесса. Тоже ведь на усмотрение.
...
Рейтинг: 0 / 0
31.10.2020, 02:30
    #40013635
fkthis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
mayton
Здесь SonarQube радостно сообщает что дубликация строковой константы.

Дотнетовсккий FxCop ругается уже даже просто на наличие в коде строковой константы
...
Рейтинг: 0 / 0
31.10.2020, 10:39
    #40013657
fkthis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Алексей Роза 2020
если код используется хотя бы 2 раза, его надо выносить в отдельную ф-ю/пер-ю

Ну тут тоже надо без фанатизма. Если сегодня в двух местах код одинаковый, то еще нет гарантии что завтра в этих же двух местах не потребуется разный код, и то что ты вчера "вынес" сегодня придется обратно "заносить". Повторение кода это тоже не критерий, если он, как я уже и писал, не представляет собой действительно отдельный логический юнит.
...
Рейтинг: 0 / 0
31.10.2020, 14:20
    #40013697
Граница дублирования кода
fkthis
Если сегодня в двух местах код одинаковый, то еще нет гарантии что завтра в этих же двух местах не потребуется разный код, и то что ты вчера "вынес" сегодня придется обратно "заносить".

ну и занесу.
fkthis
Повторение кода это тоже не критерий

для меня критерий.
...
Рейтинг: 0 / 0
31.10.2020, 19:34
    #40013774
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
listtoview
в коде несколько раз повторяется строка
Код: javascript
1.
var $param41 = $('[name^="tpar_template"][value="' + loginTemplateParamId + '"]').closest('[data-param-container="true"]');


нужно ли ее выносить в отдельный метод?

Глен Майерс, Композиционное проектирование приложения
...
Рейтинг: 0 / 0
01.11.2020, 10:21
    #40013889
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Алексей Роза 2020
для меня критерий.

Воля ваша. Только спагетти из вызовов непонятных методов, которые вызывают другие непонятные методы вызывающие еще другие непонятные методы ничуть не лучше, чем дублирующийся код.
...
Рейтинг: 0 / 0
01.11.2020, 16:40
    #40013975
Граница дублирования кода
разумеется. Но у меня такого и нет.
понятные или НЕпонятные методы - зависит исключительно от программиста
если их не называть a(), b(), c(), то запросто можно избежать бардака
откуда берётся спагетти вообще не понял. Раньше у вас было 2 ф-и с одинаковым кодом. Теперь у вас 1 ф-я живёт в специальном файле с ф-ями. Откуда тут спагетти?
Она при этом может находиться в наследуемом классе, если речь о классах.
Либо жить отдельно ото всех и иметь название: usr_upd_tasks_cnt(uid);
При этом файл с ф-ями живёт в своей дире /user/
...
Рейтинг: 0 / 0
01.11.2020, 17:11
    #40013983
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Граница дублирования кода
Алексей Роза 2020
откуда берётся спагетти вообще не понял.

Спагетти берется когда эти функции не имеют понятной, точной, и обособленной от остального кода семантики и/или нарушают принцип single responsibility. Я полностью за принцип DRY, но бездумное вынесение кода куда-то на основании только того, что он в двух местах одинаковый, это тоже не подход.
...
Рейтинг: 0 / 0
01.11.2020, 17:57
    #40014001
Граница дублирования кода
а что вы с ним делаете, когда он в двух местах одинаковый?
правите оба места?
а когда в трёх?
...
Рейтинг: 0 / 0
01.11.2020, 17:58
    #40014002
Граница дублирования кода
fkthat
Спагетти берется когда эти функции не имеют понятной, точной, и обособленной от остального кода семантики

как это обособленные? Где ж таких ф-й взять, которые просто считают 1+1 для себя?
А остальные, которые НЕ обособленные, по 5 штук дублей плодить или где у них граница?
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Граница дублирования кода / 25 сообщений из 42, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]