Resumen

Dominar la entrada de usuario, los tipos de datos primitivos y la prevención de errores de null reference exception son habilidades fundamentales para cualquier proyecto en C#. A continuación se consolidan los conceptos clave que permiten construir aplicaciones robustas desde la línea de comandos.

¿Qué son STDIN, STDOUT y los exit codes?

Cuando un programa en C# se ejecuta, interactúa con el sistema operativo mediante tres canales principales: STDIN (entrada estándar), STDOUT (salida estándar) y los exit codes (códigos de salida) [0:03].

Los exit codes siguen una convención clara:

  • 0: ejecución exitosa.
  • 1: error general.
  • 2: uso incorrecto del programa, es decir, argumentos inválidos.

Esta convención permite que otros procesos o scripts interpreten automáticamente si el programa terminó correctamente o si hubo algún problema.

¿Cómo funcionan los argumentos de línea de comandos?

Al ejecutar dotnet run -- agregar laptop, los valores después del doble guion se almacenan en el arreglo args. El doble guion actúa como separador entre los argumentos de dotnet y los del programa [0:23]. Así, args[0] contiene agregar y args[1] contiene laptop.

Este detalle es crucial al diseñar aplicaciones CLI: el doble guion no forma parte de los argumentos que recibe tu código.

¿Qué tipos primitivos son esenciales para un proyecto en C#?

Los tipos primitivos más relevantes en este contexto son cuatro [0:12]:

  • int: números enteros.
  • decimal: valores monetarios con precisión exacta.
  • string: cadenas de texto.
  • bool: valores verdadero o falso.

¿Por qué usar decimal para dinero y no double o float?

Cuando se trata del precio de un producto, la respuesta correcta siempre es decimal [0:46]. Tanto double como float utilizan representación de punto flotante binario, lo que puede introducir errores de redondeo en operaciones financieras. El tipo decimal garantiza precisión exacta porque trabaja con base 10, ideal para cálculos monetarios.

¿Cuál es la forma segura de convertir string a int?

El método recomendado es int.TryParse(texto, out var num) [1:31]. A diferencia de int.Parse o Convert.ToInt32, TryParse no lanza excepción cuando la conversión falla. Esto lo convierte en la opción más segura para manejar entradas de usuario donde no hay garantía de que el texto sea un número válido.

¿Cómo evitar errores de null reference exception?

El manejo de null es una de las fuentes más comunes de errores en C#. Dos operadores permiten escribir código defensivo de forma elegante [1:01]:

  • Null coalescing (??): evalúa el lado izquierdo; si es null, devuelve el valor del lado derecho. Por ejemplo, string nombre = entrada ?? "anónimo" asigna "anónimo" solo cuando entrada es null.
  • Null conditional (?.): permite acceder a propiedades o métodos de un objeto únicamente si este no es null, evitando la excepción sin necesidad de escribir condicionales explícitos.

Ambos operadores reducen líneas de código y hacen que la lógica sea más legible.

¿Cómo luce la estructura del proyecto hasta ahora?

El archivo Program.cs sigue una estructura ordenada [1:52]:

  • Variables del sistema al inicio.
  • Banner con el título del proyecto.
  • Manejo de argumentos: help y version.
  • Variables adicionales comentadas para uso futuro.
  • Interacción con entradas de usuario aplicando los operadores de null.
  • Funciones auxiliares: MostrarBanner y MostrarAyuda.

Esta organización facilita la lectura y el mantenimiento a medida que el proyecto crece. Clonar el repositorio compartido en los recursos y compararlo con tu avance es una práctica recomendada para detectar diferencias y consolidar el aprendizaje.

Si alguno de estos conceptos necesita refuerzo, repasar las clases del módulo es el camino más directo. ¿Cuál de estos temas te resultó más desafiante? Comparte tu experiencia en los comentarios.