Documentación de HispanoLang

Referencia completa de sintaxis, comandos y características del lenguaje

🎵 Bucles Avanzados

Los bucles avanzados te permiten trabajar con estructuras más complejas: bucles anidados para tablas y matrices, patrones de iteración especiales, y técnicas para optimizar el recorrido de datos.

Bucles Anidados: Playlist de Playlists

Puedes poner un bucle dentro de otro bucle. Como tener múltiples playlists y reproducir todas las canciones de cada playlist.

para (variable playlist = 1; playlist <= 3; playlist++) {
  mostrar "=== PLAYLIST " + playlist + " ===" // === PLAYLIST 1 ===, === PLAYLIST 2 ===, === PLAYLIST 3 ===

  para (variable cancion = 1; cancion <= 4; cancion++) {
      mostrar "  Canción " + cancion // Canción 1, Canción 2, Canción 3, Canción 4
  }

  mostrar "" // (línea vacía)
}

para (variable album = 1; album <= 2; album++) {
  mostrar "ÁLBUM " + album // ÁLBUM 1, ÁLBUM 2

  para (variable track = 1; track <= 3; track++) {
      mostrar "  Track " + track + " del álbum " + album // Track 1 del álbum 1, Track 2 del álbum 1, ...
  }
}
  • Bucle externo: se ejecuta pocas veces (playlists)
  • Bucle interno: se ejecuta muchas veces (canciones por playlist)
  • Por cada iteración del externo, el interno se ejecuta COMPLETO
  • Ejemplo: 3 playlists × 4 canciones = 12 reproducciones totales
  • Útil para: tablas, matrices, listas de listas

Creando Tablas y Grillas

Los bucles anidados son perfectos para crear estructuras en forma de tabla.

mostrar "=== TABLA DE MULTIPLICAR ===" // === TABLA DE MULTIPLICAR ===
mostrar "" // (línea vacía)

para (variable fila = 1; fila <= 5; fila++) {
  variable linea = ""

  para (variable columna = 1; columna <= 5; columna++) {
      variable producto = fila * columna
      linea = linea + producto + "	"
  }

  mostrar linea // 1 2 3 4 5, 2 4 6 8 10, 3 6 9 12 15, ...
}

mostrar "" // (línea vacía)
mostrar "=== HORARIO SEMANAL ===" // === HORARIO SEMANAL ===
mostrar "" // (línea vacía)

para (variable dia = 1; dia <= 3; dia++) {
  mostrar "Día " + dia + ":" // Día 1:, Día 2:, Día 3:

  para (variable hora = 9; hora <= 11; hora++) {
      mostrar "  " + hora + ":00 - Clase" // 9:00 - Clase, 10:00 - Clase, 11:00 - Clase
  }
  mostrar "" // (línea vacía)
}
  • El bucle externo controla las filas
  • El bucle interno controla las columnas
  • Puedes construir strings para mostrar toda una fila
  • Útil para tablas de multiplicar, horarios, grillas de datos

Patrones con Bucles

Los bucles pueden crear patrones visuales interesantes.

mostrar "=== TRIÁNGULO ===" // === TRIÁNGULO ===

para (variable fila = 1; fila <= 5; fila++) {
  variable estrellas = ""

  para (variable col = 1; col <= fila; col++) {
      estrellas = estrellas + "* "
  }

  mostrar estrellas // *, * *, * * *, * * * *, * * * * *
}

mostrar "" // (línea vacía)
mostrar "=== TRIÁNGULO INVERTIDO ===" // === TRIÁNGULO INVERTIDO ===

para (variable fila = 5; fila >= 1; fila--) {
  variable estrellas = ""

  para (variable col = 1; col <= fila; col++) {
      estrellas = estrellas + "* "
  }

  mostrar estrellas // * * * * *, * * * *, * * *, * *, *
}

mostrar "" // (línea vacía)
mostrar "=== CUADRADO ===" // === CUADRADO ===

para (variable fila = 1; fila <= 4; fila++) {
  variable linea = ""

  para (variable col = 1; col <= 4; col++) {
      linea = linea + "# "
  }

  mostrar linea // # # # # (4 veces)
}
  • El número de estrellas depende de la fila
  • En el triángulo normal: fila 1 = 1 estrella, fila 5 = 5 estrellas
  • En el invertido: empezamos con 5 y vamos bajando
  • Útil para visualizaciones, arte ASCII, indicadores de progreso

Búsqueda en Estructuras Anidadas

Buscar dentro de estructuras de múltiples niveles.

// Simular búsqueda en álbumes y tracks
variable albumObjetivo = 2
variable trackObjetivo = 3
variable encontrado = falso

para (variable album = 1; album <= 3; album++) {
  si encontrado {
      romper
  }

  para (variable track = 1; track <= 5; track++) {
      si album == albumObjetivo y track == trackObjetivo {
          mostrar "¡Encontrado! Álbum " + album + ", Track " + track // ¡Encontrado! Álbum 2, Track 3
          encontrado = verdadero
          romper
      }
      mostrar "Buscando en Álbum " + album + ", Track " + track // Buscando en Álbum 1, Track 1, ...
  }
}

si !encontrado {
  mostrar "No encontrado"
}
  • romper solo sale del bucle más interno
  • Necesitas una bandera (encontrado) para salir del externo
  • Verificas la bandera al inicio de cada iteración del externo
  • Patrón común para búsquedas en estructuras complejas

Acumuladores y Contadores

Usar variables para acumular resultados mientras recorres datos.

variable sumaTotal = 0
variable contador = 0
variable maximo = 0

para (variable i = 1; i <= 10; i++) {
  variable numero = i * 5

  sumaTotal = sumaTotal + numero
  contador++

  si numero > maximo {
      maximo = numero
  }

  mostrar "Número: " + numero + " | Suma: " + sumaTotal // Número: 5 | Suma: 5, Número: 10 | Suma: 15, ...
}

mostrar "" // (línea vacía)
mostrar "=== ESTADÍSTICAS ===" // === ESTADÍSTICAS ===
mostrar "Total de números: " + contador // Total de números: 10
mostrar "Suma total: " + sumaTotal // Suma total: 275
mostrar "Promedio: " + (sumaTotal / contador) // Promedio: 27.5
mostrar "Máximo: " + maximo // Máximo: 50
  • sumaTotal: acumula la suma de todos los valores
  • contador: cuenta cuántos elementos procesamos
  • maximo: guarda el valor más grande encontrado
  • Dividir suma/contador da el promedio
  • Patrón muy útil para estadísticas

Generación de Combinaciones

Generar todas las combinaciones posibles de elementos.

mostrar "=== COMBINACIONES DE 2 DADOS ===" // === COMBINACIONES DE 2 DADOS ===

variable combinaciones = 0

para (variable dado1 = 1; dado1 <= 6; dado1++) {
  para (variable dado2 = 1; dado2 <= 6; dado2++) {
      variable suma = dado1 + dado2

      si suma == 7 {
          mostrar "Dado 1: " + dado1 + " + Dado 2: " + dado2 + " = 7" // Dado 1: 1 + Dado 2: 6 = 7, ...
          combinaciones++
      }
  }
}

mostrar "" // (línea vacía)
mostrar "Total de combinaciones que suman 7: " + combinaciones // Total de combinaciones que suman 7: 6
  • Bucles anidados generan todas las combinaciones
  • 6 × 6 = 36 combinaciones totales
  • Filtramos las que suman 7
  • Útil para probabilidades, análisis de datos

Consejos y Buenas Prácticas

Recomendaciones para trabajar con bucles avanzados.

  • No anides más de 3 niveles (se vuelve confuso y lento)
  • Usa nombres descriptivos para las variables de cada bucle
  • Si la lógica es muy compleja, considera usar funciones
  • Cuidado con la eficiencia: bucles anidados multiplican iteraciones
  • Usa romper y banderas para salir eficientemente
  • Siempre verifica que tus bucles terminen (no infinitos)