Защо методи
Проблем
Една промяна, три места
Пишеш програмата за касата на малък магазин. Всяка бележка започва с името на магазина и телефона му. Затова си копирал тези два реда навсякъде, където се печата бележка.
Магазинът сменя телефона си. Поправяш го на две места, а третото го пропускаш:
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 €");Стъпка по стъпка, с думи
- Програмата започва от Main и стига до PrintHeader().
- Извикване: изпълнението отива в метода.
- Методът печата горната част на бележката.
- Методът свърши: изпълнението се връща точно след извикването.
- Main продължава: печата хляба.
- Второ извикване: същият код, без да го пишем отново.
- Горната част се печата пак.
- Обратно в Main и следващият ред.
Вторият път не пишеш горната част наново. Викаш същия метод и той печата същите два реда.
Идеята
Как се пише метод
Ето цялата програма, за да се види къде стои методът:
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 €- Името казва какво прави методът. Затова е глагол:
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("Ще се радваме да ви видим отново.");
}void: методът само печата и не връща резултат.Пробвай
Намери грешката
Избери реда с грешката.
PrintThanks();. Без тях компилаторът вижда само името на метода, а не команда да се изпълни.Упражнение
Бележката и триъгълникът
Реши задачите в редактора си. За всяка има примерен изход, с който да сравниш своя.
1. Бележка. Напиши три метода:
PrintLine()печата ред от 20 тирета с цикъл;PrintHeader()печата името на магазина, телефона и линията;PrintFooter()печата линията и „Благодарим ви!“.
В Main отпечатай две бележки: горна част, един ред с покупка, долна част.
Квартален магазинтел. 02 123 4567--------------------Хляб 1,20 €--------------------Благодарим ви!Квартален магазинтел. 02 123 4567--------------------Мляко 2,10 €--------------------Благодарим ви!2. Триъгълник. Напиши метод PrintTriangle(), който с вложени цикли извежда триъгълник от звездички с височина 4:
* *** ************В следващия урок височината ще стане параметър: един метод за триъгълник с каквато височина поискаш.
Тест