Construir un programa funcional desde cero es la mejor forma de consolidar los fundamentos de programación. En esta práctica se desarrolla un sistema de reservación para un restaurante exclusivo con solo diez lugares, combinando arrays, variables booleanas, el ciclo while y la instrucción if en C#. Cada línea de código tiene un propósito claro y se explica paso a paso.
¿Cómo plantear la lógica de un sistema de registro paso a paso?
Antes de escribir cualquier línea, se definen tres objetivos que funcionan como notas de desarrollo [0:43]:
- Validar si el usuario ya existe o si debe registrarse.
- Dar la bienvenida a un usuario existente cuando se confirme su identidad.
- Repetir el programa hasta que se registren las diez personas.
Esta práctica de dejar comentarios dentro del código —development notes— ayuda a mantener claridad sobre lo que el programa debe lograr. No importa si las guardas en una libreta o directamente en el editor: lo relevante es tener una guía visible.
¿Por qué un array de diez posiciones es la estructura ideal aquí?
Para almacenar los nombres de los comensales se declara un array de tipo string con diez posiciones [2:24]:
csharp
string[] usernames = new string[10] { "Mike", "", "", "", "", "", "", "", "", "" };
El array se inicializa con un nombre de prueba en la posición cero. Las demás posiciones quedan vacías, listas para llenarse conforme se registren nuevos usuarios. Un detalle importante: nombrar la variable en plural (usernames en lugar de username) indica que almacena varios valores. Parece menor, pero este tipo de convenciones hace que el código sea legible a largo plazo.
Junto al array se crea una variable auxiliar llamada currentIndex con valor 1 [3:33]. Esta variable señala la siguiente posición disponible para escribir un nuevo nombre. Como la posición cero ya tiene a "Mike", el índice actual arranca en uno.
csharp
int arrayCurrentIndex = 1;
¿Qué es un bucle infinito y cuándo tiene sentido usarlo?
Para que el programa se repita continuamente se utiliza un ciclo while con la condición true [4:33]:
csharp
while (true)
{
// Código principal del programa
}
Esto genera un bucle infinito: el bloque interior se ejecuta sin detenerse. Aunque suene peligroso, es una técnica válida en escenarios como dispositivos IOT que deben permanecer activos indefinidamente. En este caso, el bucle mantiene el sistema de reservaciones funcionando hasta que se cumplan las diez inscripciones.
¿Cómo usar un valor booleano para decidir entre registro y login?
Dentro del bucle, el programa pregunta al usuario si ya está registrado. La respuesta esperada es true o false [5:15]:
csharp
bool userType;
Console.WriteLine("Are you a registered user? Write true or write false to register");
userType = Convert.ToBoolean(Console.ReadLine());
Aquí suceden tres cosas en una sola operación:
Console.ReadLine() captura lo que escribe el usuario.
Convert.ToBoolean() transforma esa cadena de texto en un valor booleano.
- El resultado se almacena en la variable
userType, que solo puede ser verdadero o falso.
Usar un tipo booleano en lugar de un string optimiza la memoria porque solo necesita representar dos estados posibles.
¿Cómo validar si un usuario existe con la instrucción if?
Con el valor booleano listo, una instrucción if determina el flujo [7:05]:
csharp
if (userType == true)
{
Console.WriteLine("Hello. You are a registered user. Please enter your exact username");
string userToSearch = Console.ReadLine();
Console.WriteLine("The user you searched is {0}", userToSearch);
}
Se pide el nombre exacto del usuario y se guarda en una variable local llamada userToSearch. Aquí aparece un criterio práctico: las variables que solo se usan una vez pueden declararse inline, justo donde se necesitan. Sin embargo, si vas a reutilizar una variable en varios lugares, es mejor declararla junto con las demás al inicio del programa para encontrarla fácilmente.
Al ejecutar el programa y escribir true, luego Mike, la consola responde: "The user you searched is Mike". El flujo completo funciona correctamente: el array almacena datos, el booleano filtra la decisión y el if dirige la lógica.
Este proyecto apenas comienza y ya integra arrays, ciclos while, conversión de tipos con Convert.ToBoolean, lectura de entrada con Console.ReadLine y decisiones con if. ¿Qué funcionalidad le agregarías primero: el registro de nuevos usuarios o la validación contra el array completo?