В линкпаде не получится сохранять результаты, они выводятся в окно типа консоли. Здесь же в результате получится чередование кода и его результатов, которую также можно разбавить текстом с пояснениями — и вот уже готовая презентация, например.
В нашей компании тоже минувшим летом организовали обучение по трем направлениям — фронтенд (ангуляр), бэкенд (.net, ms sql, etc.) и devops. Вызвался вести семинары (бэк) вместе с еще одним коллегой, и ничуть не пожалел.
На первом занятии собралось 15 человек, правда половина из них почти сразу отвалилось. Но по окончании двух месяцев занятий (по плану собирались раз в неделю, но почти каждую неделю проводили по два занятия) осталось пятеро человек, которые демонстрировали то что успели сделать, и в итоге четырем направили оффер. Двое уже работают с нами в команде.
Понравилось, когда обучаешь людей новым интересным для них вещам, видишь позитивный отклик.
Думаю, минусы оттого, что Ваш комментарий не содержит ничего по теме статьи, лишь жалобу про ограниченный профиль. Оппонируйте, или выскажите свою мысль, которая будет развивать представленные в статье тезисы.
Мы на своём проекте договорились следовать конвенции FindUser(int id) — поиск по идентификатору, если не найден — вернуть null; GetUser(int id) — получить юзера по известному идентификатору. И во втором случае уже при неудачной попытке будет выброшено исключение.
Вспоминаю историю, как в какой-то стране (вроде Великобритании) на съездах устанавливали отбойники, которые из-за трамплинообразной формы провоцировали опрокидывание автомобиля в случае наезда на них на скорости.
Из-за того, что статистику анализировали на основе координат ДТП, долгое время проблема оставалась невыявленной, а власти не спешили признавать проблему — ведь «горячих точек» на карте не было, аварии были распределены по множеству съездов и перекрестков.
Часто использую VS Code как «продвинутый блокнот», и частым сценарием является вставка и форматирование json-ответов, для удобного просмотра их содержимого: вставить в новый документ, переключить язык документа на json (Ctrl-Shift-P -> Change lang mode), форматирование json (Alt-Shift-F).
Недавно нашёл способ пропустить второй шаг, установив дефолтный языковой режим для нового документа настройкой
Полагаю, нужно разграничивать цели, для которых можно использовать такой подход.
Например, для кода с бизнес-логикой extension-методы очень редко используются — их трудно мокать, как уже упомянули выше. Да и в целом такой код иногда нуждается в полиморфизме, то есть переопределении логики для классов-наследников.
Для инфраструктурного кода методы расширения — это очень мощный инструмент, который позволяет писать более декларативный код без необходимости изменения классов, с которыми он работает (а иногда к ним может вообще не быть доступа, например для классов из сторонних библиотек). Поскольку такой код обычно не содержит бизнес-логики, то вопрос с юнит-тестами не стоит так остро.
Впрочем, и для методов расширения можно реализовать механизмы, которые позволят переопределить логику работы в юнит-тестах, если внутри них обращаться к синглтону, который и содержит логику их работы, и может быть подменён при запуске тестов.
В предыдущих примерах при отсутствии файла appsettings.json приложение выбросит исключение
Если для создания хоста приложения (в файле Program.cs) используется метод CreateDefaultBuilder, то файл «appsettings.json» уже добавлен с опциями «optional: true» и «reloadOnChange: true»:
Насколько я помню из нумизматики, тогда (в начале XVIII века) года вовсе буквами обозначали. Например АѰЕ
обозначало 1705.
Если кому интересно, можно погуглить «год буквами на монетах»
Так нет такого «нулевого года», именно об этом речь. Когда человек рождается, он проживает первый год.
Сейчас на дворе две тысячи двадцатый год, то есть прошло от начала эры только 2019 полных лет.
Согласен: если речь идёт о функции, которая принимает object и сверяет его тип на соответствие конкретным типам, такой код явно пахнет.
Но в случае, например, Union-типов, когда на входе у нас, например, `Customer | Error`, можно обработать ошибочный сценарий в функциональном стиле при помощи паттерн-матчинга. Эх, вот бы наконец завезли в C# Union-типы…
На первом занятии собралось 15 человек, правда половина из них почти сразу отвалилось. Но по окончании двух месяцев занятий (по плану собирались раз в неделю, но почти каждую неделю проводили по два занятия) осталось пятеро человек, которые демонстрировали то что успели сделать, и в итоге четырем направили оффер. Двое уже работают с нами в команде.
Понравилось, когда обучаешь людей новым интересным для них вещам, видишь позитивный отклик.
Из-за того, что статистику анализировали на основе координат ДТП, долгое время проблема оставалась невыявленной, а власти не спешили признавать проблему — ведь «горячих точек» на карте не было, аварии были распределены по множеству съездов и перекрестков.
Недавно нашёл способ пропустить второй шаг, установив дефолтный языковой режим для нового документа настройкой
"files.defaultLanguage": "json"
stackoverflow.com/questions/35904221/change-vscode-default-language-for-new-files
Например, для кода с бизнес-логикой extension-методы очень редко используются — их трудно мокать, как уже упомянули выше. Да и в целом такой код иногда нуждается в полиморфизме, то есть переопределении логики для классов-наследников.
Для инфраструктурного кода методы расширения — это очень мощный инструмент, который позволяет писать более декларативный код без необходимости изменения классов, с которыми он работает (а иногда к ним может вообще не быть доступа, например для классов из сторонних библиотек). Поскольку такой код обычно не содержит бизнес-логики, то вопрос с юнит-тестами не стоит так остро.
Впрочем, и для методов расширения можно реализовать механизмы, которые позволят переопределить логику работы в юнит-тестах, если внутри них обращаться к синглтону, который и содержит логику их работы, и может быть подменён при запуске тестов.
Если для создания хоста приложения (в файле Program.cs) используется метод CreateDefaultBuilder, то файл «appsettings.json» уже добавлен с опциями «optional: true» и «reloadOnChange: true»:
github.com/dotnet/aspnetcore/blob/7e9e03b70124784b1de5564c573bd65cdaccbfcc/src/DefaultBuilder/src/WebHost.cs#L173
В том-то и дело, что не прошел — нумеруя год единицей, мы говорим что он первый. В прямом смысле — самый первый год (относящийся к нашей эре).
АѰЕ
обозначало 1705.
Если кому интересно, можно погуглить «год буквами на монетах»
Сейчас на дворе две тысячи двадцатый год, то есть прошло от начала эры только 2019 полных лет.
ru.wikipedia.org/wiki/От_Рождества_Христова
должно быть
Иначе просто не скомпилируется.
Но в случае, например, Union-типов, когда на входе у нас, например, `
Customer | Error
`, можно обработать ошибочный сценарий в функциональном стиле при помощи паттерн-матчинга. Эх, вот бы наконец завезли в C# Union-типы…Источник