Cuando un archivo como Program.cs comienza a crecer sin control, con toda la lógica mezclada en un solo lugar, es momento de aprender a separar responsabilidades. Los métodos son la herramienta fundamental para lograrlo: bloques de código con nombre propio que realizan una tarea específica y pueden reutilizarse cuantas veces sea necesario. Dominar su anatomía, su comportamiento de retorno y el alcance de sus variables te permitirá escribir programas más limpios, seguros y fáciles de mantener.
¿Cuáles son las cuatro partes de un método en C#?
Todo método se compone de cuatro elementos esenciales [0:17]:
- Tipo de retorno: indica qué tipo de dato devuelve el método (int, bool, string). Si no devuelve nada, se usa void.
- Nombre del método: identificador descriptivo que indica su función.
- Parámetros: datos que el método recibe para trabajar, declarados entre paréntesis.
- Cuerpo: el bloque de instrucciones que el método ejecuta, encerrado entre llaves.
Un ejemplo sencillo lo ilustra con claridad: si existe un método llamado Saludar que recibe un string como parámetro y retorna otro string, al llamar Saludar("Juan") el resultado será "Hola, Juan" [1:15]. El tipo de retorno es string porque el método toma una cadena de texto y produce otra.
Cuando un método lleva void al comienzo, significa que su propósito es ejecutar acciones (como imprimir en consola) sin devolver ningún valor al código que lo invocó.
¿Cómo se extraen métodos con responsabilidad clara?
La práctica consiste en tomar el código de Program.cs y dividirlo en seis métodos, cada uno con una función bien definida [1:40].
¿Qué hace el método MostrarMenú?
Este método es de tipo void porque solo imprime las opciones disponibles en consola [1:48]. No necesita retornar nada; su única responsabilidad es mostrar las indicaciones para que el usuario interactúe con el menú.
Antes de integrarlo, se limpia el código eliminando variables y casos innecesarios, conservando únicamente las que el software realmente utiliza. Para controlar el ciclo principal del programa se declara una variable de tipo bool llamada continuar con valor true [2:15]. Esta variable se ubica justo después de mostrar el banner con el título del sistema.
El ciclo while funciona así: mientras continuar sea verdadero, se ejecuta MostrarMenú, se lee la entrada del usuario y se procesa el comando ingresado [2:40].
¿Cómo funciona ProcesarComando con switch?
El método ProcesarComando recibe un string llamado comando como parámetro [3:05]. Internamente utiliza un switch para dirigir el flujo hacia tres acciones principales:
- ListarProductos: método void que imprime la cantidad de productos en el inventario y su valor total, usando interpolación de cadenas con las variables declaradas al inicio del programa [3:20].
- AgregarProducto: método void con un texto provisional que se desarrollará en el módulo tres [3:50].
- BuscarProducto: método void que se completará en el módulo cuatro [4:05].
¿Por qué LeerEntrada retorna un string?
A diferencia de los métodos anteriores, LeerEntrada tiene tipo de retorno string porque necesita devolver la cadena de caracteres que el usuario escribe [4:15]. Dentro del método se crea una variable tipo string llamada salida, se imprime el prompt y se retorna el valor capturado.
Un detalle importante surgió durante las pruebas: al ejecutar el programa, el menú se mostraba pero no aparecía el resultado de LeerEntrada. Esto ocurre porque el método solo retorna la variable sin imprimirla. La solución fue agregar Console.Write(comando) dentro del while para mostrar el valor retornado [4:45].
¿Qué es el scope de variables y por qué protege tus datos?
Cada método tiene su propio scope (alcance), lo que significa que las variables declaradas dentro de un método no existen en otro [5:10]. Este comportamiento es una medida de seguridad que evita modificaciones accidentales de datos.
Por ejemplo, si declaras una variable numeroGlobal con valor 100 fuera de los métodos, ambos pueden acceder a ella. Pero si MetodoA declara una variable numeroLocal con valor 5, al intentar usarla en MetodoB se produce un error de compilación [5:30].
Para compartir ese dato entre métodos, la solución es cambiar el tipo de retorno de MetodoA de void a int, hacer que retorne numeroLocal, y en MetodoB asignar ese valor a una nueva variable: int numeroLocalB = MetodoA() [5:50]. Así, el dato viaja de forma controlada mediante el return.
El compilador lee el código de arriba hacia abajo. Al construir un método que calcule el total de inventario, el orden correcto de los fragmentos es: primero la definición del método, luego la llave de apertura, después el cuerpo y finalmente la llave de cierre [6:25].
Si quieres afianzar estos conceptos, intenta extraer un nuevo método de tu propio código y experimenta con distintos tipos de retorno. Comparte en los comentarios qué método creaste y cómo organizaste tu programa.