user

Авторизация

Добро пожаловать!

Регистрация

Graf

Кодинг

Начало работы с C#

 По мере своего развития C# постоянно перенимал элементы функционального программирования. Во многих случаях — как я уже говорил ранее — C# продолжает сближаться с TypeScript и JavaScript.

Использование лямбда-выражений

 Мы можем начать нашу лабораторную работу с создания лямбда-выражений для «псевдонимов» Console.WriteLine для удобства:

 Это может быть действительно удобным способом уменьшить визуальный беспорядок в вашем коде. Я использую «псевдоним» в кавычках, потому что все, что мы делаем, это пишем функцию с именем log, но использование лямбда-выражений и локальных функций делает ее намного более компактной.

Список лямбда-выражений

 Наш первый пример — это простой массив функций. Мы можем перебрать массив и вызвать каждую функцию с нашими входными данными:

Варианты использования : валидаторы, при выполнении разных расчетов для сравнения результатов по разным алгоритмам, быстрая и грязная облегченная цепочка ответственности .

Именованные лямбда-выражения

 Мы также можем назвать функции как строки, поместив их в словарь:

 Это должно выглядеть очень похоже на любого, кто пишет JavaScript или TypeScript (хотя здесь, на C#, немного более многословно, так как компилятор не может вывести тип, namedFunctions поскольку C# имеет более одного типа словаря ( идея : можем ли мы установить его по умолчанию Dictionary<string,string>? Это было бы замечательным)

Варианты использования : замените отражение более производительным вариантом, используя индексатор строк вместо отражения атрибута.

Ссылки на лямбда-выражения

 Мы также можем использовать список ссылок на лямбда-выражения:

Принятие произвольного количества параметров

 Воспользовавшись LINQ , мы можем принять произвольное количество параметров:

Обернуть другое лямбда-выражение

 Мы можем обернуть список лямбда-выражений в другое лямбда-выражение:

Возврат результатов в словарь

 Мы можем вернуть результаты в виде словаря, который может быть полезен, если мы взаимодействуем через JSON с внешним интерфейсом:

Варианты использования: динамическое создание результатов JSON для внешнего интерфейса, проверка, когда вы хотите иметь ключевое значение, определяющее, какой валидатор не прошел.

Возвращает результаты в кортеже

 Мы также можем получить результаты в виде кортежа:

Выполнить по количеству параметров

 Используя выражения переключения C#, можно выбрать вывод на основе количества параметров:

 Мне очень нравится выразительность выражений switch и тот факт, что, хотя они намного компактнее, чем альтернатива, кажется, что они не теряют читабельности; Я думаю, что это действительно улучшает его.

Количество параметров и лямбда-выражений

 Мы даже можем комбинировать выражение switch с лямбда-выражениями:

Выражение переключения сопоставления шаблонов со встроенными лямбда-выражениями

 Или напишите те же самые лямбда-выражения, встроенные в выражение switch:

Выполнение Lambda по типу параметра

 Одна из моих любимых вещей в выражениях переключения — это то, что мы можем даже переключаться по типу и присваивать в одном компактном выражении:

 Я надеюсь, что эта небольшая лабораторная работа пробудила в вас интерес к изучению более функциональной стороны C#. Многие разработчики C# либо не знают об этих возможностях, либо активно избегают этих возможностей языка. Для меня это одни из самых интересных особенностей языка, а выражение switch — одно из самых универсальных выражений в любом языке (ну, по крайней мере, в тех, с которыми я работаю!).

 Одно из лучших применений лямбда-выражений и локальных функций заключается в том, что они могут упростить вызовы там, где в противном случае вам пришлось бы перемещать дополнительные параметры. Другими словами, когда у вас есть функция входа с параметрами (A, B, C), которая может вызывать вспомогательную функцию, требующую (B, C, D , E ), где D и E вычисляются в функции входа. Использование лямбда-выражения и локальных функций позволяет вам захватить область действия без необходимости иметь перекрывающиеся наборы параметров в ваших функциях (и иногда эти вспомогательные функции действительно не заслуживают своего собственного метода верхнего уровня!).