Тёмный

Як правильно називати змінні, методи та класи | Чистий код українською 

Сергій Немчинський: кодерська вітальня
Просмотров 3,1 тыс.
50% 1

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

 

30 сен 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 74   
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
Назви - це найважливіше з усього, що є у програмуванні. Уявіть поганий код, де все перемішано і викликається невідомо звідки. Якщо при цьому всі назви будуть продумані, осмислені та означатимуть саме те, що вони роблять, то програміст, який читатиме код, усе зрозуміє. Чи цікавить вас тема Чистого коду? Діліться своєю думкою в коментарях чи варто продовжувати цю рубрику👇👇
@mykolashevchuk975
@mykolashevchuk975 Месяц назад
Просто супер, дякую за україномовний контент!
@oleksandr_polishchuk
@oleksandr_polishchuk Месяц назад
Зустрічав таку ситуацію коли, на існуйочуму проекті, замовник захотів перейменувати розділ сайту. Розділ це сутність яка має свою модель, класи, методи які до неї відносяться, простір імен. Так ось, на фронтенді назву розділу замінили, а на бекенді залишилось як було. Після того як нові розробники заходили на проект були сильно здивовані що розділ який називається "Call" , на бекенді це Job.
@ОлегПаламарчук-р5к
Дякую. Чудове відео!
@EdwardNorthwind
@EdwardNorthwind Месяц назад
Придумати назву - це найважче, особливо коли твій англійський рівня А2 зі словником 😁
@YaroslavSemenov-i4k
@YaroslavSemenov-i4k Месяц назад
@@EdwardNorthwind Ооо, розумію) Чат gpt це просто маст хев в такій ситуації
@kovalyurii7278
@kovalyurii7278 Месяц назад
В моєму досвіді замовник дуже часто називав одні й ті самі речі різними словами.
@bidanfullko1
@bidanfullko1 Месяц назад
Або різні речі одним словом?)
@EdwardNorthwind
@EdwardNorthwind Месяц назад
Або змінився менеджер і почав використовувати інші назви))
@NemchinskyLive
@NemchinskyLive Месяц назад
Треба використовувати найчастішу назву, інші ігнорувати
@andrixmaster
@andrixmaster Месяц назад
Кожен має свій дискурс і гадає про свій варіант вмісту. Без пояснень тупо не обійтися. Як не намагайся. Людський розум достатньо унікальний, щоб обмежуватися прямо аж усіма порадами.
@bidanfullko1
@bidanfullko1 Месяц назад
Щодо класу RUN і подібних геймдеви заперечать! ;)) Там це доводиться активно порушувати, бо це і є "бізнес логіка".
@SurfV
@SurfV Месяц назад
Чудова українська мова і український контент, дякую! ❤
@MaksMokriev
@MaksMokriev Месяц назад
Дякую за пояснення. Чітко, коротко та зрозуміло.
@nataliia1589
@nataliia1589 Месяц назад
Дякую, мені цікаво і корисно.
@alexandrapersukova
@alexandrapersukova Месяц назад
Ми дуже раді, що вам це відео було корисним. 😊
@truman5652
@truman5652 Месяц назад
Не зрозумів, чому приставки Provider, Manager, Processor, Helper, Mapper та інші на -er не можна використовувати? Це якісь вигадки. DataProvider,. TransactionManager, ScanProcessor, HtmlHelper and so on..
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
тому що це непродумані назви і все. Зрозуміло, що вони роблять, але не зрозуміло, чим вони є
@andrixmaster
@andrixmaster Месяц назад
Ага))) Розкажи про клас Run розробникам Open AI, що так не можна називати, ото вони посміються)))
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
ну навіть серед відомих розробників не всі розуміються на клин код
@TopRunnerUkr
@TopRunnerUkr Месяц назад
Об'єкт ініціалізується згідно даних з форми. Метод ініціалізації називається init. Я спантеличений? Ні.
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
це якщо дивитися з боку бека. я якщо дивитися з точки зору фронта - дуже дивно
@mishadrug98
@mishadrug98 Месяц назад
Дивлюся це відео і розумію наскільки айтішка різна. Я би сказав так: майже з усім погоджуюся, але треба пам'ятати, що в реальному житті неможливо завжди так писати, тому інколи треба покладатися на інтуїцію, досвід щоби зрозуміти яку назву дати
@herrgromov
@herrgromov Месяц назад
Дуже добре все розклав, дякую 🙏🏽
@alexandrapersukova
@alexandrapersukova Месяц назад
😊
@DARA30113
@DARA30113 19 дней назад
Дякую, люблю ваш контент, цікаво спостерігати як ви все впевненіше спілкуєтеся, чекаємо продовження)
@зробленоруками-ц8м
Хотілось би побачити чи почути саме про еволюцію від асемблера до інкапсуляції і структуризації в ооп. Бо в асемблері немає функцій, немає лексем з використання адрес. (На кшталт & * *(*) )Натомість є певні інструкції типу lea ld push pop і тому подібне. Ньюб розуміє тільки те що на поверхні - гарна структуризація і атомарність (!) ооп, але не саму її суть. Тобто чому є private i public можифікатори
@havrilyk4115
@havrilyk4115 Месяц назад
Панове поправте мене. Чи варто прописувати в readme додаткову інформацію про функції які були використані при роботі на сайті. А тепер людською. Я на сайті додаю до корзини товар і при цьому задіяні 3 функції то чи потрібно прописувати так. Додавання товару > функція 1 > функція 2 > функція 3.(назви функцій використані для прикладу).
@зробленоруками-ц8м
От для цього ші і створюють, бо як бачте людина має вміти читати😂😂 хоча з другого боку програміст має бачити паттерни, логічні послідовності і таке інше
@Єнот-в1н
@Єнот-в1н Месяц назад
Працю в IT перший місяць, одна з найактуальніших тем - це назви і їх придумати)
@yaroslavbox1249
@yaroslavbox1249 Месяц назад
How it will be better according to a clean code? Is it possible to check a value that is going to be returned from a getter and throw an error inside a getter? like this: get pagination() { const result = this.shadowRoot?.querySelector('pagi-nation') as HTMLElement | undefined | null; if (!result) { throw newError("There isn't a pagination."); } } Is it a good idea? Or it will be better to check a value outside.
@LordNedchannel
@LordNedchannel Месяц назад
Цікава і корисна рубрика, буди чекати на продовження❤
@nana-mf3ik
@nana-mf3ik Месяц назад
От би круто було одразу показувати на прикладах на лайвкодінгу
@Hordaric
@Hordaric Месяц назад
Дякую за крутезний контент та за українську мову!❤
@justmytraining4190
@justmytraining4190 Месяц назад
Українська == вподобайка
@oleksandrsova4803
@oleksandrsova4803 Месяц назад
.....-*er "класи" - то скоріше процедури. Якщо в коді такого багато - то навіщо вам взагалі ОО-мова? Анемічну доменну модель (якщо коротко - це коли в вас по суті лиш get/set/equals/hc в класі сутності) можна й не на ОО писати. Може вам так навіть зручніше буде. Щодо рефакторингу назв методів - тут можна і трохи прагматичніше бути. Наприклад якщо метод - це частина *публічного API бібліотеки, що використовується багатьма різними проектами* - його краще не перейменовувати, а задеприкейтити. Відрефакторений код перенести в інший метод уже з правильним ім'ям а з старого депрекейтнутого методу - просто викликати новий. І так - не місспельте методи, особливо публічні. Бо самі наражаєте себе на це пекло з деприкацією. Щодо хитрих назв і використання реальних бізнес термінів - ця порада звучить як: "не працюйте на внутрішньому українському ринку". address - це ще й дієслово. Типу: we should address this issue. Хоча так - синонімом замінити можна. Але це вже йде в розріз з "мовою замовника", ubiquitous language, оце все.
@bidanfullko1
@bidanfullko1 Месяц назад
А чи може програміст чи команда змусити змінити замовника термін, якщо нададуть йому повну документацію з новою реалізацією? Бо частіше за все, будучи не в темі, замовник сам місспелить усе, а потім пиляй йому франкенштейна намагаючись не втратити здоровий глузд.
@oleksandrsova4803
@oleksandrsova4803 Месяц назад
@@bidanfullko1 Думаю для того щоб змусити замовника змінити щось, а особливо щось звичне, треба мати communication skills рівня віртуоз. Але з такими скілами у вас вже не замовники будуть, а одні лиш меценати та фанатики.
@yaroslavzhurba670
@yaroslavzhurba670 Месяц назад
ну, наприклад вам треба класс, який завантажує якісь дані з зовнішнього ресурсу. Назвати його лоадером - це саме логічне, що може бути. Особливо смішно, що є навіть паттерни креатор, ітератор, декоратор...
@oleksandrsova4803
@oleksandrsova4803 Месяц назад
@@yaroslavzhurba670 Не дивлячись на те, що вперше більшість людей бачить ці паттерни в книжці GoF, але по суті ООП інструменти для цього не потрібні. Для декоратора потрібне просто посилання на функцію/процедуру. Тобто цей паттерн легко використовується як в хаскелі так і в C. Щодо лоадера, ітератора - ви самі не бачите, що ви виродили об'єкт до однієї єдиної утілітарної функції. Навіщо вам в такому випадку інкапсуляція? Та й предметну область уявити таку, в котрій лоадер моделює реальний об'єкт, а не є просто частиною механізму імпліментації достатньо важко. Скоріше це буде щось типу storage.upload(resource.asStream()) Під креатором ви мали на увазі Builder чи AbstractFactory? Хоча все одно ці речі - просто утілітарні церемонії. Але тут хоча б інкапсуляція потрібна для першого і поліморфізм для другого. Iterator, pointer, controller - туди ж. Нічого з цього не моделює ніякий процес з реального світу, а існує виключно як церемонія. У кращому разі - як клей між змодельованою предметною областю і інфраструктурою. З іншого боку в реальному світі іноді навіть люди зводяться до утілітарної функції. Наприклад коли декоратор може не тільки щось прикрашати, виконуючи роботу, а ще й брати вихідні - то він скоріше підтип працівника (Employee). І тут вже почнеться колізія в іменуванні якщо назви GoF чи інших паттернів використовувати в назвах сутностей.
@yaroslavzhurba670
@yaroslavzhurba670 Месяц назад
@@oleksandrsova4803 Лоаадер може багато чого лоадати, тому не одна функція. Стораж у лоадера як раз скоріше повинен бути філдом, інакше ваш стораж стане суперобжектом, та точно не буде відповідати стораджу. Інкапсуляція потрібна для лоадера, бо він інкапсулює сторадж та якісь параметри коннекшену. Та навіть якщо одна функція та ніякої інкапсуляції не потрібно, то що, увесь проєкт тепер робити процедурним? Ми працюємо з абстракціями, а абстракції на те і абстракції, що до реального світу відносяться умовно. Мені дійсно цікаво як буде виглядати ваш код без використання ітераторів. Ну, і робітник нехай і без er, але вочевидь теж від слова робити. програмування це взагалі клей між тим що бажає замовник та виконується девайсом.
@andrixmaster
@andrixmaster Месяц назад
Або розкажи розробникам Laravel, що не можна називати components() назви методів. Вони ще більше будуть ржати.
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
ну це не робить це гарною назвою. фу так писати
@andrixmaster
@andrixmaster Месяц назад
@@SerhiiNemchynskyi навіть foobar в певному дискурсі може бути логічною назвою, все залежить від того, що робить і де знаходиться метод. І якщо коли читаєш код метод з назвою foobar() буде читатися найближче до англійської мови, то воно буде зватися foobar і ніхто не зможе суперечити цьому, бо це буде тупо логічно
@lordallidar7031
@lordallidar7031 Месяц назад
Top
@feddos4227
@feddos4227 Месяц назад
8:30 - це має сенс в С. Там немає неймспейсів, тому якщо це файл, яких буде відповідати за TCP, всі функції будуть починатись з tcp_ (звичайно, що не всі юзають це правило, але зазвичай цим користуються, щоб не здублювати назву функції якогось іншого файлу) 12:21 - Охохохох, ну тут індустрія з вами б точно не погодилась. Он, в Git з master в main перейменували. Так само як і з інтерфейсом SPI - був Master і Slave, став Controller і Peripheral
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
1. С - не ООП мова, так що клин код до неї не зовсім відноситься :) 2. Так. знаю це... і це сумно :)
@antonlytvynenko2630
@antonlytvynenko2630 24 дня назад
До цього ж - хіба abort це нормальне завершення? Нормальне скоріше буде exit (якщо себе) чи terminate (якщо дочірній процес) - хоча, можливо, це локальні традиції всюди свої...
@tarasshevchuk8477
@tarasshevchuk8477 Месяц назад
Клас!!!
@romanb.6528
@romanb.6528 Месяц назад
Дякую за пояснення, пригодиться
@tarasholota6221
@tarasholota6221 Месяц назад
Пане Сергію, уточню, що init - це не "початковий" від initial, а від initialize - "ініціалізувати", тобто запустити операцію. Тому метод так називався. Ця назва часто зустрічається в таких випадках.
@bidanfullko1
@bidanfullko1 Месяц назад
Тут мова не про операційні системи чи драйвери. Тут про ентерпрайз, тому такий контекст не читається за замовчуванням.. Але залежить від розробника. Взагалі цей досвід транслюється в такому ключі, наче не існує дебаггера, щоб відслідкувати виклики об'єктів.
@yaroslavzhurba670
@yaroslavzhurba670 Месяц назад
@@bidanfullko1 ну, на девайсі дебагер не запустиш, треба логи писати
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
ви об'єм цього коду уявляєте? Там дебажити до того виклика треба було напевно добу :) а коли розкидаєш бряк пойнти, то треба розуміти куди саме треба його поставити
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
взагалі веселять поради а-ля - ну ти просто почитай код або дебагинг нас спасе, передивись структуру каталогів :))) Одразу розумієш, що люди звичайного ентерпрайз застосунка не бачили. Наприклад саме цей (тільки ця частина) важив 300+ Мб вихідного коду
@bidanfullko1
@bidanfullko1 26 дней назад
@@SerhiiNemchynskyi А що не витягувало тоді дебагінг коду? Спроможності заліза? Я розумію контекст(масштабності проекту), і приблизний час коли це було. Але так виходить, що вам тупо не доступний інструмент з ряду причин. Тоді вже треба було б як у всіляких бродилка - малювати карту пройдених об'єктів і класів.. бо це реально нереальний експіріенс - вичитувати в ручну увесь код по кожній сутності(один раз таке було). Програміст має шукати вихід із "дурдому". От я і шукаю... наприклад візуалізацією джерельного коду. Було б таке раніше, і вам би допомогло. Впевнений.
@adicthreex3530
@adicthreex3530 Месяц назад
Ось до речі чому я вважаю Го дуже поганою мовою: там обробка помилок робиться через повертання фактично кортежу з функції який неможливо використати потім у виразі й тому там потрібно вводити локальній змінні до кожного виклику функції. У той час як у "нормальних" мовах програмування введення змінної - це осмислений крок, змінна має мати назву, логіку й сенс існування у Го змінні вводяться з нагоди й без. А оскільки змінних багато - то прямо у офіційних гайдах дозволено називати їх однією літерою.
@oleksandrsova4803
@oleksandrsova4803 Месяц назад
Зазвичай саме це і вважається кіллер-фічею го, ледь не на рівні з горутинами - те, що помилку достатньо складно *не* опрацювати. Ну й змінна дійсно має мати сенс. Навіть якщо це якась проміжна сходинка - у бізнес процесі, що модулює цей код має бути для цієї сходинки назва.
@adicthreex3530
@adicthreex3530 Месяц назад
@@oleksandrsova4803 Ця "кіллер-фіча" на фоні Rust де обробка помилок зроблена одночасно й більш зручно й більш надійно виглядає як "фігак-фігак та у продакшен". Але так, після явних обробок помилок які зазначаються у сигнатурі функції повертатися до exceptions не хочеться.
@adicthreex3530
@adicthreex3530 Месяц назад
@@oleksandrsova4803 Явне повернення помилки, яке прописане у сигнатурі функції це добре. Але Але у тому ж Rust обробка помилок зроблена й більш зручно й більш надійно одночасно. У Го дизайн мови здається робили за принципом "фігак-фігак та у продакшен".
@alexbozhko72
@alexbozhko72 Месяц назад
Prompt: You are a signor developer with more than twenty years of commercial development experience. Rewrite this code fragment strictly according to Clean Code rules. Не благодарите!
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
ахахаха. Навряд допоможе :)
@_Rostyslav
@_Rostyslav Месяц назад
відеоНаОчахНародилося()
@alexandrapersukova
@alexandrapersukova Месяц назад
🤩
@mmogamespace
@mmogamespace Месяц назад
не понятно, ваши ide не умеют искать середину названия? У меня даюе на андроиде иде ищет с пропувкоом букв
@bidanfullko1
@bidanfullko1 Месяц назад
Досвід старої школи)
@SerhiiNemchynskyi
@SerhiiNemchynskyi Месяц назад
звісно вміє. Але якщо коду справді богато, то як тільки ви поставили плейсхолдер, то одразу кількість співпадінній зрастаєв разі. Я якщо їх було кілько сотен...
@discordset
@discordset Месяц назад
++
@yaroslavbox1249
@yaroslavbox1249 Месяц назад
Thanks for this video. The example with the init method at the end of the collection information was very useful. Have a nice day colleague !.
Далее
ТАРАКАН
00:38
Просмотров 1,6 млн