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