Урок 7. Понятие метода


#1

Зачастую при написании программ встречается дублированный код, который кроме увеличения размера написанного кода ещё и ухудшает его чтение. Для устранения этой проблемы и были придуманы методы, которые позволяют избежать дублирования кода и повышают его читаемость.
Например, представьте себе ситуацию, когда в консоли нужно вывести 10 разных за размерами прямоугольников. Для реализации данной задачи (без использования методов) нам нужно продублировать ниже написанный цикл 10 раз (количество итераций циклов может меняться при необходимости):

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 20; j++)
    {
        Console.Write('*');
    }
    Console.WriteLine();
}

Как видно из этого в нашей программе будет присутствовать дублированный код (наши циклы), что приводит к увеличению строк кода и ухудшению его чтения и понимания (ведь нужно вчитывается, что бы понять, что делает каждый цикл). Теперь же рассмотрим решение этой же задачи при использовании методов:

// метод для вывода прямоугольника с указанной шириной и высотой 
void DrawRectangle(int width, int height)	 
{
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            Console.Write('*');
        }
        Console.WriteLine();
    }
}

// где-то в коде...
DrawRectangle(20, 10);   // выводит прямоугольник 20х10
DrawRectangle(17, 15);   // выводит прямоугольник 17х15
DrawRectangle(10, 20);   // выводит прямоугольник 10х20
// ...

Как видно из данного решения, метод DrawRectangle будет отвечать за рисование прямоугольника в консоли, поэтому теперь нам ненужно каждый раз писать цикл для его вывода, а также чтение кода повысится, ведь было выбрано правильное название метода (отображающее его предназначение). Соответственно другому программисту, начавшему читать данный код, будет намного проще разобраться в этом.

Таким образом метод – это:

  • именованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо.
  • функция или процедура, выполняющая одну задачу. (понятия функции и процедуры рассматривается дальше)

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

  • повышению количества различных логических ошибок и дополнительным затратам на их устранение.
  • потере времени при подключении нового программиста к написанию проекта (программы).

Методы реализуют идею сокрытия информации. Один раз, создав метод, мы можем использовать его неограниченное количество раз, не думая о его внутренней работе. Поэтому методы можно ассоциировать с механизмами принимающими (необязательно) какие-то данные и делающими определённые инструкции, например как продемонстрировано на рисунке ниже.

Как видно из рисунка, методу передаётся определённое значение, а он в конце своей работы возвращает пользователю результат своей работы. Исходя из переданного значения методу (1) на рисунке и полученного значения (2) в качестве результате его работы можно предположить, что метод увеличивает полученное значение на 1, и соответственно сам метод может выглядеть следующим образом:

В некоторых языках программирования (но не в C#!) методы делят на две категории: функции – это методы, что в результате своей работы что-то возвращают (как и различные математические функции в реальной жизни), и процедуры – это методы, выполняющие указанный им ряд инструкций и в качестве результата своей работы ничего не возвращают.

Причиной не разделения методов на две категории состоит в следующем: C# является объектно-ориентированным языком пытающемся переместить различные законы и правила из реальной жизни в объективную (виртуальную) реальность, а в реальной жизни мы не называем различные наши действия процедурами или функциями, а ассоциируем их с способами (методами) достижения нужного результата. Как и в реальной жизни один и тот же результат можно добиться разными путями, так и в объектной реальности можно добиться не одним способом (методом). Например, переместить ручку лежащую на столе из позиции А в позицию Б, мы можем несколько способами: переместить ручку левой/правой рукой, переместить её приподняв стол под углом, что бы она скатилась самостоятельно и т.д. И это всё методы достижения необходимого результата.

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

Методы позволяют выполнять оптимизацию кода в одном месте. Это облегчает профилирование кода, направленное на определение неэффективных фрагментов.

Очень важно, чтобы каждый метод эффективно решал только одну задачу и больше ничего не делал. Например, метод Console.WriteLine(“Hello”) – имеет четко определенную цель.

Источник: видеоурок Александра Шевчука "МЕТОДЫ"

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202


Содержание справочника С# Starter
Урок 6. Бесконечные циклы