0

Методы

Серия Введение в основы программирования.

Продолжаем улучшать читабельность и информативность программного кода.

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

Во избежание переписывания одного того же кода, принято выделять такой код в отдельный блок, с доступом по имени. По аналогии с переменной, в которой доступ по имени осуществляется к единственному значению, имя блока предоставляет доступ к программному коду внутри этого блока.

Выделение программного кода в отдельные блоки позволяет так же решить следующие задачи.

  • Распределить написание кода между командой программистов, где каждый пишет свой модуль, блок программного кода. Затем эти модули соединяются в единую конструкцию.

  • Упрощается отладка и поиск ошибок в программе, потому как найти неверно работающий модуль легче, чем найти ошибку среди тысяч строк программного кода в методе Main.

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

Наименьшим выделенным блоком программного кода в языке C# является — метод. К примеру, точка входа в программу метод— Main, или методы вывода на экран — Write и WriteLine.

Методы делятся на две группы. Методы, возвращающие значение и методы невозвращение значение. Аналогами методов в других языках программирования, являются функции и процедуры

Метод, не возвращающий значение — блок программного кода, результат вычисления которого, в дальнейшем, не используется в программе. Метод имеет следующую конструкцию

static void Metod()

{

Тело цикла. Здесь пишется блок исполняемого кода.

}

Где,

  • static — этот параметр примите как необходимость. Его обсуждение не входит в тему этой лекции

  • void — ключевое слово, указывающее, что метод не возвращает значение, которое может изменить ход выполнения программы

  • Metod — имя метода. По правилам пишется с большой буквы и имеет описательное содержание, которое описывает выполняемую функцию.

  • () — круглые скобки. Формат записи, указывающий на метод. Круглые скобки могут быть пустыми или содержать параметр.

  • {} — между фигурных скобок пишется исполняемый код.

Самая распространенная операция, которая не влияет на ход выполнения программы, а значит не возвращает никакого значения, является вывод информации на экран.  Очень часто, таким сообщением бывает сообщение — Ошибка.

Выделим сообщение об ошибке в отдельный блок — метод, и вызовем этот метод в методе Main. Все операции производятся в class Program

class Program

{

static void Main(string[] args)

{

MessageError();

}


static void MessageError()

{

Console.WriteLine("Ошибка");

}

}

На первый взгляд, здесь происходит нарушение основного принципа программирования — следование. Метод MessageError() находится ниже метода Main. На самом деле это не так. Найдя строку MessageError();,  компилятор находит в программе этот метод, выполняет его, и затем передает управление назад в метод Main. Поэтому нет разницы, где будет находится метод, ниже выше или в другом классе, или в другом файле, метод будет выполнен, в противном случае программа закончится ошибкой. При расположении метода за пределами базового класса Program, обязательно указывается путь к этому методу. Об этом поговорим чуть позже.

Как видно из вышеприведенного программного кода, использование методов очень похоже на применение переменных. По большому счету, операция Console.WriteLine("Ошибка"); как некое значение, была помещена в отдельный блок с именем, и теперь по имени можно вызвать эту операцию на выполнение.

Помимо разнообразных сообщений, методы, не возвращающие значение, могут выводить результаты вычислений. Для этого в круглых скобках метода объявляется переменная, называемая —параметром метода.

Напишем метод, умножающий значение переменной «х» на два.

static void Sum(int x)

{

Console.WriteLine(x * 2);

}

Здесь, в строке static void Sum(int x), параметр метода, метод Sum ожидает значение с типом данных int, которым будет инициализирована переменная int x.

Для того, чтобы воспользоваться методом достаточно вызвать метод по имени в методе Main, и в круглые скобки поместить значение. Значение в круглых скобках называется — аргумент. Аргумент должен иметь идентичный, с параметром тип данных.

class Program

{

static void Sum(int x)

{

Console.WriteLine(x * 2);

}


static void Main(string[] args)

{

Sum(30); //ПЕРЕДАЧА аргумента

// ОТВЕТ. Невидимая операция

}

}

Число «30» в строке Sum(30); является аргументом метода Sum. Саму же операцию передачи значения аргумента в параметр метода, можно представит как операцию инициализации переменной, в которой правым операндом является аргумент, а левым параметр.

В познавательном процессе о методах, встречаются ситуацию, когда обучающийся, написав свой метод не может к нему обратится. Это связано с тем, что ученик привык к мысли «одна операция — одно действие». Здесь же в строке Sum(30); происходит две операции — передача аргумента и получение ответа от метода в виде результата вычисления. Дабы избавится от визуальной зависимости «одна операция — одно действие», представьте, что ниже строки Sum(30); находится невидимая операция, принимающая ОТВЕТ.

Помимо литеральных значений, аргументом может выступать переменная.

class Program

{

static void Sum(int x)

{

Console.WriteLine(x * 2);

}

static void Main(string[] args)

{

int a = 30;

Sum(a); //ПЕРЕДАЧА аргумента

//ОТВЕТ. Невидимая операция

}

}

Здесь в качестве аргумента выступает значение переменной «а», которое инициализирует переменную «х», параметр метода Sum. После выполнения программного кода в теле метода Sum, результат вычисления возвращается методу Main.

Усложним задачу и напишем программу с несколькими параметрами, представленными различными типами данных.

class Program

{

static void Data(int x, string text)

{

Console.WriteLine($"Имя: {text}, возраст: {x}");

}


static void Main(string[] args)

{

int age = 30;

string name= "Bill";

Data(age, name); //ПЕРЕДАЧА аргумента

//ОТВЕТ. Невидимая операция

}

}

Здесь, аргументами выступают переменные age и name которые инициализируют переменные int x, string text метода Data.

В случаях, когда у метода два и более параметра необходимо соблюдать два правила.

  • 1.  Количество аргументов должно быть идентичным количеству параметров.

  • 2.  Типы данных параметров должны соответствовать по своему расположению типам данных аргументов. Т.е. первый параметр и аргумент должны иметь идентичные типы данных.

    Помимо переменных, в качестве параметров могут выступать структуры.

    Нижеприведен код программы, где метод ShowMany выводит на экран все элементы массива, а ShowOne — единственный.

    class Program

    {

    static void ShowMany(int[] arr)

    {

    for(int i=0; i<arr.Length; i++)

    {

    Console.Write( arr[i] + " ");

    }

    }

    static void ShowOne(int[] arr, int i)

    {

    Console.Write(arr[i]);

    }

    static void Main(string[] args)

    {

    int[] little = { 3, 6, 8, 9 };

    int[] big = { 1, 2, 3, 6, 5, 4, 9, 8, 25 };

    ShowMany(big); //ПЕРЕДАЧА аргумента

    //ОТВЕТ. Невидимая операция

    Console.WriteLine();

    ShowOne(little, 1); //ПЕРЕДАЧА аргумента

    //ОТВЕТ. Невидимая операция

    }

    }

    Здесь, параметром ShowMany является массив, поэтому аргументом для этого метода будет массив. Метод ShowOne, позволяет обратится к отдельному элементу массива, но операция по выводу отдельного элемента массива происходит внутри метода, поэтому прежде, чем обратится к конкретному элементу, необходимо в метод ShowOne передать все элементы массива. Таким образом метод ShowOne имеет два параметра — массив и переменную инициализируемую индексом

    Помимо методов с ключевым словом — void, т.е. не возвращающих никакого значения и не влияющих на дальнейшие вычисления, при написании программного кода, как ни банально звучит, используются методы, результат вычислений которых, возвращает значение, и эти значение используются в дальнейших вычислениях.

    Такие методы легко отличить от методов с «void». Так как метод возвращает значение, а значение имеет тип данных, то ключевое слово «void» заменяется на один из принятых типов данных. Само значение возвращается с помощью оператор — return.

    static string Name()

    {

    return "Bill";

    }

    Где, string — тип данных метода Text. Типом данных определены характеристики обрабатываемых значений.

    Так как результат вычислений в методе с возвращаемым значением, в дальнейшем используется в коде программы, то такое значение присваивается переменной с идентичным типом данных.

    class Program

    {

    static string Text()

    {

    return "Bill";

    }


    static void Main(string[] args)

    {

    string name=Text();

    Console.WriteLine($"Имя {name}");

    }

    }

    Оператор return выполняет две функции, возвращает значение и прекращает работу метода.

    class Program

    {

    static string Text()

    {

    string name = "Bill";

    return name;

    string message = "Error";

    }


    static void Main(string[] args)

    {

    string name=Text();

    Console.WriteLine($"Имя {name}");

    }

    }

    Так как оператор «return» завершает работу метода, то операция с этим методом должна находится на последней строчке метода.

    Используя параметры и аргументы методы могут обмениваться значениями.

    class Program

    {

    static string Text(string name)

    {

    return name;

    }

    static int Number(int years)

    {

    return years;

    }

    static void Main(string[] args)

    {

    string name = Text("Bill");

    int age = Number(36);

    Console.WriteLine($"Имя {name}, возраст {age}");

    }

    }

    Здесь, аргументами "Bill" и 36, были инициализированы переменные в методах Text и Number соответственно.

В заключении.

Для снижения трудозатрат и ошибок при наборе программного кода. выделяйте часто повторяющийся код в отдельные блоки — называемые методы. При написании программного кода используйте не только свои методы, но и сторонних разработчиков.

Для передачи значений между методами, к примеру, между Main  и Sum, используется конструкция аргумент — параметр, где аргумент передает значение, а параметр принимает. Аргументом может быть как литеральное, так и переменное значение, параметром выступает переменная с типом данных идентичным аргументу.

На этом занятие закончено.

Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru

Удачи в выполнении практических заданий!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества