Слайд 1Лекция 7.
Процедуры и функции
дисциплина «Программирование»
Козьминых Н.М.
Слайд 2Определение
Козьминых Н.М.
Процедуры и функции позволяют:
задать определенную функциональность,
многократно выполнять один
и тот же параметризированный программный код при различных значениях параметров.
В
C# процедуры и функции существуют только как методы некоторого класса, они не существуют вне класса.
Слайд 3Функции
Козьминых Н.М.
Функция отличается от процедуры двумя особенностями:
Она всегда вычисляет некоторое
значение, возвращаемое в качестве результата функции;
И вызывается в выражениях.
Слайд 4Процедуры
Козьминых Н.М.
Процедура C# имеет свои особенности:
Она возвращает формальный результат
void, указывающий на отсутствие результата;
Вызов процедуры является оператором языка;
И она имеет входные и выходные аргументы, причем выходных аргументов - ее результатов - может быть достаточно много.
Слайд 5Функции и процедуры (методы)
Козьминых Н.М.
Обычно метод предпочитают реализовать в виде
функции тогда, когда он имеет один выходной аргумент, рассматриваемый как
результат вычисления значения функции.
Возможность вызова функций в выражениях также влияет на выбор в пользу реализации метода в виде функции.
В других случаях метод реализуют в виде процедуры.
Слайд 6Метод
Козьминых Н.М.
Синтаксически в описании метода различают две части:
заголовок_метода
тело_метода
Слайд 7Заголовок метода
Козьминых Н.М.
Синтаксис:
[атрибуты][модификаторы]{void| тип_рез_функции}
имя_метода
([список_формальных_аргументов])
Имя метода и список
формальных аргументов составляют сигнатуру метода.
В сигнатуру не входят имена формальных
аргументов - здесь важны типы аргументов.
В сигнатуру не входит тип возвращаемого результата.
Слайд 8Модификатор
Козьминых Н.М.
Модификатор доступа может иметь четыре возможных значения, рассмотрим только
два - public и private.
Модификатор public показывает, что метод открыт
и доступен для вызова клиентами и потомками класса.
Модификатор private говорит, что метод предназначен для внутреннего использования в классе и доступен для вызова только в теле методов самого класса.
Если модификатор доступа опущен, то по умолчанию предполагается, что он имеет значение private.
Слайд 9Тип результата
Козьминых Н.М.
Тип результата метода указывается всегда, но значение void
однозначно определяет, что метод реализуется процедурой.
Тип результата, отличный от void,
указывает на функцию.
void A() {...};
int B(){...};
public void C(){...};
Методы A и B являются закрытыми, а метод С - открыт.
Методы A и С реализованы процедурами, а метод B - функцией, возвращающей целое значение.
Слайд 10Список формальных аргументов
Козьминых Н.М.
Список формальных аргументов метода может быть пустым.
Список
может содержать фиксированное число аргументов, разделяемых символом запятой.
Синтаксис:
[ ref |
out | params ] тип_аргумента имя_аргумента
Обязательным является указание типа и имени аргумента.
Слайд 11Список формальных аргументов
Козьминых Н.М.
params - ключевое слово, позволяющее передавать методу
произвольное число фактических аргументов.
Аргументы метода разделяются на три группы:
входные,
выходные (out),
обновляемые (ref).
Слайд 12Список формальных аргументов
Козьминых Н.М.
Входные аргументы передают информацию методу, их значения
в теле метода только читаются.
Выходные (out) представляют собой результаты метода,
они получают значения в ходе работы метода.
Обновляемые (ref) выполняют обе функции:
их значения используются в ходе вычислений;
обновляются в результате работы метода.
Слайд 13Тело метода
Козьминых Н.М.
Тело метода является блоком, который представляет собой последовательность
операторов и описаний переменных, заключенную в фигурные скобки.
Если это тело
функции, то в блоке должен быть хотя бы один оператор перехода, возвращающий значение функции в форме return (выражение).
Слайд 14Пример
Козьминых Н.М.
// Процедура с входным и выходным параметрами
private void A(out
double p2, double p1) {
p2 = Math.Pow(p1, 3);
}
// Процедура с обновляемым параметром
private void B(ref int a) {
a++;
}
// Функция
private int C(int a) {
return ++a;
}
Слайд 15Вызов метода
Козьминых Н.М.
Синтаксис:
имя_метода( [список_фактических_аргументов] )
Формальный аргумент задается при определении метода
- это всегда имя аргумента (идентификатор).
Фактический аргумент – это выражение,
используемое при вызове метода.
Слайд 16Вызов метода
Козьминых Н.М.
Между списком формальных и списком фактических аргументов должно
выполняться определенное соответствие по:
числу,
порядку следования,
типу,
статусу аргументов.
Если формальный
аргумент объявлен с ключевым словом ref или out, то фактический аргумент должен сопровождаться таким же ключевым словом при вызове метода.
Слайд 17Пример
Козьминых Н.М.
// Определение метода
private void A(out double p2, double p1){
p2 = Math.Pow(p1, 3);
}
// Вызов метода
private void
btn_Click(object sender, EventArgs e){
double p, s = 2;
A(out p, s);
btn.Text = p.ToString();
}
// Ответ: 8
Слайд 18Пример
Козьминых Н.М.
// Определение метода
private void B(ref int a){
a++;
}
// Вызов метода
private void btn_Click(object sender, EventArgs e){
int p = 10;
B(ref p);
btn.Text = p.ToString();
}
// Ответ: 11
Слайд 19Пример
Козьминых Н.М.
// Определение метода
private int C(int a){
return ++a;
}
//
Вызов метода
private void btn_Click(object sender, EventArgs e){
int
p = 4;
btn.Text = C(p).ToString();
}
// Ответ: 5
Слайд 20Вопросы…
Спасибо за внимание
Козьминых Н.М.