Tutorijali
metode u javi og-cs

Što su metode u Javi?

Metoda je blok koda koji izvršava određenu proceduru. Metoda se može izvršiti bilo kada tijekom izvršavanja programa jednostavnim pozivanjem imena metode. U prethodnim tutorijalima već smo koristili jednu metodu, a to je main metoda. To je posebna metoda u Javi (ili bilo kojem drugom programskom jeziku poput C, C++ i slično), koja služi kao početna točka svakog programa.

Postavlja se pitanje zašto uopće spominjemo metode, kad već imamo main metodu koja izvršava naš program? Zato što, kad bismo cijeli program napisali samo unutar main metode, ona bi bila izuzetno velika i nepregledna. U praksi se program dijeli na manje logičke komponente koje nazivamo metode. Metode dijele kompleksan program u manje cjeline, što ga čini razumljivijim, lakšim za održavanje te smanjuje dupliciranje koda.

Primjer metode

Evo primjera kada trebamo koristiti metode. Recimo da želimo zbrojiti nekoliko brojeva. Unutar main metode unijet ćemo vrijednosti koje želimo zbrojiti.

public static void main(String[] args) {

	int a = 2;
	int b = 3;
	System.out.println(a + b);

	int c = 5;
	int d = 6;
	System.out.println(c + d);

	int e = 8;
	int f = 10;
	System.out.println(e + f);

	int g = 20;
	int h = 45;
	System.out.println(g + h);
}

Vidimo da smo više puta ponovili istu računsku operaciju. Ako je potrebno zbrojiti još više brojeva, i dalje ćemo dodavati nove varijable i vrijednosti, koliko god je potrebno. Na taj se način napisani kod dodatno povećava, duplicira i postaje nepregledan. Da bismo to spriječili, koristit ćemo metodu. Možda ste već primijetili, napisani kod se izvršio u main metodi. Ako se sjećate, unutar te metode se odvija sav kod kojeg smo napisali. Zato trebamo napraviti novu metodu izvan main metode.

public static void main(String[] args) {

}

public static void add (int a, int b) {

	System.out.println(a + b);
}

Svaka metoda sadržava neke ključne riječi, a u ovom slučaju to su ‘public static void’. Od njih ćemo objasniti ‘void’, dok su ostale izvan opsega ovog tutorijala i drugom prilikom ćemo se pozabaviti njima. Nakon ključnih riječi slijedi ime metode. Dobra je praksa metodi dati ime koje opisuje što se unutar metode događa. Naša metoda služi za zbrajanje brojeva, zbog čega smo joj dali ime ‘add’. Unutar zagrade su parametri, dakle dva broja tipa int koja ćemo zbrojiti. Nakon toga smo unutar vitičaste zagrade dodali naredbu za ispisivanje zbroja a i b. A da bi izvršili metodu ‘add’ odnosno da bismo prikazali zbroj dva broja, potrebno je pozvati metodu ‘add’ unutar main metode.

public static void main(String[] args) {

	add(2, 3);
}

public static void add (int a, int b) {

	System.out.println(a + b);
}

Kao što vidite, u main metodi pozvali smo ime metode ‘add’, što je Javi signal da želimo izvršiti kod koji se nalazi unutar nje. Slijedi zagrada, unutar koje su argumenti. Argumenti su vrijednosti odnosno varijable koje šaljemo metodi. U našem slučaju, metodi šaljemo argumente 2 i 3, koje će metoda ‘add’ zbrojiti. Na isti ćemo način zbrojiti sve ostale brojeve s kojima smo radili u uvodu tutorijala.

public static void main(String[] args) {

	add(2, 3);
	add(5, 6);
	add(8, 10);
	add(20, 45);
}

public static void add (int a, int b) {

	System.out.println(a + b);
}

Korištenjem metode dobili smo kraći i jednostavniji kod, a funkcionalnost je ostala ista. No ako želimo raditi s vrijednosti koju dobijemo metodom ‘add’ – spremiti ju u varijablu, primjerice – to ne možemo učiniti. Pokušat ćemo spremiti metodu ‘add’ u varijablu, kako bismo ilustrirali o čemu je riječ.

public static void main(String[] args) {

	int result = add(2, 3);
}

public static void add (int a, int b) {

	System.out.println(a + b);
}

Dobit ćemo grešku koja kaže kako je očekivani tip podatka int, a naša metoda je poslala ‘void’. Riječ ‘void’ označava kako metoda ne vraća ništa, nikakvu vrijednost. Kada se pozove takva void metoda, izvršit će se kod unutar nje – ispisat će se zbroj a i b – i tu će njena funkcionalnost stati. Ali ako želimo i dalje raditi s tim rezultatom, onda je potrebno koristiti povratni tip podatka (return type). Umjesto ‘void’ koristit ćemo tip podatka s kojim ćemo raditi, a u našem slučaju je to int. Isto tako, umjesto naredbe za ispisivanje zbroja a i b, dodat ćemo naredbu return. Njome metoda ‘add’ vraća vrijednost s kojom kasnije možemo raditi.

public static void main(String[] args) {

	int goalsScored = add(2, 3);

	System.out.println("In a football match last night, Bayern and Chelsea scored a total of " + goalsScored + " goals.");
}

public static int add (int a, int b) {

	return a + b;
}

Ovog puta koristili smo sličnu metodu kao i ranije, ali koja je ovaj put vratila vrijednost koju smo koristili dalje u kodu.

Metode i povratni tipovi podataka

Broj parametara nije fiksan: metoda može imati više parametara, a ne mora imati niti jedan. Isto tako, povratni tipovi podataka (return types) mogu biti ne samo void ili primitivni tipovi podataka nego i objekti, Arrays, kolekcije, kao i prilagođeni (custom) tipovi podataka. Sljedeći primjer bit će složeniji jer ćemo koristiti metodu koja će nam dati popis OG-CS zaposlenika, a za return type imat će HashMap.

public static void main(String[] args) {

	System.out.println("OG-CS Employee Information:");
	for (String name : employeesMap().keySet()) {
		int age = employeesMap().get(name);
		System.out.println("Name: " + name + ", Age: " + age);
		}
}

public static HashMap<String, Integer> employeesMap() {
	HashMap<String, Integer> database = new HashMap<>();
	database.put("Ivana", 30);
	database.put("Dinko", 28);
	database.put("Marija", 35);
	database.put("Tomislav", 23);

	return database;
}

Napisali smo metodu ’employeesMap’ koja nema niti jedan parametar. Ovog puta metoda vraća HashMap, u kojeg smo spremili imena i godine zaposlenika naše tvrtke. U main metodi smo pomoću for-each loop iterirali kroz HashMap i ispisali ga u konzoli. Ako bolje proučimo primjer, for-each loop može biti u vlastitoj metodi. Nazvat ćemo ju ’employeesInfo’, i tako naš kod učiniti još čitljivijim. Na kraju smo unutar main metode pozvali samo ’employeesInfo’, jer je unutar nje već pozvana metoda ’employeesMap’.

public static void main(String[] args) {

	employeesInfo();
}

public static HashMap<String, Integer> employeesMap() {
	HashMap<String, Integer> database = new HashMap<>();
	database.put("Ivana", 30);
	database.put("Dinko", 28);
	database.put("Marija", 35);
	database.put("Tomislav", 23);

	return database;
}

public static void employeesInfo() {
	System.out.println("OG-CS Employee Information:");
	for (String name : employeesMap().keySet()) {
		int age = employeesMap().get(name);
		System.out.println("Name: " + name + ", Age: " + age);
	}
}

Autor

Marko Lubar

Ova stranica koristi kolačiće da bi poboljšalo korisničko iskustvo, više o tome možete saznajte na našoj stranici "politika privatnosti"

Politika privatnosti