Тёмный

Правильные методы по Clean Code 

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

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

 

26 сен 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 414   
@enkryp
@enkryp 3 года назад
После слов о том, что метод должен умещаться на один экран, я понял, зачем некоторые разработчики используют два монитора, один из которых они поворачивают на 90 градусов.
@maxlich9139
@maxlich9139 3 года назад
сломали систему))))
@AnrelD
@AnrelD 3 года назад
Притом второй монитор ультраширокий)
@trofimchikchik
@trofimchikchik 3 года назад
@@AnrelD и разрешением повыше
@forty_se7en
@forty_se7en 2 года назад
И делают шрифт 6го размера)
@alexperemey6046
@alexperemey6046 2 года назад
Да, это сразу бросается в глаза. Экраны разные, шрифты разные... И насчет базовых "10 строк" тоже не все однозначно. Поскольку те же фигурные скобки люди проставляют по-разному. И колбаса типа func().func() тоже начинает смотреться как выход.
@ansarozden5767
@ansarozden5767 3 года назад
Аналогия уровня абстракции с просмотром карты города самое лучшее объяснение того, что такое уровень абстракции.
@0imax
@0imax 3 года назад
@@kitten-free биологам, может, и понятнее, но мне больше нравится с картой :)
@pranatank4965
@pranatank4965 3 года назад
Привет. Спасибо. Очень хочу видео по поводу комитов - что комитить, когда комитить, и какие названия давать, ну и вообще может поглубже разобраться в теме
@niknikagain
@niknikagain 3 года назад
каждый коммит должен решать только одну задачу. Описание должно кратко, но полно описывать что именно решает этот коммит.
@ilyamorozov2186
@ilyamorozov2186 3 года назад
Видео топ! Продолжайте цикл по Clean Code 👍
@michaeldeyev8809
@michaeldeyev8809 3 года назад
Спасибо за видео! Даже разрабы с опытом могут подчерпнуть некоторые нюансы!
@MgsMen
@MgsMen 2 года назад
Лайк за описание что такое уровень абстракции на примере города. Реально топ !
@max_mgtow
@max_mgtow 3 года назад
Как раз досматриваю вашу 2х часовую лекцию по Clean code. Классная подача, спасибо, Сергей 👍
@jollyroger2757
@jollyroger2757 3 года назад
Добавьте примеры, так сказать интерактивности в видео.
@kirillamber6056
@kirillamber6056 3 года назад
Нагляднее будет, если ты сам напишешь говнокод и потом посмотришь это видео
@Sprint-n3n
@Sprint-n3n 3 года назад
@@kirillamber6056 ага , а если тебе после него прийдется его читать?)))
@kirillamber6056
@kirillamber6056 3 года назад
@@Sprint-n3n легко можно сделать код ревью, даже не понимая с какой предметной областью он работает.
@nabiisakhanov3522
@nabiisakhanov3522 3 года назад
Он и так примеры приводит но устно
@Sprint-n3n
@Sprint-n3n 3 года назад
@@nabiisakhanov3522 я так понял, что те, кто хорошо разбирается против, чтоб было понятнее тем, кто хуже это умеет?
@playerkilleryakutia9415
@playerkilleryakutia9415 3 года назад
Обычно когда хочешь разделить метод который делает хорошо 2 вещи, тебе нужно делить не на 2 а на 3 и более методов, так как тебе нужны будут вспомогательные/промежуточные методы и т.д. А потом тебе в голову приходит что эти вспомогательные методы как-то унифицировать, чтобы применять и в других местах и тут начинаешь сидеть и думать, что тебе надо вообще кучу всего рефакторить)
@userlink-12
@userlink-12 3 года назад
А если изначально писать с таким расчетом, то зачастую все необходимые методы будут уже под рукой)
@Дмитрий-ч1в5ы
@Дмитрий-ч1в5ы 3 года назад
А если ещё до написания любых методов помнить что один метод должен делать что-то одно, то и рефакторить не придется ;)
@VladisS.Vostok2000
@VladisS.Vostok2000 3 года назад
Ага, а ещё лучше и вычленять все статические методы из нестатических, с единственной ссылкой на них, можно прям через => перенаправлять, правда методов будет овердохуя, читаться будет как гавно, зато метод в 10 строк...
@Drmidon
@Drmidon 3 года назад
@@Дмитрий-ч1в5ы Судя по 10 правилу(21:38​ - что-то делаешь или возвращаешь) Python плохой язык. Ибо там есть методы типа list.pop()
@maxlich9139
@maxlich9139 3 года назад
@@Drmidon а что этот метод делает?
@yankilo
@yankilo 3 года назад
Спасибо за отличное видео! Так же хочу сказать, что Вам, Сергей, очень идёт борода без усов. Прям помолодели :D
@alexxx4434
@alexxx4434 3 года назад
Запихнуть код в enum - спасибо док!
@kai3341
@kai3341 3 года назад
Подхвати коллбэк (или его имя) из enum или dict/object или даже array/list/tuple. Просто делегируй
@ValentinNechayev
@ValentinNechayev 3 года назад
А если несколько типов реакций в разных местах и они разные? Уже не пойдёт.
@kai3341
@kai3341 3 года назад
@@ValentinNechayev я не зря сказал "или его имя". Подхвати метод класса по его имени -- и всё пойдёт
@boevoyhomyachok
@boevoyhomyachok 3 года назад
@@kai3341 поподробней плз где там в с#, например, код в enum писать?
@kai3341
@kai3341 3 года назад
@@boevoyhomyachok в шарпах можно положить в enum строку, и метод, соответственно, подхватить по его имени. Но эта история совсем о другом. Не важно, в какой именно контейнер ты положишь коллбэк. Ещё раз читай внимательнее мой комментарий -- я указал контейнеры, частным примером которого является enum. Ещё раз и внимательно -- собери коллбэки в контейнер и делегируй
@samdistortion7588
@samdistortion7588 3 года назад
Очень удобно стало рекламу проматывать - в самом видео Сергей без усов, а в рекламе с усами :D
@KillerCourse
@KillerCourse 3 года назад
Отличное видео, спасибо. Не заметил как пролетело полчаса, очень полезная инфа, и для новичка почти все понятно было)
@doopath8737
@doopath8737 3 года назад
К сожалению, даже при том, что про клин код говорят на каждом углу, а про значащие имена переменных слышали даже менеджеры по продаже кондитерских изделий, програм аля той, которая рисует искры от волшебной палочки на экране (анклбоб рассказывал про нее в книге), я (думаю, все мы) встречаю очень редко. Обычно это небольшие модули или отдельные файлы\классы, но никогда системы или подсистемы. В большинстве случаев все утыкано методами, называющимися getName (которые, по-хорошему, должны называться getNameOrNullIfUserDoesntExistAndCacheGivenNameAndWriteLogIfNameIsAlreadyCached) и имеющими 300 строк кода после открывающей скобки.
@ЕрвандАгаджанян-в3к
@ЕрвандАгаджанян-в3к 7 месяцев назад
Сергей, как же вы прекрасны!
@PianoElipse
@PianoElipse 3 года назад
все программисты, у которых 4к мониторы, расслабились :D
@artemartem3375
@artemartem3375 3 года назад
Все программисты у кого микроскопический шрифт тоже расслабились
@PianoElipse
@PianoElipse 3 года назад
@@artemartem3375 8 пунктов XD
@demiurgen13
@demiurgen13 3 года назад
Особенно те, у кого они развернуты вертикально )
@maxlich9139
@maxlich9139 3 года назад
ну программисты с 50-дюймовые экранами тоже расслабились)))
@maxlich9139
@maxlich9139 3 года назад
@@kitten-free печально =(((
@vahekhachaturian2424
@vahekhachaturian2424 3 года назад
Самый главный аргумент против switch в конце, и то в двух словах. Хотелось бы больше узнать про использование полиморфизма вместо switch. Не совсем согласен с тем чтобы поменять switch на if else. Таким образом мы только из одного проблема сделаем другую.
@АлександрНевельский-л2з
Согласен. На мой взгляд конструкция switch вполне приемлема в варианте case one: return One(); case two: return Two(); case three: return Three();
@ГеоргВартанов
@ГеоргВартанов 3 года назад
Благодарю, интересно слушать
@artursveshnikov7668
@artursveshnikov7668 3 года назад
Супер классные ролики, очень легко заходят, старые лекции тоже интересные, но довольно гружёные, это всё-таки лекции. А так пока едешь на работу самое то и откладывается хорошо. И побольше по индусов и антипаттерны)) оч. забавно о них слушать
@ShargTV
@ShargTV 3 года назад
Топ, это очень интересно и полезно. Спасибо большое)
@ДональдТрамп-м1г
@ДональдТрамп-м1г 3 года назад
Подписываюсь всеми пятью тентаклями!
@Enthusiast91
@Enthusiast91 3 года назад
Офигенная рубрика. Работаю уже чуть больше года, и часто задумываюсь, а как в той или иной ситуации лучше сделать. И некоторые вопросы прям по полочкам ровно разложили зачем и почему. Видимо пора уже все таки прочитать Роберта Мартина - Clean code и Джошуа Блоха - Effective java )) Спасибо большое за видео, было полезно и интересно!
@Alex11Fox
@Alex11Fox 3 года назад
про enam вместо switch, было полезно спасибо. Да и вообще тема Как помыть кота интересна.
@KaputTV
@KaputTV 2 года назад
@@ДмитрийВладимирович-т7ж Легкий Митин клитор?))
@sviatoslavhavrylo8580
@sviatoslavhavrylo8580 3 года назад
Гм populateAssetAndSave() сделаю с него два метода populateAsset() saveAsset() и буду вызывать два метода. и тот метод откуда буду вызвать будет назваться populateAssetAndSave() ?
@fallenangel1395
@fallenangel1395 3 года назад
Ой, плюсую. Очень часто задумываюсь об этом во время работы.
@VladisS.Vostok2000
@VladisS.Vostok2000 3 года назад
Ну формально, да. Если у тебя, допустим, такая особенная логика, что в свитче где-то по нескольку раз есть populate, где-то Save, а где-то, тоже несколько раз, PopulateAssetSave, то ты обязан объеденить связный вызов.
@0imax
@0imax 3 года назад
Вызов нескольких действий одним методом - это регулярная боль. И ладно если они *всегда* идут толпой, тогда в названии можно оставить более важное действие или придумать какое-то более общее название сему действу. А вот когда они же могут использоваться ещё и по-отдельности, то начинается веселье. И тут либо держать в голове (что уже плохо), что для конкретных случаев вызываем все три, а в других - вот эти два, либо сделать метод с "неправильным" названием, вызывающий три других метода.
@cheefoxcheefox2372
@cheefoxcheefox2372 7 месяцев назад
К сожалению,все эти правила не без исключений. Очень часто метод вынужден атомарно делать две, а то и три операции, типа классического CompareAndSwap в многопоточке.
@RUMACTEP
@RUMACTEP 3 года назад
9:20 "Не используйте switch" - Pattern Matching in Switch Expressions (C#, Python) не согласны с вами
@Zohan136
@Zohan136 Год назад
Спасибо большое спасибо большое спасибо большое спасибо большое спасибо большое спасибо большое спасибо большое спасибо большое спасибо 🙏
@jamalzeynalov2196
@jamalzeynalov2196 3 года назад
Идея крутая, но без примеров «плохо vs хорошо» очень тяжело воспринимать. Ещё круче, если примеры будут не такие как в книге
@0imax
@0imax 3 года назад
Позвольте поинтересоваться, а что конкретно из данного видео сложно воспринимается? Примеры вроде банальные. Мне вот, как не-джаверу, было удивительно узнать, что в enum можно засунуть код - не все языки такое умеют :(
@progressive_agriculture
@progressive_agriculture 3 года назад
Большое спасибо! Очень полезная информация.
@EgorychKononenko
@EgorychKononenko 3 года назад
Конечно для таких тем видео надо не только рассказывать, а приводить примеры скринов экранов с кодом. Не понял как switch оформить через enum.
@0imax
@0imax 3 года назад
В Java можно в enum нафигачить перегруженные методы для каждого значения, и вместо свича просто вызвать метод у енама, который отработает как полиморфизм в зависимости от значения этого енама.
@John_Connor
@John_Connor 3 года назад
Читай DZone > Java Zone > Enum Tricks: Featured Enum Instead of Switch
@torrvic1156
@torrvic1156 Месяц назад
А в C# как код положить? Что-то не видел такого. Не будете любезны и не подскажете?
@peterswinoff1886
@peterswinoff1886 3 года назад
Лучше всего сделать нечто вроде универсального Range where T : IComparable.
@IPWchild
@IPWchild 3 года назад
Интересно, вот если был метод, который делал 2-3 действия, мы из него выделили каждое действие в отдельный метод, и потом их по очереди вызвали в первоначальном методе - это будет нормальный код, или калечный? В случае, если эти несколько действий нужно всегда выполнять вместе в строгой очередности - я не вижу нормальной альтернативы. Но и название нормальное придумать в таком случае бывает сложно, ведь это по прежнему метод, вызывающий выполнение нескольких действий...
@0imax
@0imax 3 года назад
Вызов нескольких действий одним методом - это регулярная боль. И ладно если они всегда идут толпой, тогда в названии можно оставить более важное действие или придумать какое-то более общее название сему действу. А вот когда они же могут использоваться ещё и по-отдельности, то начинается веселье. И тут либо держать в голове (что уже плохо), что для конкретных случаев вызываем все три, а в других - вот эти два, либо сделать метод с "неправильным" названием, вызывающий три других метода.
@at0m1x191919
@at0m1x191919 3 года назад
Круто!
@romantsyupryk3009
@romantsyupryk3009 3 года назад
Велике дякую вам за це відео.
@linkernick5379
@linkernick5379 3 года назад
Маловато внимания уделяется побочным эффектам, производимым методами. Побочные эффекты как мутация полей класса, мутация объектов-параметров, захват локов, и походы в IO необходимо минимизировать как можно сильнее. В идеале переходить к иммутабельным объектам и ФП - чем меньше побочных эффектов, тем более предсказуемее работа функций.
@0imax
@0imax 3 года назад
А лучше вообще все переменные сделать ридонли и на каждый чих создавать новый объект вместо изменения старого :)
@linkernick5379
@linkernick5379 3 года назад
@@0imax Можно. Если грамотно сделать, тормозить не будет. Читайте про персистентные структуры данных (книга Криса Окасаки и другие источники)
@0imax
@0imax 3 года назад
@@linkernick5379 осталось подготовить стопицот тысяч специалистов, способных читать и поддерживать такой код...
@ОлегТокмачев-в9ц
@ОлегТокмачев-в9ц 3 года назад
Мои коллеги не любят гард клаузы в начале метода, любят, чтоб по индийски было. Рад услышать, что мои предпочтения имеют отношения к нормальным практикам. А то я думал, я странный.
@dmitryvlasov931
@dmitryvlasov931 3 года назад
Сергей - это Том Хэнкс мира ИТ.
@SergeyNemchinskiy
@SergeyNemchinskiy 3 года назад
приятно :) Люблю этого актера
@alexeymezenin
@alexeymezenin 3 года назад
На счет длины методов, Мартин говорил о многословной Java. Если используется какой-либо современный фреймворк (особенно из семейства RoR, Laravel, Django, Sails), то нормальная длина метода будет не более 1-5 строк. Вообще, когда человек начинает писать тесты не для галочки (работодатель просит), а чтобы действительно снизить возможность возникновения ошибок в коде, он сразу понимает для чего нужен Clean Code и короткие методы в частности.
@Dima-fr8cw
@Dima-fr8cw 3 года назад
БОЛЬШЕ ЧИСТОГО КОДА!
@АлексейПерцух
@АлексейПерцух 3 года назад
Отличное видео, спасибо!
@VladisS.Vostok2000
@VladisS.Vostok2000 3 года назад
Те, кто писал бизнес-логику на высоком уровне для бинарных деревьев, двусвязных списков - лул. В методе удаления какого-лиюо элемента со списка будет высокий уровень абстракции и, например в цикле, низкий. Не, ну можно, конечно, создать подметод для поиска элемента с единственным к ему обращением, ещё можно его статическим пометить ДЛЯ ВЯЗКОСТИ, но это правило к печали будет противоречить правилу методов без параметров, потому что такие методы придётся вызывать с десятью параметрами ref. Я делаю вывод, что либо эти советы неверные, нелепые, или отсутствует контекст, а именно, когда следует следовать этим правилам, а когда нет. Один говорит суслику всегда бояться, тот с голоду дохнет, другой - всегда делай, и тот скармливает себя хищнику. Может, стоит как-то обозначить баланс? По поводу сокращения методов - ну явно путается причина и следствие. Ну т.е. вся эта инфа в видео - информационный мусор. Я огорчён.
@mrybs
@mrybs 2 года назад
Я вот на данный момент разрабатываю псевдографический движок и его модули. Так вот, у меня в модулях и в ядре почти все методы имеют по 5+ аргументов и перегружены в среднем 2-4 раза. Допустим есть метод для вывода текста. Он принимает текст, координаты x, y, две цветовой константы. И что предлагаете? Сделать объект richText, в нем хранить текст и цвета? Потом сделать vector2 в котором хранить координаты? Лишние объекты получается. Как их инициализировать? Если через конструктор, то та же "проблема" возникает, много аргументов. Еще добавить объект color, который хранит в себе цвета. Если инициализировать через методы, то это тонна кода появится, вместо одной строчки. Ну и зачем мне это? Избавляться от перегруза смысла нет, так как в коде практически во всех перегрузка есть что-то вроде такого: mn *func(){ return func(defaultBackground); } mn *func(std::string background) { ... } Смысла в отдельных функциях нет, будет повторение кода. А повторение кода это плохо, не ради этого делали все эти процедурные парадигмы, объектно ориентированные парадигмы и шаблоны типов. Считаю то, что вы сказали применимо не во всех случаях и не во всех языках программирования. А иногда если это и применимо, то не меняется ничего от слова совсем И вот что вам свич не нравится не понятно. Потому что причина о том, что синтаксис стрёмный высосана из пальца. if else писать замучаешься. Это же повторение кода, когда вместо одного значения ты повторяешь целую конструкцию. Да и к тому же если ограничивать длину методов и дробить их, то можно из вида ... case 9: result = "fJw"; break; ... return result; Можно придти к виду ... case 9: return "fJw" Удобно, не правда ли?
@persoloid
@persoloid 3 года назад
Насчёт не дублирования кода очень верное замечание, зачем плодить мусор
@YanSokolovsky-o1t
@YanSokolovsky-o1t Год назад
Позволю себе поспорить про switch'и "в любом си-подобном языке": 1. В некоторых языках break в switch обязателен (например, C#); 2. Есть пример "почти" switch'а -- конструкция when в Kotlin'е, которая, на мой взгляд, лишена почти всех недостатков switch; 3. В некоторых случаях обработку enum'а не перенесёшь внутрь него же -- например, когда он библиотечный. P.S.: if-else-if-else выглядит тоже скверно
@John_Connor
@John_Connor 3 года назад
По поводу того (13:08), что по сигнатуре метода ничего не поймёшь и в него обязательно нужно залезть для того, чтобы понять, как он работает. А имена у параметров для чего?
@ГригорийТолстой-з3м
Имеется ввиду по сигнатуре вызова тип obj.cancel(true, false, 42);
@ДаниилСоловьев-э6ш
Очень интересно!
@ВолодимирК-р6т
@ВолодимирК-р6т 6 месяцев назад
Цікаво, корисно. Дуже дякую!
@kuplumozga
@kuplumozga 3 года назад
Создатели спринга явно не слышали об ограничении в экран )) Та же AutowiredAnnotationBeanPostProcessor, хотя название очень говорящее )
@ОлегТокмачев-в9ц
@ОлегТокмачев-в9ц 3 года назад
Читал Мартина и думал, ну длина метода в 10 строчек - это классно, я за. На практике я часто встречал монстров, но в целом благодаря гигантским мониторам было норм. Но вот сейчас мне приходится работать на 13 дюмовом лаптопе и я резко понял, что 10 строчек - это не красота и чистоплюйство, но это что-то, что может уберечь от нервного срыва и про уровни абстракции сюда же.
@PavelSidorovich
@PavelSidorovich Год назад
братюнь, если ты еще не совсем в нервном срыве: уменьши размер шрифта в IDE. если хоть пару строк сэкономишь - уже в дурку не попадешь!
@alexandernikolaychuk8405
@alexandernikolaychuk8405 3 года назад
@Sergey Nemchinskiy switch в языке Swift сделан так что-бы НЕ проваливаться и break писать не нужно. Для Swift можно пересмотреть эту рекомендацию по switch statement?). А если вдруг хотите провалиться - то там вместо break как в других языках, можно написать fallthrough )
@oinochoe
@oinochoe 2 года назад
Я конечно понимаю, что год прошёл уже)) но.. возможно вы за год уже нашли ответ на этот вопрос?? Как, используете switch??
@NikitaZenkin
@NikitaZenkin 3 года назад
Изменилось ли как-то, в последнее время, ваше мнение о языке Go? В go как раз в switch не нужен break)
@alexandrapersukova
@alexandrapersukova 3 года назад
В новостях будет ответ на этот вопрос!)
@admenmod
@admenmod 3 года назад
блин теперь новый монитор покупать придется)
@playerkilleryakutia9415
@playerkilleryakutia9415 3 года назад
Null же многие используют в качестве некой логики, даже в языке есть конструкция ?? типа тернарного для проверки на нулл при присваивании результата
@AntiSmithhh
@AntiSmithhh Год назад
некоторых языках по сигнатуре метода можно понять, что он и с чем делает, например: декларация: delete( _ item: Item, withCode deleteCode: Code ) вызов: delete( subSet, withCode: cleanCode )
@fidana_blog
@fidana_blog 3 года назад
Здравствуйте Сергей! На счёт switch-case: Начиная с Java 14, выражение switch имеет дополнительный синтаксис типа Lambda (case ... -> labels), и его можно использовать не только как оператор, но и как выражение, вычисляющее одно значение. В таком случае break не пишется. И это реально очень удобно. Я хоть пока только учусь, но это реально упрощает задачи.
@zentox8480
@zentox8480 3 года назад
Switch expressions придумали как раз чтобы устранить недостатки обычных свитчей, так что использовать можно и нужно.
@СергейКондратенко-о9ц
если б еще конструкция if else была только выражением, вычисляющим одно значение, то 'это приучило бы разбивать код на небольшие функции-методы
@SamWhiteRK23
@SamWhiteRK23 3 года назад
Было бы интересно послушать про clean architecture
@drl232
@drl232 3 года назад
На эту тему есть хорошая книга Макконела «Совершенный код»
@ЯківСинявський
@ЯківСинявський 3 года назад
От завжди мізгував над тим якою повинна бути довжина метода. І тут бачу розгорнуту відповідь. Ще красне дякую за ідею з обджектами, в методі. Часто є такі ситуації. А стосовно ідеї того що в методі не повинно бути and... Ну власне думав це очевидно. Якщо в тебе є щось дуже складне, логічно розбити код на куски і розбирати його по запчастинам.
@АнатолийВ-п3д
@АнатолийВ-п3д 3 года назад
1991-1994г кто-то меня учил, что код подпрограммы должен помещаться на стандартном листе формата А4. В те времена принято было код распечатывать. Зарисовка тех лет. 1993г. Одесса. СКБ... все разваливается. Бородатый программист маргинального вида подался писать в направлении пенсионного фонда. Остался его начальник, папки с программами. Минивакс в рабочем состоянии. Я остался без непосредственного руководства и сидел изучал Си на IBM 486. Чтобы меня как то загрузить предложили сделать какое то разбиение Фазоманипулированных сигналов ( М последовательностей ) на ортогональные составляющие ( ну или что то такое подобное). Дали книгу про поля Галуа. Дерзай! :-) написал. Решили проверить. Скомпилировали по юниксом мою программы. Минут 15 ушло на изменение кода, чтобы прошло на компиляторе Юникса. ( я писал под Турбо Си Борланла). Потом скриптами написали связь между подпрограммами фильтров М последовательностей. И как бы прогнали задачу вперед-назад. И все сошлось. Это было прикольно. За час где-то из готовых подпрограмм довольно сложная задача была решена. К сожалению красивая идея доктора наук по этим манипуляциям в жизни не сработала. Пытались тогда добить до Парижа. Работали с ними. Но не получилось. Да в общем и французы к нам интерес в то время теряли и мы уже разбегались кто куда.
@niknikagain
@niknikagain 3 года назад
Все нестатические методы объекта подразумеваются как изменяющие объект. Если метод не изменяет объект, а только производит вычисления с его данными и возвращает результат - этот метод должен быть геттером. Если метод не изменяет _данный_ объект, но имеет прямое отношение к объектам данного класса, он должен быть статическим. Т.е. метод str.toUpper() изменяет регистр внутри самого объекта (возвращает новое значение или нет - не важно), а String::toUpper(str) возвращает копию исходного объекта с измененным регистром, не трогая сам исходный объект.
@СергейЗакордонец-и6р
16:19 в целом то всё хорошо и правильно, но есть замечание к самому способу изложения и пояснения проблематики у вас часто и густо звучат фразы типа "ИДЕ помогает", "ИДЕ подсказывает", "ИДЕ за вас ....", и тут же вы 16:19 Тут уж либо ехать либо саночки! Если ваш код редачат через нано или нотпад - то да, аргумент абсолютно валиден. Но если его редачат через нормальную ИДЕ - она покажет какие поля как называются как минимум, а чаще всего и доку по методу, просто при наведении на него п.с. тоже касается и нулов в качестве возвращаемых значений Let the срач begin!
@yuriihizun7183
@yuriihizun7183 3 года назад
Thanks!
@brilliant_almazov
@brilliant_almazov 3 года назад
со всем согласен ряд тезисов по switch вызвало вопросы, но это уже по другое
@tmeMishaGo
@tmeMishaGo 2 года назад
Много маленьких методов это тоже плохо, т.к. их можно по ошибке вызвать. Всё-таки функция должна быть жестко связана неразделимой логикой и читаться четко и линейно сверху вниз без вариантов. Тогда функцию легко прочитав держать в голове и понимать что же там было выше
@joymusicstudio1
@joymusicstudio1 3 года назад
Вподобайка і коментар для підтримки каналу!!!!!!!!!!!!
@anatagenki2056
@anatagenki2056 Год назад
К слову о том, что нельзя использовать аргумент как реультат метода и к тому, что изменение состояния объекта должны только void методы. Как тогда реализовывать паттерн строитель? Его методы же как раз и меняют состояние билдера и возвращают ссылку на себя же
@msf_1984
@msf_1984 3 года назад
Про аргументы в методах типа ДатаНачала1, ДатаКонец1, ДатаНачала2, ДатаКонец2... . Как программист на 1С скажу даже более крутую вешь. В 1С есть такая фича, как периодические расчёты, связанные, в основном, с расчётом зарплаты, где учитывается каждый день месяца. Так вот, я видел методы, в которых 31 аргумент вида ЗначениеНа1ЧислоМесяца, ЗначениеНа2ЧислоМесяца и так далее...
@NesseratiousChannel
@NesseratiousChannel 3 года назад
4. Swift С-подобный, при этом свитч там работает нормально, не проваливается и брейк писать не нужно, а если нужно провалится, то есть специальный кейворд. Использования свича всегда проще, быстрее и выглядит лучше, чем большая конструкция ифов. 7. Опять же, в Свифте есть внешнее и внутреннее название аргумента, флаги не страшны если нормально описать что они делают во внешнем названии аргумента функции.
@AlexAlex-jk2tn
@AlexAlex-jk2tn 3 года назад
К стати вот интересно, на счёт возвращения объекта, полученного как параметр, в С++ с этим очень легко: каждый параметр это уже копия, и можно её же и возвращать, главное помнить, что у вас является объектом, например если в качестве параметра выполучили ссылку или если ещё хуже, указатель, и вернуть хотите тоже ссылку, то вы обязаны создать копию того, на что изначальная ссылка указывала и вернуть уже ссылку на копию. Тоже самое и с контейнерами, типа умных указателей.
@КонстантинФедуров
Хорошее видео. Но если брать пункт связаный с switch то например в Dart нельзя вставлять код в enum как в джаве
@maxlich9139
@maxlich9139 3 года назад
плохой язык) переходите на Джаву))))
@КонстантинФедуров
@@maxlich9139 с радостью бы)но тогда же придется и flutter сменить на что-то еще
@harleybenton686
@harleybenton686 3 года назад
Не понял слов, что в 60-70 годы у нас программирования "практически не было" (24:50)? А один только А. П. Ершов чего стоит? К нему же Доня Кнут однозначно с респектом и уважухой относился?
@gaitavr1992
@gaitavr1992 3 года назад
Свич это нормально, если в нем нет логики, а обычный возврат нужной переменной. Например маппинг Enum - string и тд. С if/else это будет проблематично, ровно как и делить подобный метод
@SergeyNemchinskiy
@SergeyNemchinskiy 3 года назад
'mkm код лучше перенести в сам enum
@sssauka
@sssauka 3 года назад
спасибо за пояснение про свитч !!! от всей души :) ..бо, когда смотрел лекции дяди Боба, я так и не понял, на что его заменять и почему
@PianoElipse
@PianoElipse 3 года назад
1:45 да и не только надежды и мечты :D
@СергейИванов-с7ф2д
По поводу флагов и их наглядности при вызове методов: в C#, если не лениться можно писать имена аргументов. Например: Cancel(paramName1: true, paramName2: false); // не надо объекты городить и всё наглядно.
@ValentinNechayev
@ValentinNechayev 3 года назад
IDE типа IDEA умеет показывать имена аргументов - это тоже помогает. Но я тут за реформу языков в сторону явных имён в таких случаях (например, Swift позволяет требовать такое - явно назвать определённые аргументы).
@pond2949
@pond2949 Год назад
А если к примеру я использую swing и имею определенный класс с gui в котором есть конструктор с добавлением всех компонентов (предположим это какой-то сложный инетрфейс). И вот проблема - конструктор будет иметь уже не до 10 строк кода, а до 40 и больше) Вопрос: нарушает ли это принципы чистого кода? Если да, то как избежать кроме банальной перефразировки?
@АнатолийВ-п3д
@АнатолийВ-п3д 3 года назад
Как то спросил знакомого, проводят ли они объектно ориентированный анализ до программирования. Рисуют ли диаграммы состряний, расписывают жизненные циклы. Товарищ работал в крупной корпорации международной. Капитализация там миллиарды долларов. Он сказал, что пробовали использовать специальное ПО, но получили какую то ерунду и плюнули на это. Интересно с таким подходом какой потом будет код? Будет ли он чистым? Сейчас товарищ в банке крупном работает. Спрашиваю, как там с наследованием и полиморфизмом? Используется? Он сказал, что практически нет. Только когда из библиотек берут что то. Я много лет не занимался программированием. Сейчас к этому возвращаюсь и хотелось бы все делать грамотно, а не лепить кое как на скорую руку. Понятно, что в реальности часто с постановкой задачи проблема и сроки давят. Но все же халтуру лепить не хотелось бы. Лучше тогда наверное и не заниматься этим.
@torrvic1156
@torrvic1156 Месяц назад
Отличный совет про запрет на манипуляции фронтэнда бэкэндом. Грешу этим и недавно сделал передачу флага в бэк, который должен производить то или иное действие в зависимости от переданного флага. Вместо if else я теперь создам два метода, чтобы исключить эту манипуляцию.
@JamesBond-bu8co
@JamesBond-bu8co 7 месяцев назад
Приветствую всех! Подскажите, пожалуйста, кто в теме - как передать в метод несколько аргументов, с помощью параметра object, как предлагается в видео? Создавал темы на двух форумах, мне рассказывали, но из видео следует, что введение данного параметра должно (по идее) упрощать работу и уменьшать количество кода, а из полученных мною объяснений следует, что это ни разу не проще, количество кода меньше не станет, а наоборот нам ещё понадобится целый класс для этой задачи (возможно, даже не один). Помогите, пожалуйста, разобраться.
@natalieastafeva4885
@natalieastafeva4885 3 года назад
10. Также можно сказать - метод должен быть либо accessor,либо mutator
@phpdevelopercode636
@phpdevelopercode636 2 года назад
А ну понял, в php недавно завезли enum. Нужно будет почитать
@sergeynovikov9607
@sergeynovikov9607 Год назад
На счет if, elsieif, разве разработчику не придется проверять, не отработают ли другие elseif-ы, перед твоим? Это к вопросу о том, что в случае switch приходится проверять предыдущие условия. Но я не "C-подобный" программист, не могу разделить боль С-шников( У меня switch всегда выполняет только одно условие и выходит без брейков.
@locktar-o-dark5664
@locktar-o-dark5664 3 года назад
Это рекомендации, как маску носить))) Вы бы ещё методы по количеству символов ограничили и поставили это ограничение в настройки код ревью, кто превысил, уволить))) Switch отличная конструкция, не надо головой крутить вверх вниз и тем более скролить километры индусячего кода, есть code folding (сворачивание блоков кода) Если ты не поставил break в case или не поставил return, ide с правильно настроенным code linter сообщит об этом)))
@SergeyNemchinskiy
@SergeyNemchinskiy 3 года назад
вот миллион раз рассказываешь одно и то же, но все равно найдется человек, который ничего не услышит и все равно притащит уже разобранные доводы в тред. Не надо так
@ІгорУхань
@ІгорУхань Год назад
Экран можно развернуть по вертикали)
@LevPoptcov
@LevPoptcov 3 года назад
буду теперь писать на CleanCodeском языке))
@mikhaildiesperov2345
@mikhaildiesperov2345 3 года назад
А в go не так работает switch. Там break не надо ставить. Использую тогда, добро?)
@dmitriy9232
@dmitriy9232 3 года назад
Спасибо! Годнота! Мальчика жалко ))
@ondict6205
@ondict6205 Год назад
Если switch такая уж голимая херня, то почему несколько версий подряд в C# идет активное развитие pattern matching, который по сути есть глубокое развитие синтаксиса switch?
@rasulmagomedov493
@rasulmagomedov493 3 года назад
я так понимаю, совет завернуть быший код со switch блоком в enum основывается на возможностях enum именно в джаве (в c++ например enum это тупо набор числовых констант). а как в других яп поступать, может только switch блок выделить в свой метод и назвать вроде OnKind ?
@SergeyNemchinskiy
@SergeyNemchinskiy 3 года назад
а вот тут лучше посмотреть рекомендации по хорошему коду в вашем языке
@MarchenkoAnton
@MarchenkoAnton 3 года назад
Спасибо Сергей за материал. Вопрос: Правильно я понял про switch? Его не использовать только по той причине, что каждое условие требует break? Следовательно, что это к when() не относится, верно?
@ИгорьСтепанов-и1п5х
// хорошее видео С99 топ
@СергейКондратенко-о9ц
Все проблемы со switch и if else if в си-подобных языках произошли и-за того, что if изначально не сделали просто функцией с возвратом значения по условию, это кстати приучило бы кодеров делать лаконичные методы
@qamilfoatov
@qamilfoatov 3 года назад
А мне вот всегда было интересно насколько красиво делать функции, где меняются параметры, в принципе. Например, можно сделать increment(&a), а можно a=increment(a). Как лучше и в каких ситуациях?
@liravesnovaya242
@liravesnovaya242 3 года назад
Обычно, очень некрасиво: т.к можно не уследить за изменениями этого a, особенно в языках, где явно не указывается, что это ссылка (привет PHP).
@NesseratiousChannel
@NesseratiousChannel 3 года назад
В высокоуровневых языках второй вариант предпочтительнее, первый пошел исторически из с и с++. А в анриал енжине, например, между ними вообще нет разницы, оба варианта интерпретируются движком как возврат значения а.
@user-uo2ph3ul3d
@user-uo2ph3ul3d 3 года назад
Скажите а эти правила касаються большинтсва языков програмирования? Работаю из С++ и Пайтон. Эти советы применяються к ним?
@afesdaller162
@afesdaller162 3 года назад
Очень крутой выпуск, про switch прям удивили. Хотя я где то читал что если условие большое то switch быстрее чем куча else if. Но это геймдев и оптимизация кода.
@nanvlad
@nanvlad 3 года назад
Во многих языках компилятор развернет switch в набор if-else'ов
@afesdaller162
@afesdaller162 3 года назад
@@nanvlad шарпик к ним не относится я так понял?
@nanvlad
@nanvlad 3 года назад
@@afesdaller162 как раз шарпик таки относится как никто другой)
@NesseratiousChannel
@NesseratiousChannel 3 года назад
Бред про свитч относится к старым языкам, в которых он действительно работает и выглядит странно.
@drovoseg
@drovoseg 3 года назад
Я думаю они не отличаются по скорости, на уровне машинного кода и то, и другое это операторы jump
@vechnonedovolen666
@vechnonedovolen666 3 года назад
Про бросания исключений везде... вопрос очень спорный. Может быть для java нормально... Хз. Проблема что из клиентского кода может быть не видно тип бросаемого исключения. Тут уже надо лавировать, делать выбор по ситуации.. Мне лично интереснее подход шаблонным классом вида Variant . Но не знаю, можно ли его сделать на джава Бросание исключения видимо надо делать прямо рядом, где вы его ловите. Чтоб красиво прервать функцию. Та самая единая точка выхода)
@0imax
@0imax 3 года назад
Наоборот, исключения помогают безболезненно прокинуть ошибку далеко за то место, где она возникла. Конечно, если всё правильно сделано. Например, в текущем коде у меня ошибка может возникнуть на уровне передачи данных между ПК и девайсом, но адекватно отреагировать на эту ошибку можно лишь несколькими вызовами назад - там, где основной алгоритм работает с данными и может нормально прерваться, залогировать ошибку, показать её пользователю и т.д. Согласитесь, было бы странно логирование ошибки и оповещение пользователя о ней размещать в классе, работающим с ком-портом :) Да и прокидывать ошибку через всю цепочку вызовов тоже некрасиво. По сути, получается то же самое поведение, что и с исключениями, только с более загаженным кодом.
@DiabloZq
@DiabloZq 3 года назад
Спасибо вам, Сергей! Подскажите котлиновский when ≠ джавовский switch?
@feoktant
@feoktant 3 года назад
Exception или return code. А так же Optional, и другие извращения джентельменов)
@asobyanin
@asobyanin 3 года назад
Впечатление, что это java/php-проблемы) Но, думаю, можно применить эти советы даже к python.
@АнатолийВ-п3д
@АнатолийВ-п3д 3 года назад
Кстати на Хабре этот чистый код разнесли чуть ли не в пух и прах. Рекомендации там в основном хорошие, а вот примеры похоже не очень. Скорее всего это был чей-то чужой код, который Боб подверг рефакторингу. Ну или что то такого рода. И в комментариях рекомендовали книгу Макконела «Совершенный код». Тут тоже ее рекомендуют в коментах.
@torrvic1156
@torrvic1156 Месяц назад
Да пошёл он в очко этот Хабр. Чисто ватный сайт с гадкой публикой. Хотя статьи там бывают годные. Лучше stackoverflow.
Далее
Avaz Oxun - Turqi sovuq kal
14:50
Просмотров 828 тыс.
Как думать как программист?
14:07
Почему нельзя возвращать NULL?
22:11