last day (15 days later) » 

09:32
0
Q: Нормально ли использовать var вместо явной типизации в C#?

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

Вам же здесь дали развернутый ответ: qna.habr.com/q/1373844. Чем ответы там Вас не устроили?
@OwDafuq если вопрос и ответы на него будут хорошими, то им место в Базе Знаний ruSO. И не важно, задавались ли они уже где-то или нет (но подкрепляющие ссылки конечно приветствуются).
Ответы, основанные на мнениях, как правило бесполезны на StackOverflow и не приведствуются. Сначала хотел закрыть вопрос по этой причине, но потом нашёл дубликат. Моё личное мнение, var надо запретить законодательно, а тех, кто использует var при решении тестового задания, не брать на работу. И я могу на 2 тома "Войны и мира" написать обоснований. Но это всего-лишь мнение, и оно не имеет ничего общего с объективной реальностью.
@aepot А я считаю, что var - это прекрасно. Например, я получаю из какого-то сервиса коллекцию данных и как-то её поэлементно обрабатываю. Мне совершенно пофигу какого типа эти элементы, и что там за коллекция. Я хочу максимально от этого всего абстрагироваться и var позволяет мне это сделать. Да, есть шаблонные методы, да есть IEnumerable, но зачем загружать код лишними подробностями? Я получаю коллекцию, я её обрабатываю. Что это коллекция и так будет понятно из кода и названия переменной. Зачем мне лишний раз видеть тип, особенно если он сложный какой-нибудь, "многоэтажный"?
"Наводиться мышкой на переменную не лучшее решение, поскольку это привязывает разработчика к IDE, что не есть хорошо." - Наводить мышкой не обязательно, есть inlay hints. Разработчик без IDE - разработчик как без рук.
09:32
ахахахах... вначале все хают PHP за динамическую типизацию, а потом повсеместно в разные языки её внедряют потому что это удобно 😂😂😂
@АлексейШиманский Ну, тут не то, чтобы совсем динамическая типизация... Тут скорее речь про скрытие деталей реализации. )
@OwDafuq, различная аудитория. Я хотел бы увидеть больше мнений по этому поводу
@CrazyElf, как вы можете обработать коллекцию, если вам всё равно, какие там элементы? Вы случайно не индус? Как можно писать нормальный код не углубляясь в подробности? А если у вас процедура изменилась, или кто-то из коллег сервис изменил, или модель поменял? Как вы вообще можете её как-то обработать, если вы толком не понимаете, что внутри? А если это 2/3 этажный дженерик? Как я, который пытаюсь с этим разобраться, должен это понимать?
@CrazyElf, если вы себе работаете сам один, то можете хоть object'ами писать, всем всё равно (Сам одному). Моё мнение, что таких вообще нужно с работы увольнять и на проекты даже на фрилансе не брать, потому что насрать в общую миску всей команды плохая практика
@АлексейШиманский, динамическая типизация убьёт ваш проект. Даже в том же JS для нормальных людей придумали TypeScript, потому что ошибок много с этим вашей "динамической типизацией". Как вы вообще думать собираетесь когда проект делаете? У вас тут вот переменная тип строки в "Hello world" внутри, а потом вы туда Стартап проекта закинули и вызвали билд.
Если вам кто-то что-то категорично заявляет в ту или иную сторону - принимайте к сведению, но "не верьте". У всех разные условия. Основное правило - чем сложнее проект, тем больше "помощи" нужно для его поддержания (в виде максимально строгой типизации в том числе). Чем проект проще, тем меньше профитов от "лучших практик".
@Faraday в неумелых руках и конфетка - какашка. задумайтесь
@АлексейШиманский, ну так зачем правила придумали? Зачем типы придумали? Что бы может головой думать, или отнекиваться и спирать всё на "ну мне так ведите ли проще писать 🤷‍♂️". Тут речь идёт не о руках, а о том, что на проекте индусы могут сидеть и писать такие вещи на которые смотреть страшно. Я так понял, опираясь на ваше высказывание, вы участник команды разработки языка Microsoft? У меня просто нет других предположение, почему с вашими высказываниями вы ещё не достигли всего на свете и "спешного успеха"
09:32
@Faraday Ну как. Я же опять же не тут на месте делаю обработку, я для этого вызываю какой-то метод. Который может быть шаблонным, например. У меня используется DI само собой, код отрефакторен на небольшого размера функции. Поэтому сам код выглядит примерно так: var data = repository.GetData(); foreach (var item in data) { processor.Process(item}; } Зачем в данном коде нужно видеть детали типизации, ну вот реально - зачем, что они вам дадут? Если что-то и сломается, то не в этом коде, а в тех методах, которые он вызывает.
@CrazyElf, тут да, но вы, вроде бы, как опытный разработчик должны понимать, что такое не везде и не всегда бывает. Когда закинуть в foreach var не проблема, проблема когда у тебя сервис на 4к строк и там нет ни единого строгого типа
Забейте на этот var и займитесь более важными вещами.
Кто там противник var? var для объявления локальных переменных. Но вы же методы по несколько строк пишете, где вы там с этим varом заблудиться собираетесь?
@Faraday Повторюсь - я стараюсь рефакторить код на небольшие и довольно универсальные методы. Поэтому участки кода, где используется var - они маленькие и очевидные. Тем более, сейчас в C# есть более удобный синтаксис чтобы не задваивать типизацию при инициализации объектов Type variable = new();, естественно для инициализации объектов я предпочитаю его, а не var variable = new Type();, при инициализации var наоборот мешает нормально видеть тип, особенно в длинных строках, тут я согласен.
@rotabor Подозреваю, что не все занимаются рефакторингом и пишут короткие методы. Возможно, это и правда объясняет их нелюбовь к var.
@Faraday не тащите дополнительные правила и сложность туда где они не нужны (а где нужны - только туда тащите). Вот вы нашли на улице монетку 5р, вы же не будете "по правилам" звонить в полицию, составлять протокол о находке, искать владельца, делать крим.экспертизу на подлинность итп итд? А если 5млн? ;-)
Хотя var не имеет никакого отношения к динамической типизации, хочется поделиться мнением. Я побаловался с Ruby и бросил, когда понял, сколько проблем создаёт динамическая типизация. Но, тем не менее, на Ruby, Python, Java и пр. сделано огромное количество успешных проектов. Мне кажется, спорить нечего, так как имеется большое количество фактов.
09:35
@Faraday Зачем типы придумали? - для неосиляторов, которые не могут писать хороший код, а компиляторы, которые используются слишком тупые, чтобы проводить необходимые проверки корректности ¯\_(ツ)_/¯
@aepot ну вот, опять ретрограды в чате против прогрессивных идей
@Faraday нет никакой проблемы с динамической типизацией. Даже при статической типизации вы можете написать так, что будет ничего не понятно
09:49
@aepot И я могу на 2 тома "Войны и мира" написать обоснований - хотя бы один том давай
@Grundy да прям в этом чате я как минимум несколько вижу, выбирай любой.
10:07
@aepot подсвети: я пока кроме мне не нравится - не увидел
10:29
типы придумали неосиляторы, которые без подсказки интерпретатора или компилятора языка окажутся просто хилыми немощными недопрограммистами, которых, оказывается, давно на помойку пора скинуть и вот они боятся и увешаются всякими тулзами и мнят о себе гуру разработки. А дай им листок бумаги попроси написать банально код сортировки пузырьком - так сразу обкакаются по всем фронтам. Вы вот сможете на листочке её написать со всеми нюансами? Сомневаюсь.

Понятие "успешного успеха" у всех разное и очень сильно субъективное. Для кого-то иметь семью с женой и ребёнком это успешный успех и победа по
@Grundy 1) злоупотребление var затрудняет чтение кода и отладку в некоторых случаях, когда приходится выяснять тип по стеку вызовов или смотреть мышкой в IDE вместо того чтобы просто прочитать. 2) злоупотребление var вызывает ошибки при написании кода в некоторых случаях, например можно случайно пропустить await и ловить исключения вообще в других местах кода, потому что ты передал во всеядный метод не string, а Task<string>.
@Grundy 3) раньше было приколько var x = new MyClass() писать, теперь надо писать MyClass x = new()
@aepot злоупотребление var затрудняет чтение кода и отладку в некоторых случаях - очень субъективно
@aepot потому что ты передал во всеядный метод не string, а Task<string> - очевидно что проблема во всеядности метода, а не в var
@aepot честно говоря - не видно разницы
@Faraday Кстати работа во всяких Мелкософтах и каких-то крупняках - не показатель успеха. Потому что в них может быть по процессам всё очень сильно запущено. И например разговаривая в своё время с МТС с их большой экосистемой, я был удивлён, на сколько у них были в удручающем состоянии процессы разработки в некоторых командах.. с говнокодом и отсутствием правил разработки без банального даже Code Convention и
@Faraday код, например PHP, в который мог влазить и плюсовик и java разработчик, если захочет и будет скучно. В итоге в коде был просто хаос подходов и мешанина.. В Сбере и ВК тоже есть косяки, которые не хотелось бы рассказывать, но общаясь с ними и с командами и видя процессы, понимаешь, что МАСШТАБНОСТЬ компании не является тем, что она и суперпрофи в сфере.
@Faraday Про мелкософт вообще смешно было, потому что у них куча правил, которые надо соблюдать при разработке, а сами они их не соблюдают. Открываешь их исходники хотя бы те которые доступны публично и охаешь и ахаешь
10:59
@Grundy я же в первом комментарии написал, что это моё субъективное мнение. Кому не видно разницы, могут что угодно писать, но упоротых варщиков я к себе в команду брать не буду. Если ты пишешь var i = 0 вместо int i = 0, то с тобой явно что-то не так.
@aepot с тобой явно что-то не так.
@Grundy да с тобой то понятно, что не так, ты просто фротендер. xD
@aepot я здесь, я там, я везде

last day (15 days later) »