Слайд 2Функция
Повторно используемая часть кода
Функция имеет имя
Функция имеет ни одного, один или несколько
![Функция Повторно используемая часть кода Функция имеет имя Функция имеет ни одного,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-1.jpg)
аргументов – формальных параметров
Функция (ее прототип) должен быть заранее создан
В прототипе используются формальные параметры функции
Функция (обычно) вызывается по ее имени
При вызове в скобках указываются «настоящие» аргументы – фактические параметры
Слайд 3Функция
Фактические параметры рассчитываются, их значения присваиваются формальным параметрам
Далее в функции используются эти
![Функция Фактические параметры рассчитываются, их значения присваиваются формальным параметрам Далее в функции](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-2.jpg)
фактические значения
Внутри функции могут быть свои – локальные переменные
Они «перекрывают» внешние переменные
Функции могут (а обычно и возвращают) давать результат
За выдачу результата отвечает ключевое слов return
Слайд 4Пример
Я хочу, чтобы у меня была функция, печатающая строки разными цветами
Таким образом,
![Пример Я хочу, чтобы у меня была функция, печатающая строки разными цветами](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-3.jpg)
мне нужна функция PrintColor (например)
Представим себе ее логику:
Надо задать цвет символов консоли
Надо напечатать строку
Слайд 5Пример
Но, что если я хочу ПОТОМ напечатать что-то НЕ цветное
Хорошо бы запоминать
![Пример Но, что если я хочу ПОТОМ напечатать что-то НЕ цветное Хорошо](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-4.jpg)
старый цвет
Заменить его на желаемый
Напечатать нужное
Восстановить старый цвет
Слайд 6Пример
Итак, есть имя функции – PrintColor
У нее два аргумента:
Строка для печати
Цвет строки
Функция:
Запоминает
![Пример Итак, есть имя функции – PrintColor У нее два аргумента: Строка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-5.jpg)
старый цвет символов
Задает новый
Печатает строку
Восстанавливает старый цвет
Слайд 7Текст функции
void PrintColor(string value, ConsoleColor color)
{
ConsoleColor old = Console.ForegroundColor;
Console.ForegroundColor
![Текст функции void PrintColor(string value, ConsoleColor color) { ConsoleColor old = Console.ForegroundColor;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-6.jpg)
= color;
Console.WriteLine(value);
Console.ForegroundColor = old;
}
Слайд 8Пояснения
Функции не нужно возвращать результат (поэтому она возвращает условное «пустое» - void
![Пояснения Функции не нужно возвращать результат (поэтому она возвращает условное «пустое» -](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-7.jpg)
значение)
Старый цвет сохраняется в переменной old
Слайд 9Что улучшить
Возвращать цвет печати на момент вызова функции (вернем старый цвет –
![Что улучшить Возвращать цвет печати на момент вызова функции (вернем старый цвет](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-8.jpg)
old)
Предположим, я считаю нужным в основном печатать цветные строки зеленым
Тогда мне следует задать значение аргумента цвета «по умолчанию»
Слайд 10Улучшенная версия
ConsoleColor printColor(string value, ConsoleColor color = ConsoleColor.Green)
{
ConsoleColor old
![Улучшенная версия ConsoleColor printColor(string value, ConsoleColor color = ConsoleColor.Green) { ConsoleColor old](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-9.jpg)
= Console.ForegroundColor;
Console.ForegroundColor = color;
Console.WriteLine(value);
Console.ForegroundColor = old;
return old;
}
Слайд 11Где помещать функции?
В C# функций в чистом виде не так много.
Как правило,
![Где помещать функции? В C# функций в чистом виде не так много.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-10.jpg)
у функции есть хозяин в виде объекта.
Тогда функция называется методом класса.
Иногда даже специально создают класс для сбора функций в виде методов
Можно создавать и локальные функции
Слайд 12Прототип функции и пример использования
![Прототип функции и пример использования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-11.jpg)
Слайд 13Примеры
Вызов “старой” функции печати
Печатать с новым цветом
Печатать с цветом по умолчанию.
![Примеры Вызов “старой” функции печати Печатать с новым цветом Печатать с цветом по умолчанию.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-12.jpg)
Слайд 14Где размещать функции?
Локально, по мере надобности (см. пример выше)
Как метод класса (см.
![Где размещать функции? Локально, по мере надобности (см. пример выше) Как метод класса (см. ниже)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-13.jpg)
ниже)
Слайд 15Тонкость
Метод main статический, поэтому методы также должны быть статическими (static)
![Тонкость Метод main статический, поэтому методы также должны быть статическими (static)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-14.jpg)
Слайд 16Лямбда выражения
Создают локальную функцию или цепочку функций, которые даже не имеют собственного
![Лямбда выражения Создают локальную функцию или цепочку функций, которые даже не имеют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-15.jpg)
имени
Такие функции нужны, чтобы локально сделать быструю (и обычно простую) операцию над данными
Лямбда-выражение — это анонимная функция , с помощью которой можно создавать типы делегатов или деревьев выражений . С помощью лямбда-выражений можно писать локальные функции, которые можно передавать в качестве аргументов или возвращать в качестве значений из вызовов функций. Лямбда-выражения особенно полезны при написании выражений запросов LINQ.
Чтобы создать лямбда-выражение, необходимо указать входные параметры (если они есть) с левой стороны лямбда-оператора =>, и поместить блок выражений или операторов с другой стороны. Например, лямбда-выражение x => x * x задает параметр с именем x и возвращает значение x
Слайд 17Печать квадратов и кубов массива
double []x= { 1, 2, 3, 4,
![Печать квадратов и кубов массива double []x= { 1, 2, 3, 4,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-16.jpg)
5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20 };
foreach (double d in x)
{
StringBuilder stringBuilder = new StringBuilder();
PrintColor( stringBuilder.AppendFormat("x = {0} x^2= {1} x^3= {2}", d, d * d,d * d * d).ToString());
}
Console.ReadLine();
Слайд 18Пояснения
x – массив десятичных дробей
foreach (double d in x) – берет
![Пояснения x – массив десятичных дробей foreach (double d in x) –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-17.jpg)
из массива х поочередно его компоненты
StringBuilder stringBuilder = new StringBuilder(); - создает строку, которая может менять содержание
PrintColor( stringBuilder.AppendFormat("x = {0} x^2= {1} x^3= {2}", d, d * d,d * d * d).ToString()); - печатает в цвете
Слайд 19Выбор данных
Чтобы напечатать лишь часть данных, надо создать для них запрос с
![Выбор данных Чтобы напечатать лишь часть данных, надо создать для них запрос](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-18.jpg)
подходящим условием
Программа просмотрит данные и оставит только те, которые соответствуют запросу
Слайд 20Запрос
IEnumerable query =
x.Where(number => number*number>10*number);
Строка создает запрос данных типа double
Where –
![Запрос IEnumerable query = x.Where(number => number*number>10*number); Строка создает запрос данных типа](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-19.jpg)
условие запроса
Условие должно давать логический (bool) критерий
Слайд 22Вывод фильтрованных данных
foreach (double d in query)
{
StringBuilder stringBuilder = new
![Вывод фильтрованных данных foreach (double d in query) { StringBuilder stringBuilder =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/943826/slide-21.jpg)
StringBuilder();
PrintColor(stringBuilder.AppendFormat("x = {0} x^2= {1} x^3= {2}", d, d * d, d * d * d).ToString());
}
Console.ReadLine();