Convertir un programa estático en uno interactivo es el paso que marca la diferencia entre un proyecto de práctica y una herramienta real. Aquí se explica cómo recibir argumentos desde la terminal, procesar la entrada del usuario con stdin y stdout, y manejar exit codes en .NET para que tus scripts y automatizaciones funcionen de forma confiable.
¿Qué son los argumentos de línea de comandos y cómo funcionan en .NET?
Cuando ejecutas un programa desde la terminal, puedes enviarle información adicional después del comando principal. Esa información se conoce como argumentos de línea de comandos [0:18].
Para separar los argumentos propios de dotnet de los que recibe tu programa, se usa un doble guion (--). Todo lo que aparece antes del primer -- es para dotnet; todo lo que viene después llega a tu código como parte del arreglo args [0:30].
Args es un arreglo de strings que almacena cada palabra separada por espacios. Por ejemplo, si escribes dotnet run -- agregar laptop 500, el arreglo tendrá tres elementos [1:20]:
args[0]: agregar.
args[1]: laptop.
args[2]: 500.
¿Cómo se procesan los argumentos con un switch?
En Program.cs se evalúa si existen argumentos con un condicional if (args.Length > 0). Dentro de ese bloque, una sentencia switch compara el primer argumento en minúsculas [2:05]:
--help: ejecuta la función MostrarAyuda() y cierra el programa.
--version: imprime la versión con Console.WriteLine.
default: muestra un mensaje de error indicando que el comando es desconocido y sugiere usar --help.
Esta estructura permite escalar fácilmente: cada nuevo comando es un case adicional dentro del switch.
¿Por qué importan los exit codes en .NET?
Los exit codes son valores numéricos que un programa devuelve al sistema operativo al terminar. Son fundamentales para scripts que verifican si un paso anterior fue exitoso antes de continuar [2:48].
Estos son los tres códigos más comunes:
- 0: éxito, todo salió bien.
- 1: error general, algo falló.
- 2: uso incorrecto, los argumentos son inválidos.
Un detalle clave: si el usuario pasa un comando desconocido, el código de salida correcto es 2 (uso incorrecto), no 1. Usar el código equivocado puede confundir a otros programas que dependan de esa señal [2:38].
¿Qué son stdin y stdout en la práctica?
Stdin (standard input) es lo que el usuario escribe en la terminal. Stdout (standard output) es lo que el programa muestra de vuelta [3:18]. En C# se traducen así:
Console.ReadLine(): espera y captura la entrada del usuario (stdin) [4:20].
Console.WriteLine(): imprime texto con salto de línea (stdout).
Console.Write(): imprime texto sin saltar línea, ideal para prompts donde el cursor queda al lado del mensaje [3:55].
¿Cómo se construye el modo interactivo del programa?
Si el programa no recibe argumentos, entra en modo interactivo. El flujo es sencillo pero tiene un orden preciso [5:22]:
- Mostrar el prompt con
Console.Write("Ingrese un comando (o salir para terminar):") .
- Leer la entrada con
Console.ReadLine().
- Evaluar y mostrar el resultado.
La variable que almacena la entrada se declara como string? con el operador de nulabilidad (?), porque Console.ReadLine() puede devolver un valor nulo y el compilador necesita saber que eso es válido [4:30].
Después se evalúa con un if: si la entrada es un espacio en blanco o la palabra "salir" en minúsculas, se imprime "Hasta luego" y el programa finaliza con Environment.Exit(0), indicando éxito [4:50].
¿Cómo se organiza el código para evitar acoplamiento?
La función MostrarBanner() centraliza la presentación inicial: título del sistema, versión del programa y versión del framework [3:28]. Al extraerla como función independiente, se eliminan líneas duplicadas en Program.cs y se evita que el código quede acoplado, es decir, que una misma lógica aparezca en múltiples lugares dificultando el mantenimiento.
Con argumentos funcionales, entrada interactiva y exit codes correctos, el programa ya responde tanto a comandos directos como a la interacción en tiempo real. ¿Qué comando adicional agregarías a tu switch para hacerlo más útil? Comparte tu idea y ponla a prueba.