- •13.0. Введение в классы, объекты и методы
- •13.1. Синтаксис класса
- •14.0. Подпрограммы
- •14.1. Основные понятия
- •14.2. Сравнение вариантов
- •14.3. Описание методов (процедур и функций)
- •14.4. Аргументы и параметры
- •14.5. Области действия имен
- •14.6. Тело метода (процедуры и функции)
- •14.7. Вызов метода. Синтаксис.
- •14.8. Функция
- •14.9. Процедура
14.0. Подпрограммы
14.1. Основные понятия
Подпрограмма – логически законченная часть программы, которую по имени можно вызывать в разные места программы неограниченное число раз.
Она решает часть общей задачи. У нее есть имя, которое используется при вызове подпрограммы в основную программу.
Подпрограммы бывают 2 видов:
процедуры и
функции.
Функцияотличается от процедуры двумя особенностями:
всегда вычисляет некоторое (одно) значение, возвращаемое в качестве результата функции,
функция вызывается в выражениях.
ПроцедуравC# имеет свои особенности:
возвращает формальный результат void, который указывает на отсутствие результата, возвращаемого при вызове процедуры,
вызов процедуры является оператором языка,
имеет входные и выходные аргументы, причем выходных аргументов – ее результатов – может быть достаточно много.
Обычно метод реализуется в виде функции тогда, когда он имеет один выходной аргумент, рассматриваемый как результат вычисления функции (например, sin(0.5)).
В других случаях метод реализуют в виде процедуры.
Программа без структурных элементов называется монолитной. Минимальный элемент такой программы – оператор (инструкция). Она сложна в разработке, отладке и сопровождении.
Структурированная программа называется модульной. Она содержит более крупные компоненты – подпрограммы. Модульная программа проще создается, более понятна.
Программа на языке C# строится из модулей, роль которых играют классы, но каждый из этих модулей имеет содержательную начинку.
Процедуры и функции связываются с классом, они обеспечивают требуемую функциональность класса и называются методами класса. Существуют только как методы некоторого класса и не существуют вне класса.
Синтаксис объявления метода позволяет однозначно определить, чем является метод – процедурой или функцией.
Работа с подпрограммой включает 2 этапа:
– описание метода;
– вызов метода.
Преимущества подпрограммы:
1. в программе нет дублирования кода;
2. повышается надежность программы;
3. улучшается «читаемость» программы;
4. облегчается процесс отладки.
Различают подпрограммы:
без параметров (),
с параметрами (params).
14.2. Сравнение вариантов
Рассмотрим 2 варианта решения одной и той же задачи:
Вывод текстовых блоков со вставкой стандартного разделителя из трех строк из набора символов “ * ” в конце.
1 –й вариант (Монолитная программа)
static void Main(string[] args)
{
Console.WriteLine("Текст и разделители");
Console.WriteLine();
Console.WriteLine("Текст 1"); // Вывод 1 текста
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 20; j++)
Console.Write("*");
Console.WriteLine(); // Вывод строк разделителя
}
Console.WriteLine();
Console.WriteLine("Текст 2"); // Вывод 2 текста
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 20; j++)
Console.Write("*");
Console.WriteLine(); // Вывод строк разделителя
}
Console.WriteLine();
Console.WriteLine("Текст 3"); // Вывод 3 текста
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 20; j++)
Console.Write("*");
Console.WriteLine(); // Вывод строк разделителя
}
Console.ReadLine();
}
2 – й вариант (Модульная программа)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
staticvoidDrawStr() // Процедура “Рисовать строки” без параметров
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 20; j++)
Console.Write("*");
Console.WriteLine();// Вывод строк разделителя
}
}
static void Main(string[] args)
{
Console.WriteLine("Текст и разделители");
Console.WriteLine();
Console.WriteLine("Текст 1"); // Вывод 1 текста
DrawStr();// Вызов процедуры “Рисовать строки”
Console.WriteLine();
Console.WriteLine("Текст 2"); // Вывод 2 текста
DrawStr();// Вызов процедуры “Рисовать строки”
Console.WriteLine();
Console.WriteLine("Текст 3"); // Вывод 3 текста
DrawStr();// Вызов процедуры “Рисовать строки”
Console.ReadLine();
}
}
}