Aleksandr
никто больше не пишет про хелловорлды на сишарпе
Aleksandr
я надеюсь
Mikhαil
Nuxs🏴☠️
Ayrat
Vladimir
ну типа в 99% процентах случаев они ничего не делают, почему сразу к филду не обращаться, а в 1% можно заюзать метод
Aleksandr
Николай
Интересно как он это аргументирует
"Причина в том, что свойства выглядя как поля, являясь по сути методами. Это порождает немыслимую путаницу."
И потом приводит разные аргументы, типа свойства могут выбрасывать исключения, свойства нельзя передавать в out\ref, свойства могут выполняться долго, при нескольких обращениях к одному и тому же свойству могут возвращаться разные результаты (типа DateTime.Now), свойства могут порождать побочные эффекты
Николай
"Единственная привлекательная черта свойств - упрощённый синтаксис, все остальное - недостатки, в числе которых потеря в производительности и читабельности кода"
Николай
И как вывод - если бы синтаксис обращения к свойству отличался от обращения к полям, то это был бы хороший синтаксический сахар для Get()\Set()
Ayrat
Aleksandr
Кстати, по поводу out/ref в проперти - интересно как reactiveui решает эту проблему
Aleksandr
Через експрешны)
Ayrat
Я вот если честно свойствами как полями пользуюсь
Ayrat
Я не помню когда я логику в гетерах сетерах писал. Последний раз в wpf
Ayrat
Ради INotify...
Aleksandr
В swift тоже есть свойства. На спидах
Николай
Он ещё одним из аргументов приводит, что у свойства могут быть разные доступы к чтению\записи, в отличие от поля. И рекомендует создавать свойства с публичным геттером и сеттером..
Aleksandr
Самое то для WPF было бы
Stas
там атрибуты вешать можно + есть Fody
Mikhαil
Николай
Вообще издание древнее, 2012 год, ещё по .NET 4.5, поэтому может у Рихтера с того времени отношение к свойствам и поменялось )
Aleksandr
сами свойства не поменялись
Aleksandr
пока c# 9 не вышел
Михаил
А что нового будет в C# 9 на этот счёт?
Aleksandr
init modifier
Aleksandr
https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
Михаил
Спасибо.
Aleksandr
в разработке на сишарпе вообще страшные вещи происходят
Aleksandr
взять хотя бы автомаппер. вот какого хрена он так популярен
Aleksandr
C# с автомаппером это почти питон, только вербозный
Λ ll И K X
а можно подробнее что не так с автомаппером
Aleksandr
усложняется рефакторинг. Переименование свойства может сломать маппинги, но ты об этом не узнаешь
Aleksandr
никаких гарантий времени компиляции
Aleksandr
ослабление системы типов
Aleksandr
и все это зачастую просто ради того чтобы как-то оправдать наличие в твоем коде дто на 50+ полей
Николай
Yaroslav
усложняется рефакторинг. Переименование свойства может сломать маппинги, но ты об этом не узнаешь
он используется же во всякий ынтырпрайзных штуках, где дтошки уже стандарт вообще необсуждаемый
что бы проверить маппинги, можно создать тест, в котором можно вызвать специальную функцию проверки, и автомаппер проверит маппинги на валидность
про дто с 50 полями нафига не знаю, обычно люди не хотят отдавать лишние данные с роута, поэтому приходиться липить дтошки, а мапить их вручную это вообще муторно
а использую автомапер ты скорее всего уложишься в 2 строчки
Yaroslav
плюс, если ты переименуешь свойство, то скорее всего тебе придеться трахаца со своей orm в любом случае
тот же автомаппер позволяет делать проекцию из IQueryable, что удобно
Roman
взять хотя бы автомаппер. вот какого хрена он так популярен
при всей моей нелюбви к нему, я щас понял одну проблему, которую он решает. Из-за того, что все дто мутабельные, когда ты добавляешь новое поле, у тебя ничего в коде не ломается, если ты забываешь новую пропертю проинициализировать. Автомаппер эти маппинги автоматом обновляет, но по сути ты меняешь одно зло на другое.
Hog
Vagif
при всей моей нелюбви к нему, я щас понял одну проблему, которую он решает. Из-за того, что все дто мутабельные, когда ты добавляешь новое поле, у тебя ничего в коде не ломается, если ты забываешь новую пропертю проинициализировать. Автомаппер эти маппинги автоматом обновляет, но по сути ты меняешь одно зло на другое.
Я не принимаю этот аргумент. Пусть лучше все ломается, когда добавили новое поле, летит ко всем чертям. Прошли те времена, когда я радовался тому, что "само все выправилось", если речь идет о схеме данных. DTO и доменные объекты - разные звери, и автомаппер стирает границы этих различий, начинаешь путать, что куда послал.
Hog
Vladislav
Vagif
Vladislav
Vagif
А 😞
Vladislav
Намывная территория
Hog
Нева, да
Vladislav
Roman
Я не принимаю этот аргумент. Пусть лучше все ломается, когда добавили новое поле, летит ко всем чертям. Прошли те времена, когда я радовался тому, что "само все выправилось", если речь идет о схеме данных. DTO и доменные объекты - разные звери, и автомаппер стирает границы этих различий, начинаешь путать, что куда послал.
Я согласен, но так оно ж не ломается. Оно тихо работает и записывает в базу нулл, если нам не повезло, и поле не обработалось валидатором
Vagif
Если не ломается, то плохо.
Roman
в общем, я не защищаю автомаппер ни в коем случае. Я как раз ушел из сишарпа, чтобы мучительно не выбирать между плохими вариантами
Vagif
Ага
Danil
Hog
Hog
Или ваще жава
Roman
соболезную, правда
Roman
мб в проститутки менеджеры?
Hog
Я начал тренироваться :) уже два раза попадалась «задачка» про частоту слов :)
Roman
Danil
Если выбирать между сишарпом и манагером, я бы пошел на стройку
Roman
Hog
Hog
var words =
new Regex(@"\b([A-Z-]+)\b", RegexOptions.IgnoreCase)
.Matches(str)
.Select(m => m.Groups[0].Value.ToLower())
.GroupBy(g => g)
.Select(g => KeyValuePair.Create(g.Key, g.Count()))
.OrderByDescending(kv => kv.Value)
.ToDictionary(kv => kv.Key, kv => kv.Value);
Hog
Вот, трольное решение набросал :)
Danil
Где то радуется один хаскелист, при виде решения инлайн
Aleksandr
KeyValuePair.Create?
спрашивается, где я был все эти годы?)))
Hog
Hog