Тёмный

Что такое code smells и его устранение 

Sergey Nemchinskiy
Подписаться 360 тыс.
Просмотров 15 тыс.
50% 1

Вы просили - мы сделали! Вот видео о том, что такое code smells, типичные признаки и устранение code smells. Приятного просмотра ☕ 👀
Підписуйтесь на наш україномовний канал - www.youtube.com/ @SerhiiNemchynskyi
Видео о которых говорит Сергей:
• Исправляем очень плохо...
• Что делать, если твой ...
• Программист, ты должен...
Плейлист по Clean Code - • Clean Code (Как помыть...
🧠 Регистрируйся прямо сейчас на менторинг
⬇️ Учись у профи ⬇️
🦊 Менторинг:
JAVA - go.foxminded.ua/48Yksss
PYTHON - go.foxminded.ua/3SFZBV6
C#/.NET - go.foxminded.ua/42ooRlQ
ANDROID - go.foxminded.ua/3w0VNVs
FRONT-END (ANGULAR, REACT) - go.foxminded.ua/3SIyeJV
SALESFORCE Developer - go.foxminded.ua/3SrZ87F
UI/UX дизайн - go.foxminded.ua/3OsP64X
Unreal Engine - go.foxminded.ua/3ukmt2Z
QA Automation - go.foxminded.ua/48WuuKI
IOS разработка - go.foxminded.ua/49nzkAx
PHP - go.foxminded.ua/3HJHLKv
Unity - go.foxminded.ua/3UpWKkl
NODE.JS - go.foxminded.ua/3Uraewm
GOLANG - go.foxminded.ua/48ZBPcb
Обучение на проекте - go.foxminded.ua/47Z8Q79
🦊 Стартовые курсы для новичков (Java Start, Java Tools, Python Start, C++ Start, C# Start, JS Start) - go.foxminded.ua/3Opr5M4
🦊 Продвинутые курсы для состоявшихся девелоперов:
Enterprise patterns - go.foxminded.ua/3Sn74ae
GRASP and GoF Design patterns - go.foxminded.ua/4bjd38H
Алгоритмы и структуры данных - go.foxminded.ua/490d27U
C# NEXT - go.foxminded.ua/491rEnM
🔧 Пробное техническое собеседование со специалистом уровня Senior Developer/ Team Leader - go.foxminded.ua/3HM7wdf
👔 Карьерная консультация с Сергеем Немчинским - go.foxminded.ua/3vXdULT
Есть вопросы по обучению в FoxmindEd? Пишите нам в телеграм - t.me/foxminded
Вы можете стать спонсором канала и получать плюшки - / @sergeynemchinskiy
❤ FoxmindEd в Instagram: / foxminded.ua
Новый поток авторского тренинга Сергея Немчинского стартует уже 01.02.2024
Сайт FoxmindEd для новичков: go.foxminded.ua/4bn81b3
Сайт для разработчиков уровня мидл+: go.foxminded.ua/4bepank
FoxmindEd в ФБ: / foxmindedco
FoxmindEd в Instagram: / foxminded.ua
Мой Telegram: t.me/nemchinskiyOnBusiness
Для деловых запросов: youtube@foxminded.ua
Тайминг:
00:00 - Вступление Сергея Немчинского
00:42 - Что такое Code Smells
02:02 - Типичные примеры code smells включают
06:51 - Менторинг
07:36 - длинные методы
09:03 - длинный список параметров
11:35 - комментарии
12:44 - ненужные примитивные переменные
13:42 - сгустки данных
16:35 - Что вызывает code smells
17:40 - Устранение code smells с помощью рефакторинга
#nemchinskiy #рефакторинг #codesmells

Опубликовано:

 

31 май 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 107   
@vladbarkovsky3939
@vladbarkovsky3939 3 месяца назад
очень в тему. спасибо, сергей!
@nickolaydrozdov
@nickolaydrozdov 4 месяца назад
Сижу вырезаю тонны древних комментов из кода и тут такое видео😂 Спасибо ❤
@feddos4227
@feddos4227 3 месяца назад
13:01 Тут вообще мимо. Делать переменные что бы получить результат функции и передать дальше - абсолютно нормально, и как раз таки по рукам нужно бить когда пишут вот так: send_to_server(get_sensor_value()). Во-первых, используя переменную, удобнее читать код, потому что если это будет функция, параметр которой вызов другой функции, у которой параметр вызов ещё одной функции- это тихий ужас. Во-вторых, возможно результат нужно будет потом где-то использовать, и не нужно будет переносить туда сюда вызов функции. Ну и самое главное: Дебаг. Дебажить код, где результат каждого вызова находится в своей переменной - намного проще, ибо как узнать результат функции, значение которой передаётся сразу в другую - непонятно. Разве что в некоторых дебаггерах можно прямо в дебаггере вызвать функцию, но это такое себе, ибо не факт что результат будет таким же
@nicolas267s
@nicolas267s 3 месяца назад
Ага, особенно когда таких вызовов много. Читабельность ниже плинтуса. return getSome(getSomethingElse().getAnotherSome(new HereWeGoAgain(name, code)), getThisOneToo());
@TheRodanid
@TheRodanid 4 месяца назад
Интересно и познавательно. Спасибо, Сергей и команда Foxminded!
@LeonidYakovlev85
@LeonidYakovlev85 3 месяца назад
Сергей и весь коллектив канала, традиционное спасибо за выпуск, как всегда здорово - интересно и содержательно 🙏
@borisisavnin9983
@borisisavnin9983 3 месяца назад
Очень понравилось про закоментированный код, слушал и удалял) Отвлекся на минуточку пост тиснуть и сейчас же продолжу. Спасибо, Сергей и твоя команда!
@Nandarion
@Nandarion 4 месяца назад
"ненужные" примитивные переменные, на самом деле это не плохой код. Они нужны чтобы "обозвать" промежуточные данные, чтобы сократить длину строк кода, где есть вложенные вызовы, а так же чтобы смотреть их значение в дебаггере.
@digfig5118
@digfig5118 3 месяца назад
Плюс код стає зрозумілішим. Коли ти запихуєш в цю змінну результат виконання методу, одразу бачиш тип даних, що вертає метод, а також назва змінної вже каже, що, куди і навіщо
@dogis3788
@dogis3788 3 месяца назад
Абсолютно согласен. Может быть с запашком, только в случае если метод очень-очень простой
@Mr43046721
@Mr43046721 3 месяца назад
Спасибо за видео Сергей, классная кофта)
@sergeypekar1058
@sergeypekar1058 3 месяца назад
Надо стрим запилить. Открыть какой-нибудь проект и на прямом примере показать где плохо, а где хорошо)
@PEREPELITSA_KIRILL
@PEREPELITSA_KIRILL 4 месяца назад
Прекрасное видео ещё одна хорошая книга в копилку. Спасибо Сергей пойду читать. А на счёт тренинга да хотим и курс по java тоже а что нет)
@PerfectHolyPervert
@PerfectHolyPervert 3 месяца назад
Спасибо за рекомендацию по поводу книги по рефакторингу.
@vanstrihaar
@vanstrihaar 4 месяца назад
Я стараюсь избегать использование вызова метода в качестве параметра, только в простых случаях. А когда в одной строке вызовов методов 3 и больше - код может тяжело читаться. С другой стороны имя промежуточной переменной может помочь в понимании кода.
@sergeiseivach
@sergeiseivach 3 месяца назад
Совершенно верно, и брейкпоинт поставить на промежуточную переменную - тоже удобно. Как говорит один известный IT-блоггер: любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
@oshastitko
@oshastitko 2 месяца назад
скажем так, лично я не ставлю себе рамок и пишу и так, и эдак в зависимости от "интуитивной необходимости". И да, это единственный аспект в видео, с которым я в чём-то не согласен
@vlera4198
@vlera4198 3 месяца назад
помню я все таки писал комменты в коде. алгоритм был сложноватый и гдето с 3-й строчки у меня самого дымок из ушей шел и я просто даже для себя написал что вот тут я удаляю то-то для тогото и в другом месте тоже чтото написал. Синьоры которые обычно любили клевать на ревью на эти комменты не делали замечания, ну там реально сложно было понять просто читая код, ну и в итоге работал он быстро
@torrvic1156
@torrvic1156 4 месяца назад
Большое спасибо за то, что делитесь знаниями, Сергей! Но вот про свич всё-таки некоторые опытные программисты говорят, что он не так уж и плох. Конечно же хотелось бы ваш рассказ про рефакторинг :) Читать влом))
@oshastitko
@oshastitko 2 месяца назад
"свитч не так уж и плох" может быть только для совсем примитивных вещей, когда, например, записать разные строки в зависимости от значения в какой-нибудь условный лог (и не более) проще, нежели городить и внедрять ещё одну сущность и только в том месте, которая гарантированно будет всегда простой как двери и не требующей тестирования. Тогда, может быть, допускается этот свитч (и то, я не сторонник его, потому как иногда даже совсем простые вещи начинают разрастаться, требуют изменения в старый код и провоцируют регрессивное тестирование)
@Petrovi_-tv5et
@Petrovi_-tv5et 3 месяца назад
Здравствуйте , можете пожалуйста обьяснить на простых словах про DOM JS ? Спасибо
@mmogamespace
@mmogamespace 4 месяца назад
Получается вчера на стриме был "индус" со своими case'ми :)
@semyontikhonenko7937
@semyontikhonenko7937 3 месяца назад
Во всех современных языках давно есть передача параметров по названию
@vladbarkovsky3939
@vladbarkovsky3939 3 месяца назад
меня кстати реально бесит закомментаренный код. типа, там ещё сверху написано "не трогать, оно будет надо тогда-то" причём, оно надо тогда-то уже больше года. я всегда в PR делаю пунктик в конце: "а ещё я удалил из такого-то файла 150 строк кода, который делал ничего". и всёравно мне кидают в PR комментарии "зачем ты убрал - оно будет надо".
@user-ee1lx1pe7n
@user-ee1lx1pe7n 3 месяца назад
Интересен тренинг по рефакторингу))
@vladimirgaydamakin7155
@vladimirgaydamakin7155 3 месяца назад
хорошее видео
@Carrergt
@Carrergt 3 месяца назад
Так буде цікавим. Можливо буде наступним після GRASP and GOF
@randomisgood2619
@randomisgood2619 4 месяца назад
Ура, новое видео!
@user-rg4rp9ie1k
@user-rg4rp9ie1k 3 месяца назад
Спасибо большое за Ваши видео. Прокомментируйте пожалуйста Apple Vision Pro, какие перспективы Вы видите, какой язык понадобится для разработки приложений под Vision Pro. Спасибо !
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
перспективно. Свифт
@jakksoft
@jakksoft 4 месяца назад
Не хватает усидчивости самому читать книгу по рефакторингу, сделайте пожалуйста видеооо, все 10 часов 3 раза пересмотрю)
@rudolfsikorsky7900
@rudolfsikorsky7900 3 месяца назад
Бывает код, покрытый тестами, а у меня - код, порытый туду-шками :)
@user-ts8wv6jh9r
@user-ts8wv6jh9r 3 месяца назад
"одноразовые переменные" использую при отладке, если получаемый объект зависит от времени, или сложно конструировать.
@diatm1506
@diatm1506 3 месяца назад
Сергей что Вы думаете о книге Khalila Stemmlera The Software Design & Architecture Handbook?
@darkart6487
@darkart6487 3 месяца назад
Да я так хотел зарефакторить крафт и готовку. В общем всё вроде нормально объединил, но суть до дела полается нужны другие переменные чтобы показать отличия. Код становится непонятной лапшой. Вывод лучше пусть код повторяется, чем он становится непонятным с первого взгляда
@Karpick_ds
@Karpick_ds 4 месяца назад
Эх, Сергея Немчинского больше не зовут «всё ещё Сергей Немчинский» (( Ушла эпоха
@perekhrestdimon
@perekhrestdimon 3 месяца назад
Вопрос: Если я учусь по видео и делаю по ним проекты, смотрю, что делает автор, и повторяю за ним, и так делаю сайты, это копипастинг? Стоит так делать, или лучше делать самому? Спасибо заранее!
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
Это нормально для начала учебы, но уже пора начинать делать все самому
@user-gj2so1fv6c
@user-gj2so1fv6c 3 месяца назад
"Ненужные переменные", которые сразу после получения передаются, делают для целей отладки, когда нужно понять, что именно возвращает метод. В релизном коде оптимизатор, скорее всего уберет эту переменную.
@oshastitko
@oshastitko 2 месяца назад
да причём тут релиз. Любой "запашок кода" - это для программиста, компилятору вообще пофиг по большому счёту, как код написан, если он выполняет тоже самое. Ненужные переменные усложняют чтение и понимание, по ним непонятно, участвуют они вообще в процессе, влияют на что-то или нет
@user-ux2fc8rz8q
@user-ux2fc8rz8q 3 месяца назад
я программист-любитель. но когда мне нужны были просто координаты - я создал класс с переменными X, Y и сеттерами/геттерами. мне это показалось очевидным! сам додумался! ))
@romanalexandrov2880
@romanalexandrov2880 3 месяца назад
Раньше, когда я что-то переделывал в коде, то заодно сразу рефакторил и закомменченые части - и даже так они мне ни разу не пригодились =D С тех пор, как это заметил, удаляю их без тени сомнения
@illia4228
@illia4228 3 месяца назад
Тренинг по рефакторингу интересен!
@kasparzubarev
@kasparzubarev 3 месяца назад
Если вы пишете на С то полезным будет посмотреть на то как организованы "конструкторы" структур в исходниках ядра Linux. В некоторых драйверах применяются принципы аналогичные принципам используемым в ООП, особенно в драйверах работающих с видеоподсистемой V4L2. Можно много занимательного почерпнуть
@london2163
@london2163 3 месяца назад
Не могли вы снять видео что должен знать джуниор с++
@nikolayrogoza4240
@nikolayrogoza4240 4 месяца назад
За тренинг по рефакторингу двумя руками
@AlexesUA
@AlexesUA 3 месяца назад
Мені точно сподобався би тренінг по рефакторінгу. Та й відео на ~20 годин зайшло би. 20 годин розслабляючого голоса Сергія.... Каєф... 😅
@simpleman6617
@simpleman6617 3 месяца назад
К многим из приведенным здесь советам я допер сам методом проб и ошибок набивая себе шишки-это издеьржки того что я самоучка. Тише едешь дальше будешь - если не торопясь дапшь осмысленные имена переменным если не полениться и вставить коментарий - потом будет проще. Еще много зависит от языка - помню на бейсике была такая каша...
@nicolas267s
@nicolas267s 3 месяца назад
9:05 Я как-то раз дебажил код, в котором один метод отвечал за сразу за чтение, создание, обновление и удаление (!!!) сущностей, в зависимости от набора параметров. Вишенкой на торте было то, что метод, к тому же, вызывался из десятков разных мест. И нет, там не было просто параметра типа action, туда передавалось с десяток разных параметров и всё это иффалось по - "пойди разбери какой" логике. Сам баг заключался в том, что при открытии определённой страницы из базы пропадали данные(кто бы мог подумать...). Естественно я не стал продолжать эту вакханалию, не стал просто подбирать параметры, а разделил все эти функции по своим методам. Тут и список параметров резко сократился. Надеюсь у автора этого кода уши горели, пока я этот клубок распутывал.
@dmitriy9232
@dmitriy9232 2 месяца назад
Даешь тренинг по рефакторингу! ))
@Vlad-ok8wp
@Vlad-ok8wp 3 месяца назад
Коли вкотре чую що метод повинен буту не більше строрінки, так і хочу показати це відіо своєму шефу. В мене на фірмі код в 1000 строк це норма, максімально здається десь біля 2000 . Колі я почінаю працювати с новим для мене методом, пару годин може знадобитись щоб зрозуміти як це працює.
@user-cg4pk1hv7y
@user-cg4pk1hv7y 3 месяца назад
Я добавил бы следующее к code smells: 1) это создание объектов, классы которых реализуют один и тот же интерфейс, через new. Лучше использовать аннотации + рефлексия и создавать объекты в ObjectFactory 2) Использовать pojo классы, сформированные на основе json, вместо этого использовать JsonObject или String + jsonPath
@miminorka
@miminorka 3 месяца назад
вообще очень категорический совет и уж точно неприменимый ко всем ситуациям, повторение (копирование) кода вполне нормально к тем местам, где мы уверенны что логика будет другой, в тех же местах где нам надо чтобы логика была той же, но обьекты другими, надо переделывать под дженерики а не копировать
@oshastitko
@oshastitko 2 месяца назад
если у вас есть похожая, но не точно такая же логика, то это повод вычленить из неё идентичные участки, создать базовый (скорее всего, абстрактный) класс, реализующей эти участки (хотя в последней версии шарпа можно и в интерфейсах писать логику :) ) и в классах-наследниках уже реализовать различия, реализовав соответствующие абстрактные методы, а не городить 2 похожих кода в разных местах
@D1LLERH
@D1LLERH 4 месяца назад
А где Сергей Немчинский? Он вернётся?
@user-lc2tt9kl9g
@user-lc2tt9kl9g 3 месяца назад
Я бы еще к плохому коду отнес лишком длинные классы
@__ali__97
@__ali__97 3 месяца назад
Та самая тонкая грань, между дублированием кода и принципа SRP, как понимать когда нужно реюзнуть уже имеющийся код, а когда нужно написать похожий код, но использующийся в другом месте с похожей, но не точно такой же логикой.
@oshastitko
@oshastitko 2 месяца назад
если у вас есть похожая, но не точно такая же логика, то это повод вычленить из неё идентичные участки, создать базовый (скорее всего, абстрактный) класс, реализующей эти участки (хотя в последней версии шарпа можно и в интерфейсах писать логику :) ) и в классах-наследниках уже реализовать различия, реализовав соответствующие абстрактные методы, а не городить 2 похожих кода в разных местах
@azamjon40
@azamjon40 4 месяца назад
Я удалаю тоже, даже не принимаю такой код )))
@user-cz6mp5vr6z
@user-cz6mp5vr6z 4 месяца назад
На счет мертвого кода, который никто не юзает. Если не ошибаюсь, то компилятор детектит такие куски кода и выкидывает их
@user-rf4yx5qq5r
@user-rf4yx5qq5r 3 месяца назад
Дело не в компиляторах, а в том что человеку не удобно.
@MaximKacc
@MaximKacc 3 месяца назад
Да уж, индусы нынче switch-case'ом пишут)
@zarazlik789
@zarazlik789 3 месяца назад
Даешь тенинг
@profile_pub190
@profile_pub190 3 месяца назад
Ещё бы к запахам кода отнёс void метод get, который что-то изменяет, и метод set который возвращает какое-то измененное значение, и их комбинация когда пропускают промежуточные переменные и в аргументы метода get передают возвращаемое значение метода set 😂 и это не придумано, а описание случая из жизни
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
да ну нахер :) остановите землю, я сойду
@profile_pub190
@profile_pub190 3 месяца назад
@@SergeyNemchinskiy земля в безопасности - было переписано, ускорено и сейчас только история гита хранит упоминание об этом
@oshastitko
@oshastitko 2 месяца назад
у вас уже прям какие-то извращения.... 😀
@profile_pub190
@profile_pub190 2 месяца назад
@@oshastitko доводилось переделывать плохо пахнущий (и работающий) код. В одном случае был труд индийской студии и там транзакция в БД ждала ответа платежного сервиса :D
@olegoleg135
@olegoleg135 3 месяца назад
Про "закомментированный" код улыбнуло. Каждая нормальная IDE поддерживает сворачивание блоков кода любого размера, так что это точно не должно являтся проблемой. Также иногда бывает полезным оставлять такие блоки, чтобы в дальнейшем понимать, как возникла новая версия этого блока. Например, какой-то сложный алгоритм, который был изначально реализован в каком-то методе, потом этот метод был существенно переделан, но без старой версии этого метода трудно понять(если вобще возможно), почему именно так в последствии был реализован алгоритм в данном методе.
@oshastitko
@oshastitko 2 месяца назад
Если новая версия без старой не читается - то, скорее всего, у вас не очень хорошо реализована новая версия. Это скорее повод для рефакторинга, а не повод оставления старого и, скорее всего, уже неработающего кода. Если понять всё равно тяжело - значит, у вас метод взял на себя слишком много, дробите его. Резюмируя: желание оставить старый код прежде всего говорит о проблемах в новом коде
@IgrokBezPontov
@IgrokBezPontov 3 месяца назад
Ну вы даете КАкая разница. Главно что бы программа работала и пользователи были давольны и заказчик А там с как лучше ну это вообще мазохизм и перфекционизм
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
а поддержка?
@MsSmartFox
@MsSmartFox 3 месяца назад
"тимчасові" змінні стануть в нагоді коли ти будеш дебажить код. Замість того щоб визивати метод який повертає значення у code evaluation вікні, ти просто стаєш на потрібний рядок дебагером та дивишся шо метод повернув, та що ти передаєш далі.
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
Взагалі-то будь який дебагер дозволяє подивитись результат визову метода. А ще, краще намагайтесь юзать логуванне + юніт тести заміст дебагга
@miminorka
@miminorka 3 месяца назад
вобще с такими радикальными методами без рассмотрения других вариантов это конечно же экстремизм
@oshastitko
@oshastitko 2 месяца назад
в чём радикализм?
@alekseyshibayev5243
@alekseyshibayev5243 3 месяца назад
Сергей, давно вы современный код не видели, особенно сеньерский. Java превратили в паскаль. Кругом инжект очередного бла-бла-бла-Service, var и перегруженные цепочки функциональщины.
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
да видел
@user-zt2pu1sd7m
@user-zt2pu1sd7m 3 месяца назад
Непонятно что за символ в левом верхнем углу переливается двумя цветами🤔🤔 404
@miminorka
@miminorka 3 месяца назад
копирование кода оправдано 100 если заранее известно что он будет работать отлично от исходного, и в этом случае копировние оправдано, об этом нужно сказать
@user-qd5ir5xt3b
@user-qd5ir5xt3b 3 месяца назад
Конечно, братан, всё нужно: " робить будем пока не помрём." Как говорил один "ИЗ": " куй железо, не отходя от кассы!".
@user-qd5ir5xt3b
@user-qd5ir5xt3b 3 месяца назад
А ещё:" полян'ыца". Всё.
@shurko
@shurko 3 месяца назад
Не надо тренинг.
@user-vu9nz5bc7x
@user-vu9nz5bc7x 3 месяца назад
Все гораздо проще! Как сказал один великий программист: Если твой код работает корректно и выполняет свой функционал,значит - это хороший код. Все остальное второстепенно
@nicolas267s
@nicolas267s 3 месяца назад
Типичная ошибка новичка. Любой код рано или поздно ломается, или его приходится дополнять. Если новому разработчику приходится в твоём коде неделями ковыряться, чтобы разобраться, то это плохой код.
@user-vu9nz5bc7x
@user-vu9nz5bc7x 3 месяца назад
@@nicolas267s Это не мои слова, это слова программиста Маркуса Перссона.
@VitalySem
@VitalySem 3 месяца назад
Що за напівміри? Пахне, попахує, він смердить))
@sergiisuprun
@sergiisuprun 3 месяца назад
Читать книги, когда IDE все подсвечивает и подсказывает, вы серьезно?
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
угу
@pash0k13
@pash0k13 3 месяца назад
"12:44 - ненужные примитивные переменные" - вот не согласен. есть еще простота и читаемость кода. если будет метод, и в этом при вызове метода для передачи значений вызываются еще методы, несколько, - то можно глазки сломать. пример foo(foo1(value1, value2), foo2(value1), foo3(value1, value2, value3)); 👀. уф... если спуститься на уровень ниже - то все равно создается область в памяти, которая содержит результат выполнения метода и затем передается в метод. если создать переменную для сета в метод - то эта переменная будет указывать на результат выполнения метода и затем этот результат будет передан методу который нуждается в этой переменной. в таком случае читаемость кода возрастает в разы. в итоге: не всегда нужно избавляться от переменных которые потом используются в одном месте. как вариант, когда нужно избавиться - если в методе есть переменная, а потом она же возвращается значение из метода - то да, тут хорошо срезу результату делать ретурн.
@SergeyNemchinskiy
@SergeyNemchinskiy 3 месяца назад
я и не говорил - всегда
@pash0k13
@pash0k13 3 месяца назад
@@SergeyNemchinskiy да, но в контексте будто бы подразумевается 'всегда'. ще раз дякую за мувік!
@itlife8792
@itlife8792 3 месяца назад
еще бывает оставляют, старый код закоменченным (прям огромными блоками), или вешают @Deprecated с ссылкой. на новый метод, но я сторонник удалять такое, хотя кто-то оставляет @Deprecated методы, чтобы понять, какой метод пришел на замену
@andreasstager1642
@andreasstager1642 4 месяца назад
Parameter object - костыль для языков, где нет named-параметров. Надо было бы сделать на этом акцент.
@HelloWorld-ln5cy
@HelloWorld-ln5cy 3 месяца назад
Обьясни что такое named- параметры, а то не понятно о чем ты.
@andreasstager1642
@andreasstager1642 3 месяца назад
@@HelloWorld-ln5cy Смотри например Dart.
@_dzen_tv_
@_dzen_tv_ 3 месяца назад
@@HelloWorld-ln5cy function_name(position_param_0, position_param_1, named_param_0=default_value_0, named_param_1=default_value_1) вызов function_name(value_0, value_1, named_param_0=named_value_0, named_param_1=named_value_1) начиная с 3-го именованные параметры А так да в том же winapi функция + структура к ней на десяток параметров.
@HelloWorld-ln5cy
@HelloWorld-ln5cy 3 месяца назад
@@_dzen_tv_ а понял, это не особо решает проблемы, да код немного читаем становится, в c# есть то что вы описали, но это не особо популярный подход, куда проще вместо кучи параметров передать один обьект или структуру и не морочить голову, особенно если эти данные постоянно используются вместе, по типу векторов, проще передать структуру чем три параметра по отдельности. Автор ролика именно о таком и говорит.
@_dzen_tv_
@_dzen_tv_ 3 месяца назад
@@HelloWorld-ln5cy тут есть нюанс get_users(UserFilter(param0=0, param1=1, ...)) против get_users(param0=0, param1=1, ...) Другое дело что архитектурно get_users будет расположена на слое репозиториев, а UserFilter будет определён где-нибудь в файле filters.
@andreasstager1642
@andreasstager1642 4 месяца назад
В большинстве нормальных компиляторов есть tree shaking, который отбрасывает неиспользуемый код. Как код, который никто никогда не вызывает, может приводить к ошибкам, для меня вообще загадка.
@Nandarion
@Nandarion 4 месяца назад
Это зависит от языка и компилятора. В си и плюсах UB в неиспользуемом коде дает право компилятору попортить, вернее неправильно соптимизировать рабочий код.
@sergeypekar1058
@sergeypekar1058 3 месяца назад
Еще как может. У меня такое было не один раз когда я начинал использовать какой-то легаси класс (который, кстати, как легаси никто не пометил(, а потом, оказывалось, что он уже давно устарел и нужно было использовать другой. А все потому, что кто-то решил, что это хорошая идея - оставить старый код в проекте
@vanstrihaar
@vanstrihaar 3 месяца назад
Лайт-вариант - новички могут посмотреть и решить "раз есть - значит норм", и делать похоже.
@nicolas267s
@nicolas267s 3 месяца назад
Очень просто может, хоть на этапе компиляции, это проще исправить, хоть при запуске. Например, если зависимый код был изменён. Даже если его в рантайме никто не вызывает, он может загружаться при инициализации и кидать исключения.
Далее
How Cast Saws Don’t Hurt Your Skin 🤔
0:36
Просмотров 52 млн
Почему все ненавидят PHP
12:48
Просмотров 3,3 тыс.
Dependency Injection простыми словами
18:17