Métodos
En resumen: Un método es un bloque de código con nombre que hace un solo trabajo: lo escribes una vez y lo llamas por su nombre tantas veces como necesites.
Problema
Un cambio, tres lugares
Estás escribiendo el programa de la caja de una tienda pequeña. Cada recibo empieza con el nombre de la tienda y su teléfono. Por eso has copiado esas dos líneas en todos los lugares donde se imprime un recibo.
La tienda cambia de teléfono. Lo corriges en dos lugares y se te pasa el tercero:
System.out.println("Tienda del barrio");System.out.println("tel. 02 123 4567");System.out.println("Pan 1,20 €");
System.out.println("Tienda del barrio");System.out.println("tel. 02 123 4567");System.out.println("Leche 2,10 €");
System.out.println("Tienda del barrio");System.out.println("tel. 02 765 4321");System.out.println("Café 3,50 €");Tienda del barriotel. 02 123 4567Pan 1,20 €Tienda del barriotel. 02 123 4567Leche 2,10 €Tienda del barriotel. 02 765 4321Café 3,50 €El tercer cliente recibe un recibo con el número viejo. Cuantas más copias hay, más fácil es que se te pase una.
La idea
Escríbelo una vez, llámalo por su nombre
Pon la parte que se repite en un solo lugar y dale un nombre. Eso es un método: un bloque de código con nombre que hace un solo trabajo.
Escribes el método una vez. Después, donde lo necesites, escribes solo su nombre con paréntesis: printHeader();. Esto se llama llamar al método.
Si la tienda vuelve a cambiar de teléfono, corriges una línea en el método, y todos los recibos quedan bien.
Míralo
Qué pasa en una llamada
El programa avanza línea por línea. Cuando llega a una llamada, entra en el método, ejecuta su cuerpo y vuelve justo después de la llamada. Sigue la bolita: es el punto al que ha llegado el programa.
static void printHeader() { System.out.println("Tienda del barrio"); System.out.println("tel. 02 123 4567");}
printHeader();System.out.println("Pan 1,20 €");printHeader();System.out.println("Leche 2,10 €");Paso a paso, en palabras
- El programa empieza en main y llega a printHeader().
- Una llamada: la ejecución entra en el método.
- El método imprime la parte de arriba del recibo.
- El método ha terminado: la ejecución vuelve justo después de la llamada.
- main sigue: imprime el pan.
- Una segunda llamada: el mismo código, sin escribirlo otra vez.
- La parte de arriba se imprime otra vez.
- De vuelta en main, a la línea siguiente.
La segunda vez no escribes otra vez la parte de arriba. Llamas al mismo método, y este imprime las mismas dos líneas.
La idea
Cómo se escribe un método
Aquí está el programa entero, para que veas dónde va el método:
public class Main { static void printHeader() { System.out.println("Tienda del barrio"); System.out.println("tel. 02 123 4567"); }
public static void main(String[] args) { printHeader(); System.out.println("Pan 1,20 €"); }}Tienda del barriotel. 02 123 4567Pan 1,20 €- El nombre dice qué hace el método. Por eso es un verbo:
printHeader,printFooter. voidsignifica que el método solo hace algo (aquí imprime) y no devuelve ningún resultado. Los métodos que devuelven un resultado llegan en la próxima lección.- Los paréntesis vacíos significan que el método no recibe nada de fuera. También los llenaremos en la próxima lección.
- El cuerpo está entre
{y}. - El método va en la clase, junto a main, no dentro de main.
Por ahora escribimos static delante de cada método. Qué significa lo veremos en el módulo «Clases y objetos», junto con el envoltorio public class Main.
En Java, los nombres de los métodos empiezan con minúscula, y cada palabra siguiente empieza con mayúscula: printHeader, printFooter.
Pruébalo
¿En qué orden?
¿Qué imprimirá el programa?
static void printThanks() { System.out.println("¡Gracias!");}
System.out.println("Pedido n.º 1024");printThanks();System.out.println("Pedido n.º 1025");printThanks();Un método se ejecuta cuando se lo llama, no donde está escrito. Aquí se llama dos veces, así que «¡Gracias!» se imprime dos veces, cada vez después de su pedido.
Pruébalo
¿Qué falta?
Este método imprime la parte de abajo del recibo. ¿Qué va en el hueco?
static printFooter() {
System.out.println("Esperamos verte pronto de nuevo.");
}void: el método solo imprime y no devuelve ningún resultado.Pruébalo
Encuentra el error
Elige la línea con el error.
printThanks();. Sin ellos, el compilador ve solo el nombre del método, no una orden de ejecutarlo.Ejercicio
El recibo y el triángulo
Resuelve estas tareas en tu editor. Cada una tiene una salida de ejemplo para comparar con la tuya.
1. Recibo. Escribe tres métodos:
printLine()imprime una línea de 20 guiones con un bucle;printHeader()imprime el nombre de la tienda, el teléfono y la línea;printFooter()imprime la línea y «¡Gracias!».
En main, imprime dos recibos: la parte de arriba, una línea con una compra y la parte de abajo.
Tienda del barriotel. 02 123 4567--------------------Pan 1,20 €--------------------¡Gracias!Tienda del barriotel. 02 123 4567--------------------Leche 2,10 €--------------------¡Gracias!2. Triángulo. Escribe un método printTriangle() que, con bucles anidados, imprima un triángulo de asteriscos de 4 filas de alto:
* *** ************En la próxima lección la altura será un parámetro: un solo método para un triángulo de la altura que quieras.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Tu primer programa · Variables y tipos · Bucles
- Continúa en: Parámetros y return · Sobrecarga · Recursión · Clases y objetos
- Ejercicios sobre el tema: Métodos