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

Защо методи

Проблем

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

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

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

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

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

Идеята

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

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

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

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

Виж го

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

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

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

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

Идеята

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

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

Main.java
public class Main {
static void printHeader() {
System.out.println("Квартален магазин");
System.out.println("тел. 02 123 4567");
}
public static void main(String[] args) {
printHeader();
System.out.println("Хляб 1,20 €");
}
}
Изход
Квартален магазин
тел. 02 123 4567
Хляб 1,20 €
staticзасега винагиvoidне връща резултатprintHeaderиме()не получава нищо
  • Името казва какво прави методът. Затова е глагол: printHeader, printFooter.
  • void значи, че методът само върши нещо (тук печата) и не връща резултат. Методите, които връщат резултат, идват в следващия урок.
  • Празните скоби значат, че методът не получава нищо отвън. И тях ще напълним в следващия урок.
  • Тялото е между { и }.
  • Методът стои в класа, до main, а не вътре в main.

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

В Java имената на методите започват с малка буква, а всяка следваща дума е с главна: printHeader, printFooter.

Пробвай

В какъв ред?

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

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

Пробвай

Кое липсва?

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

static  printFooter() {
    System.out.println("Ще се радваме да ви видим отново.");
}

Пробвай

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

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

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

Упражнение

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

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

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 за достъпно обучение по програмиране ·