Documentación de HispanoLang

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

🗂️ Objetos

Imagina tu perfil de Instagram o Facebook: tienes nombre, usuario, bio, cantidad de seguidores, foto de perfil... Son varios datos relacionados que describen QUIÉN eres. En vez de tener variables separadas (nombre, usuario, bio, seguidores), usas UN objeto que agrupa todo. Los objetos son perfectos para representar entidades con múltiples propiedades usando pares clave-valor, como tu perfil digital.

¿Qué son los Objetos?

Tu perfil de Instagram tiene campos: nombre, usuario, bio, seguidores, seguidos, verificado. No es una lista de valores aleatorios, cada dato tiene un nombre específico.

Los objetos agrupan datos relacionados con nombres (claves) que los identifican.

variable objeto = clave: valor, clave2: valor2
variable perfil = {
  nombre: "Juan Pérez",
  usuario: "@juanperez",
  bio: "Desarrollador",
  seguidores: 1500,
  seguidos: 300,
  verificado: falso
}

mostrar perfil // { nombre: "Juan Pérez", usuario: "@juanperez", bio: "Desarrollador", seguidores: 1500, seguidos: 300, verificado: falso }

variable producto = {
  nombre: "Mouse Gamer",
  precio: 150,
  marca: "Logitech",
  stock: 25
}

mostrar producto // { nombre: "Mouse Gamer", precio: 150, marca: "Logitech", stock: 25 }

variable vacio = {}
mostrar "Perfil vacío: " + texto(vacio) // Perfil vacío: {}
  • Los objetos se crean con llaves
  • Contienen pares clave:valor separados por comas
  • Las claves (nombres) identifican cada valor
  • Los valores pueden ser cualquier tipo
  • Un objeto vacío es válido

Acceder a Propiedades

Como cuando abres tu perfil y ves tu nombre, tu bio, tus seguidores... Usas la notación de punto (objeto.propiedad) para acceder a cada campo.

variable perfil = {
  nombre: "Ana García",
  usuario: "@anagarcia",
  seguidores: 2500,
  seguidos: 180,
  verificado: verdadero
}

mostrar "Nombre: " + perfil.nombre // Nombre: Ana García
mostrar "Usuario: " + perfil.usuario // Usuario: @anagarcia
mostrar "Seguidores: " + texto(perfil.seguidores) // Seguidores: 2500
mostrar "Seguidos: " + texto(perfil.seguidos) // Seguidos: 180
mostrar "Verificado: " + texto(perfil.verificado) // Verificado: verdadero

variable producto = {
  nombre: "Teclado",
  precio: 300,
  stock: 15
}

mostrar "" //
mostrar "Producto: " + producto.nombre // Producto: Teclado
mostrar "Precio: $" + texto(producto.precio) // Precio: $300
mostrar "Stock: " + texto(producto.stock) + " unidades" // Stock: 15 unidades
  • Acceso con punto: objeto.propiedad
  • perfil.nombre → 'Ana García'
  • perfil.seguidores → 2500
  • Acceder a propiedad inexistente → indefinido

Modificar Propiedades

Como cuando editas tu bio, cambias tu foto de perfil, o actualizas tu nombre. Puedes modificar propiedades existentes o agregar nuevas.

variable perfil = {
  nombre: "Carlos López",
  usuario: "@carlos",
  seguidores: 500
}

mostrar "Perfil original: " + texto(perfil) // Perfil original: { nombre: "Carlos López", usuario: "@carlos", seguidores: 500 }

perfil.seguidores = 600
mostrar "Después de ganar seguidores: " + texto(perfil.seguidores) // Después de ganar seguidores: 600

perfil.nombre = "Carlos López Pérez"
mostrar "Nombre actualizado: " + perfil.nombre // Nombre actualizado: Carlos López Pérez

perfil.bio = "Fotógrafo profesional"
mostrar "Bio agregada: " + perfil.bio // Bio agregada: Fotógrafo profesional

perfil.verificado = verdadero
perfil.ciudad = "Buenos Aires"

mostrar "" //
mostrar "Perfil completo actualizado:" // Perfil completo actualizado:
mostrar "Nombre: " + perfil.nombre // Nombre: Carlos López Pérez
mostrar "Usuario: " + perfil.usuario // Usuario: @carlos
mostrar "Bio: " + perfil.bio // Bio: Fotógrafo profesional
mostrar "Seguidores: " + texto(perfil.seguidores) // Seguidores: 600
mostrar "Verificado: " + texto(perfil.verificado) // Verificado: verdadero
mostrar "Ciudad: " + perfil.ciudad // Ciudad: Buenos Aires
  • Modificar existente: objeto.propiedad = nuevoValor
  • Agregar nueva: objeto.nuevaPropiedad = valor
  • Los objetos son dinámicos (pueden crecer)
  • Si existe → modifica el valor
  • Si no existe → crea la propiedad

Objetos vs Listas

¿Lista de seguidores o perfil de usuario? Entender cuándo usar listas y cuándo usar objetos es fundamental.

mostrar "=== LISTA: COLECCIÓN ORDENADA ===" // === LISTA: COLECCIÓN ORDENADA ===
variable seguidores = ["@ana", "@pedro", "@luis", "@maria"]
mostrar "Seguidores: " + texto(seguidores) // Seguidores: ["@ana", "@pedro", "@luis", "@maria"]
mostrar "Primero: " + seguidores[0] // Primero: @ana
mostrar "Segundo: " + seguidores[1] // Segundo: @pedro
mostrar "Total: " + texto(seguidores.longitud()) // Total: 4

mostrar "" //
mostrar "=== OBJETO: DATOS ESTRUCTURADOS ===" // === OBJETO: DATOS ESTRUCTURADOS ===
variable perfil = {
  nombre: "Juan Pérez",
  usuario: "@juan",
  seguidores: 1500,
  seguidos: 300,
  verificado: falso
}

mostrar "Nombre: " + perfil.nombre // Nombre: Juan Pérez
mostrar "Usuario: " + perfil.usuario // Usuario: @juan
mostrar "Seguidores: " + texto(perfil.seguidores) // Seguidores: 1500

mostrar "" //
mostrar "=== COMBINADOS ===" // === COMBINADOS ===
variable perfilCompleto = {
  nombre: "Ana García",
  usuario: "@ana",
  posts: ["Foto1", "Foto2", "Foto3"],
  seguidores: 2500
}

mostrar "Usuario: " + perfilCompleto.usuario // Usuario: @ana
mostrar "Posts: " + texto(perfilCompleto.posts) // Posts: ["Foto1", "Foto2", "Foto3"]
mostrar "Primer post: " + perfilCompleto.posts[0] // Primer post: Foto1

USA LISTAS cuando:

  • Colección de elementos similares
  • El orden importa
  • Acceso por posición (índice)
  • Ejemplos: lista de seguidores, posts, comentarios

USA OBJETOS cuando:

  • Datos con nombres específicos
  • Representar una entidad
  • Acceso por nombre de propiedad
  • Ejemplos: perfil de usuario, producto, configuración

Objetos Anidados

Como cuando tu perfil tiene una sección 'Dirección' con calle, ciudad, país... Un objeto puede contener otros objetos, creando estructura jerárquica.

variable perfil = {
  nombre: "María González",
  usuario: "@maria",
  direccion: {
      calle: "Av. Principal 123",
      ciudad: "Madrid",
      pais: "España",
      codigoPostal: "28001"
  },
  verificado: verdadero
}

mostrar "Nombre: " + perfil.nombre // Nombre: María González
mostrar "Ciudad: " + perfil.direccion.ciudad // Ciudad: Madrid
mostrar "País: " + perfil.direccion.pais // País: España
mostrar "Código postal: " + perfil.direccion.codigoPostal // Código postal: 28001

mostrar "" //
mostrar "=== PRODUCTO CON ESPECIFICACIONES ===" // === PRODUCTO CON ESPECIFICACIONES ===
variable producto = {
  nombre: "Laptop",
  precio: 50000,
  especificaciones: {
      procesador: "Intel i7",
      ram: "16GB",
      almacenamiento: "512GB SSD",
      pantalla: "15.6 pulgadas"
  },
  stock: 10
}

mostrar "Producto: " + producto.nombre // Producto: Laptop
mostrar "Precio: $" + texto(producto.precio) // Precio: $50000
mostrar "Procesador: " + producto.especificaciones.procesador // Procesador: Intel i7
mostrar "RAM: " + producto.especificaciones.ram // RAM: 16GB
mostrar "Pantalla: " + producto.especificaciones.pantalla // Pantalla: 15.6 pulgadas
  • Objetos anidados: objetos dentro de objetos
  • Acceso multinivel: objeto.sub.propiedad
  • perfil.direccion.ciudad → 'Madrid'
  • Puedes anidar cuantos niveles necesites

Lista de Objetos

El patrón más común: una lista de objetos. Como tu feed de Instagram: cada post es un objeto con autor, imagen, likes, comentarios...

variable usuarios = [
  {
      nombre: "Ana García",
      usuario: "@ana",
      seguidores: 2500,
      verificado: verdadero
  },
  {
      nombre: "Pedro López",
      usuario: "@pedro",
      seguidores: 800,
      verificado: falso
  },
  {
      nombre: "Luis Martínez",
      usuario: "@luis",
      seguidores: 3200,
      verificado: verdadero
  }
]

mostrar "=== TODOS LOS USUARIOS ===" // === TODOS LOS USUARIOS ===
usuarios.recorrer(funcion(usuario, i) {
  mostrar (i + 1).aTexto() + ". " + usuario.nombre + " (" + usuario.usuario + ")" // 1. Ana García (@ana), 2. Pedro López (@pedro), 3. Luis Martínez (@luis)
  mostrar "   Seguidores: " + texto(usuario.seguidores) //    Seguidores: 2500,    Seguidores: 800,    Seguidores: 3200
})

mostrar "" //
mostrar "=== VERIFICADOS ===" // === VERIFICADOS ===
variable verificados = usuarios.filtrar(funcion(u) {
  retornar u.verificado
})
mostrar "Usuarios verificados: " + texto(verificados.longitud()) // Usuarios verificados: 2

mostrar "" //
mostrar "=== INFLUENCERS (>1000) ===" // === INFLUENCERS (>1000) ===
variable influencers = usuarios.filtrar(funcion(u) {
  retornar u.seguidores > 1000
})

influencers.recorrer(funcion(inf) {
  mostrar inf.nombre + ": " + texto(inf.seguidores) + " seguidores" // Ana García: 2500 seguidores, Luis Martínez: 3200 seguidores
})
  • Lista de objetos: patrón fundamental
  • Cada elemento es un objeto completo
  • usuarios[0] → primer objeto completo
  • usuarios[0].nombre → propiedad del primer objeto
  • Métodos de lista funcionan: .recorrer(), .filtrar(), .mapear()

Funciones con Objetos

Como cuando compartes un perfil o envías tus datos a una función. Los objetos se pasan completos como argumentos.

funcion mostrarPerfil(usuario) {
  mostrar "=== PERFIL ==="
  mostrar "Nombre: " + usuario.nombre
  mostrar "Usuario: " + usuario.usuario
  mostrar "Seguidores: " + texto(usuario.seguidores)
  mostrar "Verificado: " + (usuario.verificado ? "✓" : "✗")
}

variable ana = {
  nombre: "Ana García",
  usuario: "@ana",
  seguidores: 2500,
  verificado: verdadero
}

mostrarPerfil(ana) // === PERFIL ===, Nombre: Ana García, Usuario: @ana, Seguidores: 2500, Verificado: ✓

mostrar "" //
funcion agregarSeguidores(usuario, cantidad) {
  usuario.seguidores = usuario.seguidores + cantidad
  mostrar usuario.nombre + " ahora tiene " + texto(usuario.seguidores) + " seguidores"
}

agregarSeguidores(ana, 100) // Ana García ahora tiene 2600 seguidores
agregarSeguidores(ana, 50) // Ana García ahora tiene 2650 seguidores

mostrar "" //
funcion crearPerfil(nombre, usuario) {
  retornar {
      nombre: nombre,
      usuario: usuario,
      seguidores: 0,
      seguidos: 0,
      verificado: falso
  }
}

variable nuevoPerfil = crearPerfil("Pedro López", "@pedro")
mostrarPerfil(nuevoPerfil) // === PERFIL ===, Nombre: Pedro López, Usuario: @pedro, Seguidores: 0, Verificado: ✗
  • Pasar objetos a funciones: funcion(usuario)
  • Los objetos se pasan por referencia
  • Modificaciones afectan el original
  • Retornar objetos: retornar con llaves

Transformar Lista de Objetos

Combina objetos con métodos de listas para operaciones poderosas: extraer nombres, calcular totales, filtrar por criterio...

variable productos = [
  { nombre: "Mouse", precio: 150, stock: 25 },
  { nombre: "Teclado", precio: 300, stock: 15 },
  { nombre: "Monitor", precio: 2000, stock: 8 },
  { nombre: "WebCam", precio: 500, stock: 12 }
]

mostrar "=== NOMBRES DE PRODUCTOS ===" // === NOMBRES DE PRODUCTOS ===
variable nombres = productos.mapear(funcion(p) {
  retornar p.nombre
})
mostrar nombres.unir(", ") // Mouse, Teclado, Monitor, WebCam

mostrar "" //
mostrar "=== PRODUCTOS DISPONIBLES (stock > 10) ===" // === PRODUCTOS DISPONIBLES (stock > 10) ===
variable disponibles = productos.filtrar(funcion(p) {
  retornar p.stock > 10
})

disponibles.recorrer(funcion(p) {
  mostrar p.nombre + ": " + texto(p.stock) + " unidades" // Mouse: 25 unidades, Teclado: 15 unidades, WebCam: 12 unidades
})

mostrar "" //
mostrar "=== VALOR TOTAL INVENTARIO ===" // === VALOR TOTAL INVENTARIO ===
variable valorTotal = productos.reducir(funcion(acc, p) {
  retornar acc + (p.precio * p.stock)
}, 0)

mostrar "Valor total: $" + texto(valorTotal) // Valor total: $24950

mostrar "" //
mostrar "=== APLICAR DESCUENTO 10% ===" // === APLICAR DESCUENTO 10% ===
variable conDescuento = productos.mapear(funcion(p) {
  retornar {
      nombre: p.nombre,
      precioOriginal: p.precio,
      precioFinal: p.precio * 0.9,
      stock: p.stock
  }
})

conDescuento.recorrer(funcion(p) {
  mostrar p.nombre + ": $" + texto(p.precioOriginal) + " → $" + texto(p.precioFinal) // Mouse: $150 → $135, Teclado: $300 → $270, Monitor: $2000 → $1800, WebCam: $500 → $450
})

Operaciones comunes con lista de objetos:

  • .mapear(p => p.nombre) → lista de solo nombres
  • .filtrar(p => p.stock > 10) → solo productos con stock
  • .reducir((acc, p) => acc + p.precio, 0) → suma total
  • Combina filtrar → mapear → reducir para pipelines poderosos

Resumen de objetos:

  • Crear: objeto con clave: valor
  • Acceder: objeto.propiedad
  • Modificar: objeto.propiedad = valor
  • Agregar: objeto.nuevaProp = valor
  • Anidados: objeto.sub.propiedad
  • Lista de objetos: arreglo de objetos