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