Исправляем очень плохой код | Clean Code

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ส.ค. 2024

ความคิดเห็น • 109

  • @SergeyNemchinskiy
    @SergeyNemchinskiy  5 วันที่ผ่านมา

    ❗❗Программисты, которые пишут на ООП языках, обращаюсь к вам, расширяйте свои знания! Регистрируйтесь на anvanced лекцию, которая состоится уже 29 августа в 15:00. Мы рассмотрим самые популярные паттерны GoF и разыграем 3 места на мой авторский тренинг GRASP & GOF Design Patterns. Присоединяйтесь к нам, регистрируйтесь - go.foxminded.ua/4cBRxeP

  • @nikolayrykov
    @nikolayrykov 7 หลายเดือนก่อน +33

    Сергей, запишите, пожалуйста, видео на тему 'Декомпозиция предметной области'. Существующее видео плохого качества, да и мало кто его найдёт на канале. А тема очень нужная!

    • @user-ym7zd2ni5o
      @user-ym7zd2ni5o 7 หลายเดือนก่อน +4

      Поддерживаю, будет очень интересно, с учетом нового опыта и актуальных примеров

    • @user-ut2lu1kz1v
      @user-ut2lu1kz1v 5 หลายเดือนก่อน +1

      Да, отличная идея

  • @ME-fv1ug
    @ME-fv1ug 7 หลายเดือนก่อน +15

    Было бы интересно узнать от Сергея Немчинского, подробный способ рефакторинга, от Мартина Фаулера, превращение метода в класс.

  • @SergeyNemchinskiy
    @SergeyNemchinskiy  7 หลายเดือนก่อน +4

    🔥 Новый поток авторского тренинга Сергея Немчинского GRASP and GoF Design patterns стартует уже 01.02.2024
    Регистрация 👉 go.foxminded.ua/4b4M3JI

  • @evgeny910
    @evgeny910 7 หลายเดือนก่อน +6

    Спасибо большое, интересно было бы так же посмотреть про рефакторинг

  • @shoorick77
    @shoorick77 7 หลายเดือนก่อน +5

    01:15 Помимо переменной цикла (которая не только 𝑖, но и 𝑗, и даже 𝑘, когда циклы вложенные) есть ещё один случай - когда это координаты, тогда 𝑥, 𝑦 и 𝑧 - вполне нормальные имена.
    Есть ещё один случай - в языке Perl в функциях сравнения используют однобуквенные переменные 𝑎 и 𝑏, но это уже чисто перловая особенность, которая актуальна только внутри таких функций - в иных местах perlstyle и Perl Best Practices советуют не делать так.

    • @jewgenijmoldawski3306
      @jewgenijmoldawski3306 5 หลายเดือนก่อน

      Вот еще: c-counter, s-sum, l-length, n-name, e-exception

    • @shoorick77
      @shoorick77 5 หลายเดือนก่อน

      @@jewgenijmoldawski3306 мне из всего этого набора часто попадалось только e.

  • @__ali__97
    @__ali__97 7 หลายเดือนก่อน +2

    Сергей вы с этим циклом роликов про клин код прям в самое время! я только начал искать инфу и обучаться клин кодингу 👍

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      Делитесь потом успехами.

  • @borisisavnin9983
    @borisisavnin9983 7 หลายเดือนก่อน +2

    Очень наглядно, лаконично и ёмко! Спасибо!

  • @ProHolmes
    @ProHolmes 2 หลายเดือนก่อน

    название из одной буквы подходит, ещё если это координата, и из контекста понятно, что речь идёт о координатах)

  • @denisskyter4526
    @denisskyter4526 7 หลายเดือนก่อน +2

    Все круто , Сергей , если можно , то давайте больше роликов с показание кода и вашем комментированием

  • @vi_man
    @vi_man 2 หลายเดือนก่อน

    Индексы в циклах (i, j, k), координаты (x, y, z), цвет (r, g, b, a), размеры (w - width, h - height). Это только часть примеров где можно (и нужно) использовать однобуквенные обозначения. Гораздо хуже когда имени вообще нет. Ну например в с++ можно сделать объявление функции вот так: "void sum (int, int);", а само тело функции спрятано в либе. И хорошо если по названию ты сможешь понять что за два инта передавать, а если нет? Только доки спасают.

  • @user-ym7zd2ni5o
    @user-ym7zd2ni5o 7 หลายเดือนก่อน +4

    Мабуть, це найкраще корисне відео на каналі у цьому році. Грунтовне пояснення, доступні приклади. Треба збарегти його собі у закладки, і періодично переглядати.

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      ми раді, що вам це відео було корисним

  • @user-ym7zd2ni5o
    @user-ym7zd2ni5o 7 หลายเดือนก่อน +4

    9:58 Настал тот час, когда в разговоре Сергея появились украинизмы))

  • @ozimandias1858
    @ozimandias1858 5 หลายเดือนก่อน

    Очень понравилось!

  • @hammerok3932
    @hammerok3932 7 หลายเดือนก่อน +4

    Больше примеров богу примеров! Спасибо.

  • @Sernik_z_rodzynkamii
    @Sernik_z_rodzynkamii 7 หลายเดือนก่อน +2

    Я джаваскриптизер, понравился анализ. Спасибо!

  • @valpalchenko3982
    @valpalchenko3982 7 หลายเดือนก่อน +2

    Интересно, расскажите про рефакторинг

  • @_GyG_
    @_GyG_ 7 หลายเดือนก่อน +1

    Перемнные из одного символа, такие как X и Y, в контексте позиционирования элемента тоже понятны

  • @EngineeringLabChannel
    @EngineeringLabChannel 7 หลายเดือนก่อน +1

    Не впевнений в останньому прикладі, що створення "під капотом" об"єкта stream, ітерація по ньому обрахування суми (в деякому сенсі reduce) + додаткова робота для GC буде працювати швидше, як стверджує автор, за класичний for-loop. Щодо інших переваг зміненого коду - погоджуюсь.

  • @georgepro8481
    @georgepro8481 7 หลายเดือนก่อน

    Было бы хорошо поиметь исходный код в гите и его рефакторинг в бранче. Чтобы попытаться самостоятельно повторить весь путь.

  • @user-ng6nx1uo5u
    @user-ng6nx1uo5u 7 หลายเดือนก่อน

    Спасибо за видео. Такой вопрос: как вы относитесь к такой штуке в VS Code как Codeium, я тут попробовал, мне понравилось, что он за тебя пишет ту часть, которую тебе лень писать, тебе остается только править под свои требования. Какие подводные камни, кроме потакания своей лени?

  • @nabludatel4230
    @nabludatel4230 7 หลายเดือนก่อน

    Сергей, запишите пожалуйста видео как строить код, как разбивать на функции , как выделять классы, конфигурации,

  • @VanTwo
    @VanTwo 7 หลายเดือนก่อน

    5:50, я бы сказал AddAndPrint это уже реализационное углубление в названии метода, чем нарушение srp. Что тоже является ошибкой
    9:30, стоило бы так-же добавить что рекомендованная длина метода - до 20 линий

  • @user-lh6ku1kb4r
    @user-lh6ku1kb4r หลายเดือนก่อน

    19:27 Тут я вообще не понял зачем избыточно плодить классы. Да еще и методы которого в качестве аргумента принимают экземпляр класса. Зачем?
    20:28 А по производительности более декларативные способы не будут медленнее в некоторых ситуациях? А если вы пишете не на Java? for(int i;i

  • @user-qi3pr7df3x
    @user-qi3pr7df3x 6 หลายเดือนก่อน

    Блин то класс это только "Моделька и поведение" все остальное от лукавого, то "Используйте simple domain model"

  • @kobalt-tv-777
    @kobalt-tv-777 7 หลายเดือนก่อน +1

    Интересно было

  • @DIMONIKOS
    @DIMONIKOS 7 หลายเดือนก่อน

    Продолжайте!

  • @n0ikolay
    @n0ikolay 7 หลายเดือนก่อน

    Сергей, это лайк, это подписка, и даже мать его КОЛОКОЛЬЧИК на канал!

  • @vitaliy0192
    @vitaliy0192 7 หลายเดือนก่อน

    Сергей, возможно вы сможете рассказать в своем видео. В интернете или у ИИ не смог найти ответ на вопрос. Вот чего я пока что вообще не понимаю:
    В вакансиях на java developer в требованиях часто указана kafka.
    Если я java developer, то кроме получения или отправки сообщений в топик kafka, что ещё мне надо знать или уметь?

  • @vahagn-gishyan
    @vahagn-gishyan 7 หลายเดือนก่อน

    Считается ли нарушением принципа Single Responsibility, если метод одновременно выполняет определенные действия и осуществляет логирование процесса?

  • @PredatorAlpha2
    @PredatorAlpha2 7 หลายเดือนก่อน

    Как по мне, короткое название метода process() вполне уместно, особенно если класс наследуется от абстрактного AbstractProcessor, где этот метод абстрактный.. Но тогда нужно максимально понятное название подклассов. Тогда такие классы-процессоры можно вызывать, допустим, по расписанию, для выполнения некоторый действий.

  • @spiritfrombook
    @spiritfrombook 7 หลายเดือนก่อน

    Хотим видео про рефакторинг, превращение метода в класс

  • @OlexLebed
    @OlexLebed 7 หลายเดือนก่อน

    использование счетчика і в цикле - единственньій случай, когда значение переменной из одной букві всем понятно.. (1:30)
    class Point {double x, y, z;};
    class Vector {double x, y, z;};
    ну да, ну да...

  • @romankuznetsov4601
    @romankuznetsov4601 7 หลายเดือนก่อน

    книга "Чистый код" спорная во многом

  • @user-un4on4oc3l
    @user-un4on4oc3l 7 หลายเดือนก่อน

    Будет понятно, переменная "х" и "y"))

  • @vermilinguas
    @vermilinguas 7 หลายเดือนก่อน +1

    Скажіть будь-ласка, а оплата частинами можлива? 😁

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      Вітаю! Вас цікавить тренінг GRASP and GoF Design patterns? На нього немає оплати частинами як і на інші тренінги. А якщо ви про менторинг, то оплата відбувається помісячно.

    • @vermilinguas
      @vermilinguas 7 หลายเดือนก่อน

      @@alexandrapersukova дякую за відповідь

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน +1

      @@vermilinguas І вам! Якщо ще будуть питання, то я буду рада відповісти)

  • @postoronny
    @postoronny 7 หลายเดือนก่อน

    В интерпретируемых языках короткие имена быстрее обрабатываются ;)

  • @user-fb6of7uy4w
    @user-fb6of7uy4w 7 หลายเดือนก่อน +1

    ине всё интересно)☺️

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน +1

      отлично, включите колокольчик, чтобы не пропускать новые видео и эфиры)

  • @Mr43046721
    @Mr43046721 7 หลายเดือนก่อน

    Интересно узнать про пример рефакторинга от М. Фаулера, про то, как красиво сделать метод классом

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน +1

      Ваш ответ записан. Сделаем! :)

  • @redneck_prm5429
    @redneck_prm5429 7 หลายเดือนก่อน +3

    Интересно, лет через десять до жаберов дойдет, что лепить везде геттеры и сеттеры лишено смысла, или так и продолжат цепляться за "а у нас так принято"?

    • @PredatorAlpha2
      @PredatorAlpha2 7 หลายเดือนก่อน

      У нас, джавистов, часто используется доступ к полям объекта со стороны сторонних библиотек, которые ничего про объект не знают, кроме имени полей - например при сериализации или обработчики вьюх для MVC. И им гораздо быстрее работать через геттеры сеттеры, чем через голую рефлексию. Да и хотел бы я на тебя посмотреть, если тебе понадобиться подменить объект его проксей, например для ленивой загрузки по сети, если на нем не будет геттеров и сеттеров.

    • @redneck_prm5429
      @redneck_prm5429 7 หลายเดือนก่อน

      @@PredatorAlpha2 Если библиотека знает имена полей, то зачем там рефлексия? Да и лепить их где попало только на случай "а вдруг нам понадобиться" - как раз приводит к тому, что в итоге лепят уже просто потому, что "так принято", без подключения мозга.

    • @jewgenijmoldawski3306
      @jewgenijmoldawski3306 5 หลายเดือนก่อน

      Сейчас да, простые геттеры/сеттеры не нужны, т.к. доступ к полям в основном осуществляется через фреймворки. Раньше имело смысл, но эти времена прошли.

  • @vasyltokarskyi5743
    @vasyltokarskyi5743 7 หลายเดือนก่อน

    А де можна записатись на кар‘єрну консультацію?

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      Перше посилання після таймінгу в описі під цим відео

  • @user-nu2jz1sb4s
    @user-nu2jz1sb4s 7 หลายเดือนก่อน

    Вот никогда, кстати, не понимал, зачем джависты в DTO пишут геттеры и сеттеры? Чего там инкапсулировать? Если поменяется формат входящих данных (или исходящих), по любому этот DTO и всё, что с ним связанно, будет переписано. Типа засовывать в DTO логику, чтоб старые геттеры работали с новыми данными? Но он тогда перестаёт быть DTO, разве нет?

    • @TheLoveKusano
      @TheLoveKusano 6 หลายเดือนก่อน

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

    • @user-nu2jz1sb4s
      @user-nu2jz1sb4s 6 หลายเดือนก่อน

      @@TheLoveKusanoНу если берём чистый паттер DTO, то он ничего валидировать не должен, он должен чисто содержать данные. "Data Transfer Object, в отличие от business object или data access object не должен содержать какого-либо поведения." - из вики.

    • @jewgenijmoldawski3306
      @jewgenijmoldawski3306 5 หลายเดือนก่อน

      В настоящее время, согласен, это пережиток прошлого т. к. то для чего были getter и setter сейчас решается по-другому.

  • @dim3787
    @dim3787 7 หลายเดือนก่อน

    Хлопцы, 15:04 - бегом за знаниями - дякуйте

  • @nikolaybaranov2213
    @nikolaybaranov2213 7 หลายเดือนก่อน

    Сергей! Спасибо за прекрасный очередной «урок» в доступном изложении. Clean Code - это то, что очень важно для нас, human’ов. Но что Вы скажете про тренд на то, что AI заменит кодеров и всё то, что для нас важно, станет вообще не важным? Вот первый попавшийся ролик-дискуссия на эту тему th-cam.com/video/Is70d3yoQvk/w-d-xo.html
    Интересно Ваше мнение на тему актуальности олдскульных подходов. Думаю, оно достойно отдельного разговора.

  • @YacobMonar
    @YacobMonar 7 หลายเดือนก่อน

    По поводу первого примера("не сингл респонсибилити") метод возвращает результат. Если просто написать что-то типа System.out.println(d + e); это ж по сути выполнение одной задачи... Почему это не сингл матьевореспонсибилити!? Может в классе больше нечего будет принтить и потому нету смысла создавать отдельный метод...

  • @postoronny
    @postoronny 7 หลายเดือนก่อน +1

    А я плохим кодом считаю сишные фигурные скобки. Не сами скобки, разумеется, а их расположение: когда открывающая расположена в конце строки, попробуй догадаться, какая из закрывающих в этой (а, может быть, и не в этой вовсе) лестнице к ней относится...
    Я всегда ставлю открывающую точно над закрывающей. Да, это требует лишней строки, зато код сразу становится читабельным.

    • @PredatorAlpha2
      @PredatorAlpha2 7 หลายเดือนก่อน

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

  • @YT_User376
    @YT_User376 7 หลายเดือนก่อน

    У меня есть вопрос. Можно учить языки программирования в 14 лет?

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      Можно, а почему нет)

    • @jewgenijmoldawski3306
      @jewgenijmoldawski3306 5 หลายเดือนก่อน

      Я учил детей программированию. Из опыта: в 14 можно, но большинству приходится по ходу дела очень много объяснять вокруг, в зависимости от приложения. Например системы координат, если это игры.

  • @SemenNaduiev
    @SemenNaduiev 7 หลายเดือนก่อน

    Про тудушки не погоджусь, іноді виникає пробелма, яку потрібно вирішити в іншому таску, щоб скоуп твого таску не розростався, ти ствролєш ТУДУ, але З ПОСИЛАННЯМ на створену таску/багу, яка буде в скоупі якогось релізу або беклозі і буде пофікшена

  • @sergeypekar1058
    @sergeypekar1058 7 หลายเดือนก่อน

    Первый пример как будто обфускатором прошелся

  • @user-vu6hn4ul2i
    @user-vu6hn4ul2i 7 หลายเดือนก่อน

    12:50 к черту подробности и комментарии, откуда в этом методе взялась data? В параметрах я её не вижу, а если это член класса, то где this? 🤔

    • @user-if3cj1uf3d
      @user-if3cj1uf3d 7 หลายเดือนก่อน

      это поле класса. В джаве для обращения к полю класса this необязательно. this используется только в случае, если есть несколько полей / параметров с таким именем, и нужно явно указать что нужно именно поле класса

    • @user-vu6hn4ul2i
      @user-vu6hn4ul2i 7 หลายเดือนก่อน

      @@user-if3cj1uf3d прикольно. Выглядит противоречащим философии Java, но, похоже, это так.

    • @user-if3cj1uf3d
      @user-if3cj1uf3d 7 หลายเดือนก่อน

      @@user-vu6hn4ul2i не совсем понимаю что ты имеешь ввиду под философией джава. В ней сплошь и рядом встречаются места где что то можно не писать, если это не является необходимым

  • @user-zi8zw3yf2t
    @user-zi8zw3yf2t 7 หลายเดือนก่อน

    1:30 j, k

  • @sergeiseivach
    @sergeiseivach 7 หลายเดือนก่อน

    Ну последний пример, такое себе... Был нормальный оверлоадинг, простой и понятный любому джуну, купившему вчера книжку по программированию. А такой синтаксический сахар с многоточиями и стримом из библиотеки, нужно пять раз перечитать прежде чем понять и удивиться, нафига так намудрили. И уж точно, в отличие от первого, не понятный программисту, пришедшему из другого языка.

    • @universeunity9970
      @universeunity9970 29 วันที่ผ่านมา

      Ну если джун прям удивляется использованию стримов, тогда всё не очень хорошо. Тем более, таких методов может быть не два, а десятки, а сделать всё это можно в одном, одной строчкой. Стримы ведь не просто так придуманы.

  • @georgepro8481
    @georgepro8481 7 หลายเดือนก่อน

    " ... примеры кода будут на Джаве, ну а какой ещё язык я должен был выбрать ...". К сожалению Мартин Фаулер в переиздании 2019 года выбрал Javasript.. Предатель!

  • @alexandr1408
    @alexandr1408 6 หลายเดือนก่อน

    200 строк кода?.. пффф, слабо как-то. На нашем проекте (достался по наследству) методы по 1000-2000 строк, притом это методы в самом контроллере. Прям портянка со всей непростой логикой. Думаю, всем и так понятно, что там со слоями, зависимостями, ответственностями и пр. никому ненужными придумками ))

  • @dmitrysavkin5981
    @dmitrysavkin5981 7 หลายเดือนก่อน

    Про комментарии. Немцыв постоянно на немецком пишут, пишут названия методов на немецком. И ничего. Придет индус и будет матерится? А после индуса мы)?

  • @DimaVort
    @DimaVort 7 หลายเดือนก่อน

    Я би клас із першого прикладу назвав counter а не calculator. Це краще відображає його суть.

  • @user-zy5nn1om9e
    @user-zy5nn1om9e 7 หลายเดือนก่อน

    Сергію, ви ж хоч кажіть, що у вас є україномовний канал, ато я вже половину відео з нього подивився (через рекомендації), і весь час думав, що це відео з цього, основного каналу😅

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      Охх. знайшли, підписалися?)

  • @user-iv5co4lu9g
    @user-iv5co4lu9g 7 หลายเดือนก่อน

    Джиннннееееееееееерикиииии эээхххххе хе хээээээээээ

  • @viacheslavkarpenko2162
    @viacheslavkarpenko2162 7 หลายเดือนก่อน

    Вітаю!
    th-cam.com/video/3QY6zbNiXY4/w-d-xo.html
    Поясніть будь ласка чому клас User не може мати методів save print а клас UserService має методи saveUser та printUser? На перший погляд можна реалізувати все в класі User.
    І наче логічніше винести зберігання, видалення, оновлення, редагування юзера в окремі сервіси наприклад SaveUserService і там зробити метод save. Таким чином клас матиме тільки одну причину зміни наприклад оновлення логіки збереження юзера.
    Дякую)

  • @user-zi8zw3yf2t
    @user-zi8zw3yf2t 7 หลายเดือนก่อน

    Слишком простые и очевидные примеры

  • @arttex7yuart763
    @arttex7yuart763 7 หลายเดือนก่อน +2

    а можна таке ж відео тільки Українською? Бо нічого не зрозуміло.

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      якщо є запит, то спробуємо зняти. дякуємо за ідеї!

    • @arttex7yuart763
      @arttex7yuart763 7 หลายเดือนก่อน

      ​@@alexandrapersukova ви вважає це ідеєю? Українська мова - це вже ідея? Тоді питання, ви Українська компанія чи ні? Якщо ні, то питань немає, лише одне, для чого прапор у куті використовувати? Якщо ж Українська компанія, то чому за майже 2 роки повномасштабної війни, ви так і не перейшли на державну мову?

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      @@arttex7yuart763 У нас є окремий україномовний канал - Сергій Немчинський: Кодерська вітальня.
      А цей канал для всіх наших глядачів, які не знають української, а на рф, рб ми як і не працювали так і не працюємо.

    • @user-zi8zw3yf2t
      @user-zi8zw3yf2t 7 หลายเดือนก่อน

      И как же ты так быстро забыл русский язык?

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      @@user-zi8zw3yf2t это к чему вопрос?

  • @MERKYRIY-fn5rw
    @MERKYRIY-fn5rw 7 หลายเดือนก่อน

    Ну дуже "початковий" рівень коду.

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      так, відео для початківців

  • @paul-emilelecoqdeboisbaudr555
    @paul-emilelecoqdeboisbaudr555 7 หลายเดือนก่อน

    Немчинский - самый опасный подвид инфоцыгана: если у Мишустина на лице клеймо инфоцыгана, то этот товарищ на вид - вполне адекватен

  • @user-rb4ow1gz2v
    @user-rb4ow1gz2v 7 หลายเดือนก่อน

    Сергію, ви ж наче перейшли на українську мову.... Війна ще не закінчилася, ворог той самий, давайте продовжувати робити українське іт україномовним
    😢

    • @smaxim02
      @smaxim02 7 หลายเดือนก่อน +2

      Сергій зараз веде два канали. Цей лишився російськомовним, для інших країн, або людей які все ще розмовляють російською. Інший канал ведеться суто українською, частина контенту також перейшла туди. Питання в тому що(я так розумію) канали та ютуб забезпечують більшу частину від притоку клієнтів, а на україномовному зараз лише 10к підписників. Плюс це відразу мінус частина аудиторії з тої самої Прибалтики або Казахстану

    • @kirillperov3843
      @kirillperov3843 7 หลายเดือนก่อน

      Так є окремій українськомовний канал

    • @alexandrapersukova
      @alexandrapersukova 7 หลายเดือนก่อน

      @@smaxim02 Все правильно, ми як не працювали з рф і рб так і не будемо, тому цей контент для людей з інших країн, які не володіють українською.