Lección 5 · ~12 min · ← Lección 4
Métodos: ponerle nombre a una receta
Un método es un bloque de código con nombre, con entradas (parámetros) y — normalmente — una salida (valor de retorno). Escribe la receta una vez, úsala en todas partes.
return: un método que responde una pregunta
int Sumar(int a, int b)
{
return a + b; // devuelve este valor al llamador
}
Console.WriteLine(Sumar(3, 4));
Lee la firma de izquierda a derecha: int (lo que devuelve) Sumar (el nombre) (int a, int b) (lo que recibe). La llamada Sumar(3, 4) se convierte en el valor 7 — puede ir a cualquier sitio donde vaya un valor.
void: un método que hace, no responde
void Saludar(string nombre)
{
Console.WriteLine("¡Hola, " + nombre + "!");
}
Saludar("Ada");
Saludar("Grace");
void significa "no devuelve nada" — el método actúa y el control vuelve al llamador. Un return; sin valor sigue sirviendo para salir antes si lo necesitas.
Varios return, una sola respuesta
Un método devuelve el PRIMER return que alcanza — los returns tempranos superan al anidamiento profundo:
string Describir(int puntuacion)
{
if (puntuacion >= 90) return "excelente";
if (puntuacion >= 70) return "bien";
return "sigue practicando";
}
Console.WriteLine(Describir(95));
Console.WriteLine(Describir(75));
Console.WriteLine(Describir(30));
Valores por defecto: parámetros opcionales
void Saludar(string nombre, string saludo = "Hola")
{
Console.WriteLine("¡" + saludo + ", " + nombre + "!");
}
Saludar("Ada"); // el saludo usa su valor por defecto
Saludar("Bob", "Hi"); // y se puede sobrescribir
out: un método que responde DOS preguntas
return te da un valor. Cuando un método debe producir un valor y reportar éxito/fracaso — el patrón real detrás de int.TryParse — usa out:
bool IntentarDuplicar(int x, out int duplicado)
{
duplicado = x * 2; // el método DEBE asignar los parámetros out
return x < 100; // …y reporta si el valor es usable
}
if (IntentarDuplicar(21, out int resultado))
{
Console.WriteLine("duplicado: " + resultado);
}
Recursión: un método que se llama a sí mismo
int Fib(int n)
{
if (n < 2) return n; // caso base: detiene la auto-llamada
return Fib(n - 1) + Fib(n - 2);
}
Console.Write(Fib(10));
Toda recursión necesita un caso base (la condición de parada) — sin él, las llamadas no terminan y obtienes un StackOverflowException. El motor de aquí te detiene a ~900 llamadas anidadas, misma idea que el runtime real.
Cuando los argumentos van mal
Llama con el número equivocado y el compilador te detiene antes de ejecutar nada — CS1501 / CS7036 son los códigos que verás, y los desajustes de cantidad de argumentos son su disparador más común.
Practica ahora
- Escribe
int Max3(int a, int b, int c)con el patrón del máximo corriente de la lección 4 — unreturn, sin llamadas a biblioteca. Luego compáralo con el problema con corrección. - Escribe
int SumaDigitos(int n)con el bucle% 10 / 10— un método que envuelve el patrón exacto de Contar los dígitos. - Siguiente lección: Lección 6 — Clases y objetos, donde los métodos tienen un hogar.