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


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

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

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

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

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

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

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

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

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

Single Responsibility Principle.

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

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


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

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

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

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

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



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

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

Код: java
1.
logger.var("x", x);
...
Рейтинг: 0 / 0
Граница дублирования кода
    #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
Граница дублирования кода
    #40013612
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
а где грраница когда надо а когда нет
А нет границы. Потомки её оценят. Если будут материться читая, или ища, или исправляя - значит неудачно вынес/не вынес. Ещё можно ориентироваться не на абстрактное возможное изменение в будущем. Так можно всё что угодно вынести в метод/функцию. А на логическую единицу бизнес-процесса. Тоже ведь на усмотрение.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40013635
fkthis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Здесь SonarQube радостно сообщает что дубликация строковой константы.

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

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

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

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


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

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

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

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

как это обособленные? Где ж таких ф-й взять, которые просто считают 1+1 для себя?
А остальные, которые НЕ обособленные, по 5 штук дублей плодить или где у них граница?
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014040
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
а что вы с ним делаете, когда он в двух местах одинаковый?
правите оба места?
а когда в трёх?

Само по себе дублирование кода еще не является анти-паттерном.
Дублирование (инлайнинг), loop unrolling используется ассемблером и компилляторами
как один из способов оптимизации.

Другое дело что как человек (программист) это видит и как он этим процессом
управляет. Некоторые сишники очень любят использовать многострочные
define которые по сути мультиплицируют код.

Как видите. Вопрос восприятия. Но нельзя быть буквоедом и бюрократом.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014041
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
как это обособленные?

Остальной код может зависеть от функции, но функция не должна зависеть от остального кода. И изменения в остальном коде не должны влечь за собой изменения в функции.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014048
mayton, ну какая разница, что там компиляторы лепят. Ты ещё ООП сюда притащи и расскажи, какой он неправильный с т.з. компилятора, потому что он его обратно в простые ф-и переделывает.
Речь всегда идёт о человеке vs компьютер, чтобы ограниченному в возможностях человеку было легко код сопровождать.
Сишники сами себе злобные буратины - ООПа у них нет, шаблонов нет, концептов тоже не будет... у них своя атмосфэра.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014049
fkthat
Алексей Роза 2020
как это обособленные?

Остальной код может зависеть от функции, но функция не должна зависеть от остального кода. И изменения в остальном коде не должны влечь за собой изменения в функции.

в вашем случае надо будет уточнять "в какой ИЗ ф-й не должны влечь?"
А если одна ф-я не зависит, то и другая не будет зависеть - зачем это вообще тут?
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014050
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
mayton, ну какая разница, что там компиляторы лепят. Ты ещё ООП сюда притащи и расскажи, какой он неправильный с т.з. компилятора, потому что он его обратно в простые ф-и переделывает.
Речь всегда идёт о человеке vs компьютер, чтобы ограниченному в возможностях человеку было легко код сопровождать.

Хорошо. Вот тебе следующая парадигма.

Переменая - это плохо. Она меняется. Это создает трудности в сопровождении. И человеку
трудно сопровождать код с переменными. Надо их срочно убрать.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014051
переменная = ячейка памяти, mayton, куда ты её собрался убирать
тебе обязательно это писать?
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014052
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
переменная = ячейка памяти, mayton, куда ты её собрался убирать
тебе обязательно это писать?

в программировании - всё ячейка памяти.
А специфически переменная - потому так и названа, что является местом хранения изменяемого состояния,
потенциально глобального.
Конечно, это и сопровождать трудно, и правильно заставить работать почти невозможно, mayton прав.
Сказать "у меня есть переменная" тождественно равно утверждению "я знаю как присвоить ей значение, для этого у меня оператор присвоения".

В функциональном программировании переменных нет, потому что нет оператора присвоения значения.
Вот туда её и убрать.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014058
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
переменная = ячейка памяти, mayton, куда ты её собрался убирать
тебе обязательно это писать?

Про ФП слыхал?
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014062
booby
А специфически переменная - потому так и названа, что является местом хранения изменяемого состояния, потенциально глобального.
Конечно, это и сопровождать трудно, и правильно заставить работать почти невозможно

Трудно сопровождать переменные? Невозможно правильно заставить работать переменные?
Ну тогда работайте с адресами памяти напрямую, там же всё просто.
Переменная нужна людям , потому что люди НЕ компьютеры.
Ребят, зачем вы меня троллите, что я вам сделал (
booby
В функциональном программировании переменных нет, потому что нет оператора присвоения значения.
Вот туда её и убрать.

И это нам поможет быстрее сопровождать код, да? А ещё победит дублирование функций...
Вы математику хотите скрестить с программированием? Нравятся их a, b, c переменные, или f(x), или как они одно и тоже дублируют снова и снова?
Вот мне НЕ нравится, поэтому я в другую сторону плыву, а вы зачем это всё сюда притащили, когда мы от дублей пытаемся уйти?
Переменные им уже не нравятся...
mayton
Про ФП слыхал?

Да. Где-то в универе лет 20 назад. Слава богу пронесло.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014064
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020

mayton
Про ФП слыхал?

Да. Где-то в универе лет 20 назад. Слава богу пронесло.

Почему так печально?
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014066
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,

считается, что прикладным программистам не положено работать с адресами памяти напрямую.
Они обязаны в этом ничего не понимать.
А за любую попытку понять и попробовать - должны наказываться.
Вот и все программирование. Хоть какое.

Про математику - вот этот вопрос тоже занимательный.
Понимать в ней программисту, судя по организации некоторых языков, тоже крайне нежелательно.
Иначе могут возникать досадные вопросы - сорта, а почему это язык программирования не требует определения оператора
>= способом, согласованным с определением оператора <.
В самом благосклонном случае получишь ответ - сделай себе сам, раз такой умный.
Практическому программированию оставляется возможность соотноситься с математикой,
как киевскому дядьке с огородной бузиной.

Поэтому, пользуешься ты оператором присвоения, или нет, существенного значения, в конечном итоге, не имеет.

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

Императивное программирование - это "английский" подход.
Вот тебе в руки оператор присвоения, а дальше разлюли-малина, фигом по деревне.
Главное, - ты абсолютно свободен, и секретов никаких нет.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014068
mayton
Алексей Роза 2020

пропущено...

Да. Где-то в универе лет 20 назад. Слава богу пронесло.

Почему так печально?

Да а толку от него, оно что-то упрощает? Ускоряет сопровождение?
В обоих вариантах программирование уже в тупике и довольно далеко от идеала.
Если бы там можно было куда-то развиваться, но там в обоих случаях тупик.
Из компьютера запросто выжимается его максимум через программирование в стандартном виде.
А больше там расти некуда.

booby, ты тот самый человек, который из простого сделает невероятно сложно.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020

Ребят, зачем вы меня троллите, что я вам сделал

Я думаю что никто не троллит. Я думаю что просто применен философский приём,
и было предложено усилить тезис.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020

Да а толку от него, оно что-то упрощает? Ускоряет сопровождение?
В обоих вариантах программирование уже в тупике и довольно далеко от идеала.
Если бы там можно было куда-то развиваться, но там в обоих случаях тупик.
Из компьютера запросто выжимается его максимум через программирование в стандартном виде.
А больше там расти некуда.


Там есть куда расти. Я тебе предлагаю подумать над следующими проблемами.

1) Доказать что мультипоточный код - безопасен.
2) Доказать что код не содержит ошибок.
3) Не содержит побочных эффектов (тоесть вызов функции класса не меняет состояние класса).
4) Доказать что алгоритм хоть когда нибудь остановится.

Это всё проблемы которые были поставлены еще в 20-м веке.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014074
mayton
Алексей Роза 2020

Ребят, зачем вы меня троллите, что я вам сделал

Я думаю что никто не троллит. Я думаю что просто применен философский приём, и было предложено усилить тезис.

мог же просто посмеяться, это же шутка
mayton
Там есть куда расти. Я тебе предлагаю подумать над следующими проблемами.

да всё уже обдумано 10 раз.
НЕКУДА.
НИКАК ты эти проблемы не решишь с такой архитектурой процессора и компьютера.
ТОЧКА.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, шутник. Когда будешь делать шашлык из этой невесты - не забудь пригласить.
...
Рейтинг: 0 / 0
Граница дублирования кода
    #40014126
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
listtoview
не, ну это понятно что дублирующийся код нужно выносить
но например i+++ выносить думаю не стоит
а где грраница когда надо а когда нет

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

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

Single Responsibility Principle.

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

Роберт Мартин

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


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