Módulo 1 — Fundamentos y Sintaxis de JavaScript
Aplicación práctica: Sistema de gestión de recursos sanitarios (Humanos y materiales)
1. Qué es ECMAScript
ECMAScript es el estándar que define el lenguaje JavaScript, desarrollado por Ecma International. Cada versión de ECMAScript introduce mejoras (por ejemplo, ES6 en 2015 incorporó let, const, clases, funciones flecha, entre otros). Gracias a este estándar, el código JavaScript es compatible entre navegadores y plataformas.
const nombre = 'Hospital Central';
console.log(`Bienvenido a la app de gestión de ${nombre}`);
2. Qué es JavaScript
JavaScript es un lenguaje de programación interpretado (no se compila antes de ejecutarse, el intérprete lo lee línea a línea). Es además débilmente tipado, lo que significa que no requiere especificar el tipo de dato y puede convertir automáticamente entre tipos, lo que da flexibilidad pero exige cuidado.
JavaScript es multiparadigma (soporta programación funcional, orientada a objetos y procedimental) y se usa para desarrollar aplicaciones web dinámicas, como un sistema de gestión sanitaria.
let usuario = 'María';
console.log(`Hola ${usuario}, bienvenida al sistema de gestión.`);
// Tipado débil
let recursos = '10';
let total = cantidad * 2;
console.log(`Total de recursos disponibles: ${total}`);
3. Impresión por consola
El objeto console permite mostrar información para depuración y control del flujo:
-
console.log()— información general. -
console.info()— información detallada. -
console.warn()— advertencias. -
console.error()— errores. -
console.table()— muestra datos en formato tabla.
let recursos = [
{ tipo: 'Enfermeros', cantidad: 200 },
{ tipo: 'Ambulancias', cantidad: 40 },
];
console.log('Recursos actuales:');
console.info('Datos cargados correctamente.');
console.warn('Mascarillas por debajo del nivel recomendado.');
console.error('Error al conectar con la base de datos.');
console.table(recursos);
4. Declaración de variables
JavaScript permite declarar variables con var, let o const, cada una con distinto alcance (scope):
-
var→ alcance de función, se puede redeclarar. -
let→ alcance de bloque, más seguro y moderno. -
const→ alcance de bloque, su valor no puede reasignarse (aunque sus propiedades sí).
Además, a partir de ES2022, las clases pueden definir propiedades públicas y privadas. En JavaScript moderno no existen palabras reservadas como public o private al estilo de otros lenguajes (como Java o C#), pero se usan convenciones:
- Prefijo
_nombre→ indica que debería tratarse como privado (por convención). - El prefijo real
#nombre→ define propiedades privadas reales (accesibles solo dentro de la clase). - Por defecto, todas las propiedades y métodos son públicos.
class Recurso {
#id; // Propiedad privada
unidad;
tipoRecurso;
constructor({ id = null, unidad = '', tipoRecurso = '' }) {
this.#id = id;
this.unidad = unidad;
this.tipoRecurso = tipoRecurso; // "HUMANO" o "MATERIAL"
}
// Getters y setters para id
get id() {
return this.#id;
}
set id(nuevoId) {
this.#id = nuevoId;
}
mostrar() {
console.log(`Recurso [id=${this.#id}, tipo=${this.tipoRecurso}, unidad=${this.unidad}]`);
}
}
let idObjeto = '2jfn49cn2s8ad8cn2a2f342da';
const UNIDADObjeto = 'JMAPER';
var tipoRecursoObjeto = 'HUMANO';
// Ejemplo:
recurso = new Recurso({
id: idObjeto,
unidad: UNIDADObjeto,
tipoRecurso: tipoRecursoObjeto,
});
console.log(recurso.mostrar());
console.log(recurso.unidad);
//console.log(recurso.#id) mostraría un error
5. Tipos primitivos
Son los valores básicos: string, number, boolean, undefined, null, bigint, symbol.
let id = '12ERC7DFJG94KGLS045JD7';
let cantidad = 32;
let activo = true;
let unidad = undefined;
let otrosDatos = null;
6. Operadores
Aritméticos
+, -, *, /, %
-
+concatena si hay strings. - Resta o multiplicación con strings numéricos convierte a números.
-
/divide,%obtiene el resto.
console.log('10' + 5); // "105"
console.log('10' - '5'); // 5
console.log(10 / 3); // 3.33
console.log(10 % 3); // 1
Lógicos
&&, ||, !
- Un solo
&o|→ bit a bit. - Doble
&&o||→ lógico.
let enfermeros = 10;
let ambulancias = 5;
console.log(enfermeros > 0 && ambulancias > 0); // true
console.log(enfermeros > 0 || ambulancias === 0); // true
console.log(!(enfermeros > 0)); // false
Comparativos
== compara solo valores, === compara valores y tipos.
console.log(10 == '10'); // true
console.log(10 === '10'); // false
7. Arrays
Un array puede contener elementos de distintos tipos: números, strings, booleanos, objetos e incluso otros arrays.
El orden de los arrays empieza en 0.
let recursosMixtos = [
'Ambulancia',
10,
true,
{ id: '18HFHSK2J3H123H412KH3', unidad: 'JMAPER', tipoRecurso: 'HUMANO' },
];
console.log(recursosMixtos);
console.log(recursosMixtos[3].unidad); // "JMAPER"
let inventario = [
['Enfermeros', 300],
['Ambulancias', 20],
];
console.log(inventario[1][1]); // 20
// Operaciones comunes
let ambulancias = ['ET 101467', 'ET 101468', 'ET 101469'];
ambulancias.push('ET 101470'); // añadir
ambulancias.pop(); // eliminar último
console.log(ambulancias.length);
for (let i = 0; i < ambulancias.length; i++) {
console.log(`ambulancias disponibles: ${ambulancias[i]}`);
}
Nota: aunque sea posible mezclar tipos, se recomienda mantener arrays homogéneos cuando representen lo mismo.
8. Funciones
Las funciones permiten reutilizar código y organizar la lógica. Su firma incluye el nombre, los parámetros y el valor de retorno.
function calcularAmbulanciasOperativas(total, inoperativas) {
return total - inoperativas;
}
console.log(`Ambulancias operativas: ${calcularAmbulanciasOperativas(50, 38)}`);
Parámetros por defecto
function registrarRecurso(tipo = 'HUMANO', id = '1AJS8DF9J4GJ80DJS2NSJD', unidad: 'JMAPER') {
console.log(`Recurso: ${tipo}, Unidad: ${unidad}`);
}
registrarRecurso('Mascarillas', '1JDS7DSF9DHEC334BFH345E', 'ACING');
registrarRecurso(); // Usa los valores por defecto
Funciones anidadas y ámbito
function gestionarRecurso() {
const tipo = 'Materal';
function mostrarTipo() {
// función anidada
console.log(`Tipo de recurso: ${tipo}`); // accede al ámbito externo
}
mostrarTipo();
}
gestionarRecurso();
Funciones flecha
Las funciones flecha (=>) simplifican la sintaxis y no crean su propio this, por lo que son útiles en callbacks o eventos.
const reporteRecursos = (enfermeros, ambulancias) => {
console.log(`Enfermeros: ${enfermeros}, Ambulancias: ${ambulancias}`);
};
9. Estructuras de control
-
Condicionales:
if,else,switch(para múltiples casos). -
Bucles:
for,while,do...while. -
Manejo de errores:
try...catchcaptura errores de ejecución y evita que el programa se detenga.
let ambulancias = 12;
if (ambulancias > 0) {
console.log('Hay ambulancias');
} else {
console.log('No hay camas disponibles');
}
try {
let resultado = ambulancias / 0;
console.log(resultado);
} catch (error) {
console.error('Error en el cálculo:', error);
}
let ambulancias = ['ET 101467', 'ET 101468', 'ET 101469'];
for (let i = 0; i < ambulancias.length; i++) {
console.log(`Ambulancias: ${ambulancias[i]}`);
}
10. Clases y objetos
Objetos literales
const recurso = {
id: '7d8giej2934b5kcn28xo8',
unidad: 'JMAPER',
tipoRecurso: 'HUMANO',
};
console.log(recurso.unidad);
Clases y uso de objetos
class Recurso {
#id; // Propiedad privada
unidad;
tipoRecurso;
constructor({ id = null, unidad = '', tipoRecurso = '' }) {
this.#id = id;
this.unidad = unidad;
this.tipoRecurso = tipoRecurso; // "HUMANO" o "MATERIAL"
}
// Getters y setters para id
get id() {
return this.#id;
}
set id(nuevoId) {
this.#id = nuevoId;
}
mostrar() {
console.log(`Recurso [id=${this.#id}, tipo=${this.tipoRecurso}, unidad=${this.unidad}]`);
}
}
const datos = { id: '1j273hf83hd93j4f7gjd6', unidad: 'ACING', tipoRecurso: 'MATERIAL' };
const recurso = new Recurso(datos.id, datos.unidad, datos.tipoRecurso);
recurso.mostrar();
Un objeto literal puede inicializar una clase, pero no puede convertirse directamente en una instancia sin pasar sus propiedades al constructor.
11. Otros objetos: Fechas y más
Date
let fechaHoy = new Date();
console.log('Fecha actual:', fechaHoy.toLocaleDateString());
let ultimaOperatividad = new Date(2025, 9, 22);
console.log('Ultima fecha de operatividad:', ultimaOperatividad.toLocaleDateString());
Math
El objeto Math proporciona funciones matemáticas comunes.
console.log('Número aleatorio:', Math.random());
console.log('Redondeo hacia arriba:', Math.ceil(4.3));
console.log('Valor absoluto:', Math.abs(-5));
console.log('Máximo:', Math.max(10, 20, 5));