|
Труд вопреки насмешкам
|
|
DuplicateFinder Preview 1.019.10.2020, 22:03. Показов 6131. Ответов 60
Метки нет (Все метки)
Как известно, самая главная проблема "грязного" кода - необходимость обновлять множество дубликатов одного и того же фрагмента. И бОльшая часть улучшений в хороших языках посвящены борьбе с дублированием. Но чтобы этими улучшениями воспользоваться, нужно сначала это дублирование найти. А при запросе в Google "поиск дублирования в коде программа" я не нашел ничего внятного. Большинство таких "программ" либо являются плагинами для конкретной IDE, либо их нельзя нормально установить, либо они содержат кучу ненужного функционала и стоят десятки, а то и сотни долларов. Поэтому я решил создать свою программу для поиска дублирования в коде, изолированную от IDE, запускаемую двойным кликом по исполняемому файлу в WinRAR и производящую только поиск дублирования и ничего другого.
Важно: я не собираюсь зарабатывать на этой программе. Она бесплатна, и создана для облегчения жизни программистам. Преимущества: 1. Работает ![]() 2. Основана на самом известном алгоритме поиска повторов - Лемпеле-Зиве. 3. Обнаруживает только повторы длиной не меньше 6 лексем. 4. Длина словаря составляет 5000 лексем. 5. Обнаруживает даже частично повторяющиеся фрагменты! 6. Игнорирует тривиальные фрагменты, такие как одно свойство из нескольких лексем или вызов метода плюс-минус число. 7. Показывает, на каких строках и в каких позициях находятся дубликаты. 8. Показывает начало повторяющегося фрагмента кода и конкретные отличия. 9. Показывает текущую позицию в окне кода. 10. Остутствие привязки к ключевым словам конкретного языка. Работает для всех Си-подобных языков, а возможно, и для каких-то других. 11. Можно изменять размер окна. 12. Вычисления выполняются в отдельном потоке. 13. Минимум пересоздания строк вследствие конкатенации, что приводит к приемлемому времени работы даже на длинных кодах. 14. На случай длинного кода припасены полосы загрузки. Но, как правило, дубликаты находятся моментально. 15. Программа не содержит ненужного функционала, весит немного и не требует сложной настройки. Недостатки: 1. Иногда сообщает о дублировании, которое нельзя устранить. 2. Вследствие приемущества 10, может посчитать последовательность ключевых слов как дубликат. 3. Обнаруживает только первую тривиальную длину. Если она маленькая, а есть больше, может ошибочно посчитать дубликат нетривиальным и выдать сообщение, что это проблема. 4. В выводимых фрагментах кода не сохраняет его пробельную структуру. 5. Не обнаруживает повторяющиеся комментарии. 6. Может включить в дубликат точку с запятой и перевод строки. 7. Не разбирается в том, класс это, функция, или что-либо другое. 8. Не показывает длину выделения в окне кода, только его начало. 9. Вероятно, потребляет больше памяти, чем можно было бы. Ну как, нормально?
1
|
|
| 19.10.2020, 22:03 | |
|
Ответы с готовыми решениями:
60
preview - next Настройка preview Taskbar Preview |
|
Труд вопреки насмешкам
|
|
| 19.10.2020, 23:12 [ТС] | |
|
Билд второй. Существенно улучшилось обнаружение тривиальных повторов, недостаток 3 больше не актуален.
0
|
|
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
|
| 20.10.2020, 06:31 | |
|
Etyuhibosecyu, ну не знаю) Как бы, пускай будет. Но я сомневаюсь, что это кому-то полезно будет. "Программисты", которые настолько люто копипастят, что им может понадобиться такая программа, просто не будут испытывать в ней потребности, ибо им просто наплевать, иначе бы они не копипастили. А нормальные разработчики просто не будут тупо копипастить и сразу постараются сделать нормально.
0
|
|
|
|
||
| 20.10.2020, 08:50 | ||
|
При запуске:
0
|
||
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
||
| 20.10.2020, 09:07 | ||
self-contained. Кладёт сборки рантайма рядом с самой прогой. И даже в единый EXE можно всё упаковать. Просто кто-то не любитель читать документацию
0
|
||
|
Труд вопреки насмешкам
|
|
| 20.10.2020, 09:17 [ТС] | |
|
Pro_grammer, норма. Программа создавалась на .NET Core, соответственно, во время работы без его среды выполнения никак. Мне кажется, в наше время на современные системы .NET Core устанавливается с первой нормальной программой, как и .NET Framework. Даже если у вас не так, скачать 52 МБ в наше время - ну не знаю, что может мешать.
0
|
|
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
||
| 20.10.2020, 09:22 | ||
|
0
|
||
|
Труд вопреки насмешкам
|
||
| 20.10.2020, 09:23 [ТС] | ||
|
0
|
||
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
|
| 20.10.2020, 09:39 | |
|
Etyuhibosecyu, а я не знаю ни одного разработчика, который тупо копипастит код в проекте. Не найти какой-то мелкий хелпер и написать его заново? Ну может быть такое. Но такой код всё равно будет отличаться от исходного и подобная тулза может его и не найти. Да и не так это критично.
А так, накопировать столько, чтобы нужно было потом за собой чистить... Зачем?
0
|
|
|
Труд вопреки насмешкам
|
||
| 20.10.2020, 10:06 [ТС] | ||
|
0
|
||
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
|||
| 20.10.2020, 10:31 | |||
|
0
|
|||
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|
| 20.10.2020, 10:36 | |
|
В процессе долгой практики программирования использовал разные принципы программирования. Так вот как показала практика универсальные классы обедняющие общий код иногда (а может и нет) становятся сплошным гемороем.
Например две сущности, как любят в учебниках писать, стол стул. У них вроде есть одинаковые вещи по смыслу - ножки, столешница. Так и тянет сделать общий класс. Вот только в последствии выясняется что стул это мягкий пуф или вообще мешок с пенопластом. А стол мраморный. Короче хочу довести мысль что в результате получается столько if - что потом смотришь на эту кашу и думаешь, а оно мне надо. И делаешь 2 разных класса. В них есть одинаковый код. Зато остальное разное. И читается такой код лучше и изменять что то - нету никакого геморроя. Никакие наследования за собой не тянут. Так что повторяющийся код это нормально. И вообще красивость кода это не отсутствие повторений - а лёгкость понимания кода и лёгкость дальнейшей разработки. А то возьмёшь такой красивый код без повторений, как добавишь новую фичу -и у тебя всё по каскада как начнёт рушится. Попробуйте интерфейс изменить - который реализуют 100500 классов. Что по поводу поиска слов-выражений использую добрый старый totalcomander->поиск файлов->с текстом. Всё удобно и не надо ничего изобретать. Иногда надо поменять название переменной/класса или что то другое (например мне для процедур SQL-ных нужно было) и что бы вручную не искать всё и менять, написал за 10 минут утилитку замены текста. Может кому пригодится. Т.к. писал 10 минут то не особо там смотрел за растягивание и прочее, мне не нужно было.
0
|
|
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
||
| 20.10.2020, 10:41 | ||
|
0
|
||
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|||
| 20.10.2020, 10:54 | |||
|
Да и честно - копипаста или нет это дела конкретного программиста, конкретной команды, конкретного кодевьювера. Хотят делают, хотят не делают. Сейчас совершенно другие ценности. Чем быстрее и дешевле тем Добавлено через 3 минуты
0
|
|||
|
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
|
||||
| 20.10.2020, 10:56 | ||||
|
0
|
||||
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|||
| 20.10.2020, 11:04 | |||
|
0
|
|||
|
Труд вопреки насмешкам
|
||
| 20.10.2020, 11:05 [ТС] | ||
|
Билд третий. Если код повторяется несколько раз подряд, тривиальность игнорируется и считаются фрагменты начиная от двух лексем. Также теперь есть автономная сборка, но файл весит 137 МБ.
0
|
||
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
||
| 20.10.2020, 11:42 | ||
|
Добавлено через 3 минуты Upd. Мне даже стало интересно что ваша программа найдёт в одном мегапроекте. И я её скачал. И..... Где выбор папки? Вы предлагаете вставить тупо текст ![]() Вы хоть немного представляете как будут пользоваться вашей программой другие люди?
0
|
||
|
Труд вопреки насмешкам
|
|
| 20.10.2020, 12:39 [ТС] | |
|
Билд четвертый. Снова как на основе .NET Core, так и автономный. Теперь можно перетащить файл или даже несколько файлов. После этого даже не нужно нажимать на кнопку, поиск дубликатов запускается сразу после отпускания левой кнопки мыши.
0
|
|
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|
| 20.10.2020, 12:47 | |
|
Нужна папка. Вы же позиционируете программу как поиск повторяющихся кусков кода. И много вы видели проектов состоящих из 1 файла?
Добавлено через 3 минуты И да, .net core forms - это пока непонятно зачем созданая вещь. Работает только под фортачками - где пока что основное это framework - и. Думаю для отладки выкатили, конечная цель же кроссплатформенность Так что такую утилиту следовало делать под framework
0
|
|
| 20.10.2020, 12:47 | |
|
Помогаю со студенческими работами здесь
20
Preview Panel Preview Pane Вывод preview
Получить preview картинок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|