Расследование тайны нижнего подчёркивания в C#
HTML-код
- Опубликовано: 25 авг 2024
- Так почему же в C# принято использовать _?
Напильник. Из говнокодеры в хорошие программисты - ijunior.ru/nap...
Обучение с нуля с гарантией трудоустройства - ijunior.ru/uni...
МОЯ КНИГА - csharpbook.saku...
Я В VK - rsakutin
INSTA - / sakutinhuytin
ЯЮниор:
Группа - holymon...
Канал с уроками - / @user-wq2dk1kn2v
ЧАТ В ТЕЛЕГЕ - t.me/csharp_fa...
Discord - / discord
Делать подробный разбор по Dynamic Binding и работу с COM объектами?
Давай,
Даппп
Yes
Это тестовый стенд был. Я специально уточнил это в начале. Также все эти истории с доп. атрибутами и схемами я отдельно обсудил.
нет
Если костыль использовать везде, он превратится в свой стиль ☝️
Сейчас сижу и переписываю все скрипты,добавляя префикс к приватным полям , чтобы быть true программистом.
Ты не тру программист, если называешь себя true
false программист
И зря
@@SomeOne-fm2wb !true
!false
Для меня самым большим преимуществом такой конвенции является то, что даже беглый взгляд на код позволяет совершенно чётко понять, где публичные поля, где приватные поля, а где локальные переменные, даже не вдаваясь в логику самого кода. И код-ревью становится гораздо приятнее. Лишние сэкономленные миллисекунды никогда не помешают, когда анализируешь код в промышленных масштабах
//private fields:
private int myField;
//public fields:
public int MyField;
@@fidem9232
// local variable
int myField;
myField = myField; // WTF???
@@vitiok78 this.myField = myField;
@@fidem9232 Вот именно! Теряется единообразие кода. Ведь в других методах будет, скорей всего, использоваться просто myField. А у такого кода уже появляется "запах"
@@fidem9232 переменные НЕ должны начинаться с большой буквы!
НИ В КОЕМ СЛУЧАЕ!
Иначе код превращается в венигрет.
Топ!
Ждём разбор кода Хауди Хо!
Или Гоши Дударя
Он с хауди хо так смешно в начале выступил, я чуть со смеху не лопнул
и твой код тоже
Хороший совет про то, что нужно писать - как принято в компании :) Возьму на вооружение :)
Это вообще единственно-верный совет. Умников, которые делают всё поперёк, никто нигде не любит
а можно делать иначе? и зачем? это как ехать в потоке машин, если все едут 200, но превышают, то и ты должен ехать так же, потому что если ты будешь ехать 60 но по правилам ты создашь больше проблем
как раз underscore это костыль, + его принесли из с , с++
Я лично для себя, в своих проектах, определил, что приватные поля без ниженого подчеркивания, а локальные переменные с нижним подчеркиванием. Но про json с нижним регистром все равно полезно было узнать
Роман, подскажите. Вы делаете модули(ассеты) под юнити? мы наняли программиста, а он оставил после себя фаршмак. Помимо оплаты готов отдать старый модуль на показать, каких спецов выпускает современное инфополе
Обожаю плюсы за резервацию нижнего подчеркивания для макро в стандартной библиотеке
После канала Максима Крюкова сюда возвращаюсь как на каникулы после тяжелого года, отсыпаться, отжираться.
0:35 ахах, это же мой коммент))
а где он был оставлен?
@@avlczelshambler2235 какое именно
@@avlczelshambler2235 спасибо
Котаны не ведитесь на это, пишите либо как в компании принято, либо консистентно используйте this только в конструкторе)
Что значит консистентно? Единообразно что ли?
@@user-qb8lx2uq5j Это значит единообразно
Я всегда использую this
Плюсую двумя руками! А то загоняет тут, типа, «не пишите так, потому что я забывал писать this.»- отличная причина
Я думаю все мы желаем лютого замеса с Хауди Хо
я не жду, хауди какой то сахарноунылый. Не это не плохо, просто кто то любит манку, а кто то шашлык :)
И тем не менее, поведение VS при автоматическом преобразовании property в full property - студия создаёт поле с маленькой буквы.
Настроить в студии можно
Про underscore есть еще мнение, что так удобнее сортировать список объектов которые выдает IntelliSense.
ПС: Свойство, реализованное через стрелочный оператор, развернется в !!!два!!! метода Get/Set? Если ругаешь других 'программистов' за неточности в терминалогии, будь добр сам соответствуй ;-)
Блин, наконец-то нормальный нетоксичный видос!!! Ура! Спасибо большое тебе...
Ждём когда в код будут добавлять гачи фразы
Рома, почему не Райдер?
Который в 5 раз медленнее VS работает, да ещё и интерфейс убогий?
@@TheHardPotter интерфейс это субъективно и тут у каждого свои вкусы и своё мнение, но медленне, да ещё и в 5 раз? Ты точно понимаешь о чём говоришь или лишь бы обосрать?
@@TedFanat может не в 5, но я пробовал его использовать и он заметно лагает по сравнению с VS, при том, что комп у меня достаточно мощный
@@TheHardPotter так лол, ты решарпер на студию поставь, чтобы хотя бы приблизиться к возможностям райдера и тогда посмотри на скорость))0 райдер х64 - в больших проектах ведет себя гораздо быстрее
@@fire_Rising reshaper стоит, и его производительность меня устраивает, а в rider мне не нравиться практически все
Хотелось бы видео про все виды подчëркивания. Раз есть "нижнее", то должны быть и другие.
Перед этим видео смотрел твой видос 2020-го года и заметил одну вещь: ты начал говорить громче, но громкость видео в целом так и осталась низкой.
По-прежнему приходится выкручивать динамик компа на 90%, чтобы нормально слышать слова. А потом, при переключении на ролик с другого канала, пускать кровь из ушей, потому что динамик орёт на всю квартиру и ещё несколько соседних.
Рома, бл***ь, сделай с этим что-нибудь, пожалуйста!
Накаси-выкуси хейтер. Вот и нетоксичный познавательный видос!
- у Романа все видосы привратились в ТУПО критиканство и доёпывания до чужих стилей программирования и проектов.
- видимо он возомнил себя величайшим гуру и БОГОМ программирования...
Это ведь так легко, самому НИХРЕНА не делать (делал помнится он что-то на показ, но не долго что-то...), и только на обсирании других людей и их проектов выезжать...
Не знаю, мне привычнее уже называть поля атрибутами класса. Так тоже верно но некоторые до...стают
А еще их можно называть свойствами, а еще, если человек, с которым ты разговариваешь тебя понимает, то можно их хоть слонами розовыми называть - всем насрать.
Видел пару раз отсылки к “elegant objects” можно узнать ваше мнение насчёт книги?
Консистенция кода в описанном кейсе -- это лицемерный фанатизм. Можно много примеров привести, где это единообразие не нужно. Где-то можно только ifами сделать, где-то лучше подойдëт switch. Где-то нужны операторные скобки, где-то они будут только загромождать экранное пространство. Где-то можно тело функции или геттера свойства определить через =>, где-то снова придëтся использовать операторные скобки.
0:36 а почему хауди здесь мало того что поле переменной называет, так ещё и свойством???
Это видео можно использовать как скороговорку
В языке дарт нету спецификаторов доступа private и public. Если нвзванин поля начинается с _ оно становится приватным, иначе публичное ))) а вообще это с древних временн так делают , почему это тренд?
Кхе, старые проблемы в новой сковородке. Но круто объяснил.
бедная жена
Думаешь она другого стиля хочет придерживаться и подумывает о разводе?
@@user-qb8lx2uq5j Думаю с таким токсиком замужем быть то лучше откинуться
@@soteyl ну если это так, то пару тройку лет. Если не так, то 5-6 )))
Так угарел конечно на 40 секунде. Поймут только тëски😁
Вот я смотрел на ecs, и я так понял, что там сущности с данными делают мутабельными.
Что ты думаешь насчёт Rider от JetBrains и почему пользуешься именно Visual Studio?
Слышал что rider используют не совсем net, а jvm
Я расширение для VS использую от JetBrains, называется ReSharper. Топовая штука.
Если у нас где-то в коде не используешь this, пинком под зад вылетаешь запросто.
У вас рассрочка только на 11 месяцев или есть разные планы?
PascalCase для полей и свойств решает все проблемы описанные в ролике. Подчеркивание для динозавров.
Ну хз, я никогда не применял нижнее подчеркивание - имхо, менее читабельно... НО если будут возникают указанные проблемы, то, конечно, буду подчеркивание добавлять или иначе как-то помечать, чтобы не было конфликтов.
нижнее подчёркивание исключительно удобно и полезно!
только не для глупого обозначения приватных переменных, а для выделения кэширующих переменных.
Почему в консрукторе нельзя производить вычисления?
Окей, это всё замечательно. А что делать с SerializeField - ведь при переименовании слетят все ссылки объектов на сцене.
А вместо name можно использовать selfName. В случае же изменения модификатора доступа в коде останется куча публичных полей с _.
И да - подчёркивание ухудшает читаемость кода
А ты имеешь ввиду name = selfName?
Если так, то нарушается логика, я думаю. name можно еще перевести как название. И в это, не то имя, не то название, присваивается "собственное имя". Это в таком простом примере всё очевидно, но когда код разрастётся, будут моменты, я считаю, когда ты тратишь время на то, чтобы понять имя это или название. Да и вообще по смыслу, что переменная эта, что поле, одинаковые, думаю, странно называть их по-разному
@@user-np9ll4iq7q Нет. name относится к пространству имён Unity.
При этом, у тебя в видеоролехах есть публичные методы, которые начинаются с нижнего подчеркивания. Это уникальный собственный style?
Да, это очень важный вопрос, похоже. А зачем писать private если можно не писать?
если не написать private там где это следовало бы, то какой-то алшка может влезть туда куда не надо, а если поставить перед именем поля _ андерскор, то этот алешка может даже и не узнает о его существовании или задумается, а стоит ли ему туда лезть
@@N5O1 чушь!
если кто захочет влезть и поменять - это не помешает! и ваш приват он найдёт и уберёт.
@@mimineko3100 чушь! Далеко невсегда есть возможность залезть и поменять исходник, например в пакете, это нужно быть совсем алешкой что лезть в пакет и там что то менять , это даже не выстрел в ногу, это выстрел в яйца
Топовое рассуждение!
прив сделай пожалуйста видео о том как в юнити2д генерируется руда в генерируемом мире
Отличное видео
Преодоление этой проблемы решается уникальным именованием а андерскор это просто тупой костыль отмайков
With all due respect, all information is googled both in Russian and engl
Оказалось что бы код выглядит красиво в глазах чсвшных "сениор+" кодеров
ой млять, ща в дотку катку сыграю и посмотрю
В джаве такой хуйни нет
По понятным причинам
Топчик, как всегда лайк!
А чё с одной стороны делать подчёркивание? Можно _age_
Ссылку бы на конвенцию
Про cpp обидно, но это правда.😤
смотрим на дату этой "засекреченной договоренности" 2014 год ... и все кто до этого писали нормально и соблюдали отсутствие подчеркиваний в наименованиях, т.к. это явно моветон, вдруг должны изменить свое мнение :) ну, не бред? будет желание найду книгу по стилю у себя на полке, и приведу именно от туда аргументы почему так не правильно. Ах, да и какая мне половая разница до сериализаторов на других языках, кроме С# .. .потерю логики заметили? возврат к венгерской нотации?
Книга называется "Современная практика программирования на Microsoft Visual Basic и Visual C#", действительно там есть правило 12.16 которое рекомендует именно для полей у которых объявлено свойство начинать имя с "m_" или просто с "_", и аргументами там является как раз IntelliSence и возможности IDE (в Visual Basic знак подчеркивания мог быть не виден). Но и то и другое, имхо, бред, т.к. в базовом правиле 12.1. указано ровно другое - для закрытых полей начинать со строчной буквы, чему я и следую в не зависимости от наличия свойства к полю. А разименовать поле с параметром легко, если к параметрам добавлять префикс argName - что очевидно подчеркивает суть параметра как аргумента метода, и не нарушает стиля именования.
Не переубедил, попробую твой курс купить мб там детальней откроется проблема нижнего подчёркивание.
С ног на голову!
даешь разбор кода хабиба хо
Как-то ты путанно рассказываешь, я и из предыдущего поста и из этого видео до самого конца не мог толком понять ты ЗА андерскор топишь или ПРОТИВ него. Все думал ты сейчас расскажешь причины почему так раньше делали и как сейчас от него отказались и есть новое удобное решение. Но нет же - вывод видео оказался прозаичным "используй андерскор и все будет круто".
Как во втором пункте у тебя рассказано, так вроде и считалось обычно - андерскор для приватных полей, локальные переменные в функции просто с маленькой буквы, проперти с большой. И все это именно для того чтобы глазом видно было в коде что есть что и не было this
Вот из-за таких профессионалов с 10-летним опытом в 24 года и не устроиться новичкам
(srczm)
Я трудоустроен с 15 лет :)
и со старта был оклад в 1000$
@@rsakutin пруфов не будет)
ты не можешь устроиться, потому что ты ноешь, а не учишься.
ты лучше возьми и начни учиться, чем сидеть и ждать, пока рынок подстроится под тебя
@@rsakutin а я с 10 лет миллиардер
Ни*уя не понял, но очень интересно
Поле это та ерунда, что записывается какая то функция{strint japole}
блаблабла get{int ja pole} ?
class Test
{
private int _field;
public void Foo(int parameter)
{
int variable = parameter;
}
}
вот так
@@Norgarfist ммм т.е. переменная, но в классе? А приватная не приватная нет разинцы?
@@DarkW1zard ты видео смотрел?
да это "переменная внутри экземпляра класса", но это не переменная - это поле, аргумент функции, ты же не называешь переменной
@@N5O1 на данном этапе я почти все называю. "это, эта, вот эта штука" и я еще заметил, что мой мозг отключается когда Рома начинает говорить слова наподобие, "абстракция" после этих волшебных слов я как будто перестаю соображать :)
@@DarkW1zard я посмотрел пару его видео и не понимаю, что вы внем находите, лучше поищи что-то толковое, даже если ты чего-то не понимаешь просто гугли и читай и даже если ты потом не поймёшь, читай и смотри больше, практикуйся и когда-нибудь поймёшь, так у всех. Я программирование изучаю активно последние года 2, но ООП и то как работают классы понял только недавно. Посмотри видео с канала extreme code , они там на простых примерах все объясняют
Я использую подчеркивание только когда имя поля совпадает с переменной, которая это хранит. В других языках где нет приватных переменных у классов типа javascript как показатель что поле приватное, чтобы случайно не обращаться к нему снаружи.
*Cum объекты* 🤣
да ладно, признайте, что к вам пришли нормальные пайтон разрабы и заставили понятно писать код
В некоторых языках используют нижнее подчеркивание перед переменной, если не планируют использовать эту переменную. Но тогда зачем ее создавать?!
потому что она может быть нуджа только в одном месте, там где она была объявлена, так как private, а если какой-то алеша захочет ее поменять то он задумается, или не сможет ее вызвать не добавив андерскор
В каких языках?
@@bublik20 js например и python
@@N5O1 тогда не понял , зачем помечать переменную которая не будет использована? Ее убрать вообще нужно
@@bublik20 у тебя есть класс или функция, условный валидатор. Ты внутри неё создаёшь переменную и записываешь туда какие-то данные, внутри этой функции или класса ты обрабатываешь данные из этой переменной и потом вывод делаешь через ретерн или записываешь в публичную переменную, так понятно?
А что мешает лучше работать с неймингом?)
У тебя так или иначе свойства и приватные поля будут отвечать за разные вещи
а нахрена тебе работать с неймингом если у тебя задача есть записать значение в переменную, что-то с ней сделать и забыть о ней и желательно, чтобы к ней больше никто не прикосался.
в видео достаточно подробные примеры применения
А принято ли писать нижнее подчеркивание когда мы пишем [SerializeField] private ...?
Да.
Yeah
4:17 NOTEPAD КРУЧЕ , НЕТ БЛОКНОТ😂😂
нотепад++ 🤟😔
Ручка с тетрадью ; )
@@doodocina блокнот++
Прошло 30 секунд. Я уже угараю🤣
Кста, что лучше rider или visual studio?
Ну тут без комментариев, друг
Конечно зависит всё от того, что тебе понравится, наверное, но в общем и целом:
- Без ssd райдер можно даже не запускать
- Дизайн у райдера всё ещё довольно странный
- Некоторые вещи в райдере реализованы немного скудно
- Коммьюнити всё-таки будет поменьше
Наверное из основного что-то такое, мне хватает VS + ReSharper для "моих задач"
Ответь пожалуйста!
что ты думаешь на счет такой замены всех Update на один?: ruclips.net/video/JcqU2zHBwFY/видео.html
кстати про это профи давно говорили, и это действительно хорошее решение, но не всегда легко выполнимое.
например, многие чужие модули, расширения и плагины, могут под капотом юзать апдейты, и у тебя в проекте всё равно будет много апдейтов а не один.
- кстати это одна из причин, почему я не люблю чужие расширения и плагины, а предпочитаю все сделать сам.
⚡⚡⚡⚡⚡💥🔥
А чем же тогда плохо именование в стиле m_MyPrivateField? Мотивироваться только тем, что такое именование не используют в MS, ну такое себе...
конвенция это как принято, и если на каком-то языке принято писать так, то "ЛУЧШЕ" писать так, тебе никто не заприщяет пИСать_КоД_воТаК, но будет ли удобно читать другим людям это? или более опытным программистам, которые привыкли работать по конвенции.
Неважно придерживаться каких - то строгих правил в написании кода. Пиши так, как угодно тебе
Если работаешь в одиночку - пиши.
Твоя имитация английского акцента ужасна
сколько же воды. сколько учу программирование, всегда все говоили, что переменные\поля, которые ты хочешь скрыть\сделать приватными нужно помечать каким-то символом.
даже в документации TS вчера прочел, такую штуку: #noPropertyAccessFromIndexSignature
The goal of this flag is to signal intent in your calling syntax about how certain you are this property exists.
и какой смысл их помечать? ))
- нету никакого смысла. всегда легко увидеть, где приватная переменная, а где - нет.
@@mimineko3100 ну, вот открой гугл транслейт и переведи то, что написано после хештега
Шикарный байт на лайки, ставлю
я был 666 поставившим лайк)))
Какая разница как ты пишешь код, самое главное что он работает. Код может быть отличным, но он вполне может работать Хуже чем тяп ляп код
Большая, криво написанный код тяжело изменить + на работе в компании не только ты работаешь с кодом и им надо понять что и как делается.
- ВЕРНО!
а идеализм во всём - это ЗЛО и ТУПО!
@@user-oe8mn1ph6n это не противоречит моим словам
@@mimineko3100 👍🏻👍🏻👍🏻
@@user-oe8mn1ph6n а НЕ нада чтоб его кто-то менял кроме тебя!
не хотят с тобой сотрудничать дальше? - ПУСТЬ помучаются! глядишь, и снова к тебе обратятся, за дополнительные деньги.
А разбираться в ЛЮБОМ чужом коде - НЕ подарок!
разбирался я как-то в проекте нашем коммерческом, в коде коллеги - профессионала... - замучался!
у каждого своя логика... которая порой, не перевариваема в принципе...
Ну ты и kоn4
Тебя не смущает что в самом названии "переменная" лежит смысл сущности.
Когда ты сам вводишь это значение, это переменная.
А когда ты предлагаешь пользователю ввести туда значение, это уже поле.
Так что, называть это всегда переменная более правильно. Так как в коде редко есть ситуации, когда именно пользователю нужно вводить значение.
Нижне подчеркиваниеи пробел тире и минус они в коде настолько одинаковые, я бы их запретил.
var varName
var _varName
var var Name
var var.Name
в каком месте они похожи? и вариант с пробелом у тебя не сработает как и с точкой, но точка вообще для друго-то служит
@@N5O1 капес ты магуч держу пари если это твой пароль после седьмого скрамроментированого ты все перебирёш но свой невспомниш когда 2 капчи тебе подсуну на подтверждение.)
@@karmanov2004 что?
- слепой да? ЛОЛ
@@mimineko3100 ну, я может чего-то не понимаю, вас тут двое, но мне так никто и не объяснил , чем они похожи
1-й агрумент ок, второй херня полная