Към съдържанието
wannacode

Защо методи

Проблем

Една промяна, три места

Пишеш програмата за касата на малък магазин. Всяка бележка започва с името на магазина и телефона му. Затова си копирал тези два реда навсякъде, където се печата бележка.

Магазинът сменя телефона си. Поправяш го на две места, а третото го пропускаш:

Console.WriteLine("Квартален магазин");
Console.WriteLine("тел. 02 123 4567");
Console.WriteLine("Хляб 1,20 €");
Console.WriteLine("Квартален магазин");
Console.WriteLine("тел. 02 123 4567");
Console.WriteLine("Мляко 2,10 €");
Console.WriteLine("Квартален магазин");
Console.WriteLine("тел. 02 765 4321");
Console.WriteLine("Кафе 3,50 €");
Изход
Квартален магазин
тел. 02 123 4567
Хляб 1,20 €
Квартален магазин
тел. 02 123 4567
Мляко 2,10 €
Квартален магазин
тел. 02 765 4321
Кафе 3,50 €

Третият клиент получава бележка със стария номер. Колкото повече копия, толкова по-лесно е да пропуснеш едно.

Идеята

Пиши го веднъж, викай го по име

Сложи повтарящото се на едно място и му дай име. Това е метод: именуван блок код, който върши една работа.

Пишеш метода веднъж. После, където ти трябва, пишеш само името му със скоби: PrintHeader();. Това се казва извикване на метода.

Ако магазинът пак смени телефона, поправяш един ред в метода, и всички бележки се оправят.

Виж го

Какво става при извикване

Програмата върви ред по ред. Когато стигне до извикване, тя влиза в метода, изпълнява тялото му и се връща точно след извикването. Следи топчето: то е мястото, до което е стигнала програмата.

static void PrintHeader()
{
Console.WriteLine("Квартален магазин");
Console.WriteLine("тел. 02 123 4567");
}
PrintHeader();
Console.WriteLine("Хляб 1,20 €");
PrintHeader();
Console.WriteLine("Мляко 2,10 €");
Стъпка по стъпка, с думи
  1. Програмата започва от Main и стига до PrintHeader().
  2. Извикване: изпълнението отива в метода.
  3. Методът печата горната част на бележката.
  4. Методът свърши: изпълнението се връща точно след извикването.
  5. Main продължава: печата хляба.
  6. Второ извикване: същият код, без да го пишем отново.
  7. Горната част се печата пак.
  8. Обратно в Main и следващият ред.

Вторият път не пишеш горната част наново. Викаш същия метод и той печата същите два реда.

Идеята

Как се пише метод

Ето цялата програма, за да се види къде стои методът:

Program.cs
class Program
{
static void PrintHeader()
{
Console.WriteLine("Квартален магазин");
Console.WriteLine("тел. 02 123 4567");
}
static void Main()
{
PrintHeader();
Console.WriteLine("Хляб 1,20 €");
}
}
Изход
Квартален магазин
тел. 02 123 4567
Хляб 1,20 €
staticзасега винагиvoidне връща резултатPrintHeaderиме()не получава нищо
  • Името казва какво прави методът. Затова е глагол: PrintHeader, PrintFooter.
  • void значи, че методът само върши нещо (тук печата) и не връща резултат. Методите, които връщат резултат, идват в следващия урок.
  • Празните скоби значат, че методът не получава нищо отвън. И тях ще напълним в следващия урок.
  • Тялото е между { и }.
  • Методът стои в класа, до Main, а не вътре в Main.

static засега пишем пред всеки метод. Какво значи, ще разберем в модул „Класове и обекти“. Там ще разберем и обвивката class Program.

В C# имената на методите започват с главна буква: PrintHeader, Main. Така ще ги видиш във всяка програма на C#.

Пробвай

В какъв ред?

Какво ще отпечата програмата?

static void PrintThanks()
{
Console.WriteLine("Благодарим ви!");
}
Console.WriteLine("Поръчка №1024");
PrintThanks();
Console.WriteLine("Поръчка №1025");
PrintThanks();
Отговор

Пробвай

Кое липсва?

Този метод печата долната част на бележката. Какво трябва да пише на празното място?

static  PrintFooter()
{
    Console.WriteLine("Ще се радваме да ви видим отново.");
}

Пробвай

Намери грешката

Програмата не се компилира. На кой ред е грешката?

Избери реда с грешката.

Упражнение

Бележката и триъгълникът

Реши задачите в редактора си. За всяка има примерен изход, с който да сравниш своя.

1. Бележка. Напиши три метода:

  • PrintLine() печата ред от 20 тирета с цикъл;
  • PrintHeader() печата името на магазина, телефона и линията;
  • PrintFooter() печата линията и „Благодарим ви!“.

В Main отпечатай две бележки: горна част, един ред с покупка, долна част.

Примерен изход
Квартален магазин
тел. 02 123 4567
--------------------
Хляб 1,20 €
--------------------
Благодарим ви!
Квартален магазин
тел. 02 123 4567
--------------------
Мляко 2,10 €
--------------------
Благодарим ви!

2. Триъгълник. Напиши метод PrintTriangle(), който с вложени цикли извежда триъгълник от звездички с височина 4:

Примерен изход
*
***
*****
*******

В следващия урок височината ще стане параметър: един метод за триъгълник с каквато височина поискаш.

Тест

Провери се

1. Кога се изпълнява кодът в тялото на метод?
2. Какво значи void пред името на метода?
3. Методът е извикан на три места. Колко пъти е написан кодът му?
4. Къде се пише методът?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·