Ir al contenido principal

Semántica en programación: por qué el "significado" del código importa tanto como su funcionamiento

Semántica en programación: por qué el "significado" del código importa tanto como su funcionamiento

Cuando programamos, no solo escribimos instrucciones que una máquina ejecuta: también comunicamos intenciones a otras personas (y a nuestro yo futuro). Ahí es donde entra la semántica: el significado o propósito de una pieza de código, más allá de lo que hace técnicamente o de cómo se ve.

En este artículo repasamos qué significa "escribir con semántica" en tres contextos distintos —JavaScript, CSS y HTML— con ejemplos concretos en cada uno.

¿Qué es la semántica, exactamente?

La semántica responde a preguntas como:

  • ¿Qué efecto tiene ejecutar esta línea de código?

  • ¿Qué rol o función cumple este elemento dentro de la página?

Es distinto de preguntar "¿qué aspecto tiene esto?", que es una cuestión de presentación, no de significado.

Semántica en JavaScript

En JavaScript, los nombres que elegimos para funciones y variables son la principal herramienta semántica de la que disponemos, porque el lenguaje no impone una estructura de "significado" como sí lo hace HTML.

Imaginemos una función que recibe un string y devuelve un elemento <li> con ese texto como contenido:

function createLiWithContent(text) {
    const li = document.createElement('li');
    li.textContent = text;
    return li;
}

Comparemos esa llamada con esta otra, que hace exactamente lo mismo:

function build(text) {
    const item = document.createElement('li');
    item.textContent = text;
    return item;
}

Ambas funciones son idénticas en comportamiento. Pero al leer createLiWithContent('Melocotón') sabemos de inmediato qué hace, sin necesidad de abrir la definición de la función. build('Melocotón'), en cambio, no nos dice nada por sí sola: podría estar construyendo cualquier cosa. Ese es el valor de nombrar con semántica: reduce la carga cognitiva de quien lee el código.

Ejemplo adicional en JavaScript: variables booleanas

Otro caso común ocurre al nombrar banderas (flags) o estados. Un nombre poco semántico como let v = true; nos deja a ciegas. En su lugar, un nombre semántico como let isUserAuthenticated = true; comunica instantáneamente la regla de negocio que representa.

Semántica en CSS

En CSS ocurre algo parecido con los selectores. Supongamos que queremos aplicar estilos a una lista de frutas:

div > ul > li {
    background-color: #f9f9f9;
    padding: 10px;
}

Frente a:

.fruits__item {
    background-color: #f9f9f9;
    padding: 10px;
}

El primer selector describe una ruta estructural en el DOM (un div que contiene un ul que contiene un li), pero no dice nada sobre el contenido: ese li podría representar frutas, tareas pendientes o comentarios de un foro. El segundo selector, .fruits__item, comunica de inmediato qué representa ese elemento en el dominio del problema. Además, es más resistente a cambios: si mañana envolvemos la lista en un elemento adicional, el selector estructural se rompe; la clase semántica, no.

Ejemplo adicional en CSS: modificadores y estados

Siguiendo la metodología BEM (Block, Element, Modifier), usar clases semánticas para estados como .btn--loading o .card--highlighted deja muy claro qué condición visual o de interacción está aplicando el estilo, evitando nombres basados en colores (como .bg-red).

Semántica en HTML

HTML es, de los tres, el lenguaje donde la semántica tiene el impacto más directo y medible.

Un elemento como <h1> no es solo "texto grande": es semánticamente un encabezado de primer nivel de la página.

<h1>Noticias de tecnología</h1>

Por defecto, la hoja de estilos del navegador (user agent stylesheet) hace que un <h1> se vea grande y en negrita, pero eso es solo una consecuencia visual, no la razón de ser del elemento.

Ahora comparemos con esto:

<span style="font-size: 32px; font-weight: bold;">Noticias de tecnología</span>

Visualmente, ambos ejemplos pueden lucir casi idénticos. Pero el segundo no tiene ningún valor semántico: para un lector de pantalla, un motor de búsqueda o cualquier herramienta que analice la estructura de la página, ese <span> es solo texto genérico, no un encabezado.

La regla general es: el HTML debe describir qué son los datos, no cómo deben verse. La apariencia es responsabilidad exclusiva de CSS.

Beneficios concretos de escribir HTML semántico

  • SEO: los buscadores usan el contenido de elementos semánticos como señal relevante para el posicionamiento de la página.

  • Accesibilidad: los lectores de pantalla usan estos elementos como puntos de referencia para que las personas con discapacidad visual naveguen la página con más facilidad.

  • Mantenibilidad: localizar bloques de código con significado es mucho más rápido que rastrear una sopa de <div> sin distinción, con o sin clases.

  • Claridad para el equipo de desarrollo: el nombre del elemento sugiere qué tipo de dato va a contener.

  • Coherencia con componentes personalizados: nombrar con semántica en HTML es el mismo hábito que nombrar bien un componente o elemento personalizado en un framework.

Cómo elegir el elemento correcto

Antes de escribir una etiqueta, conviene preguntarse: ¿qué elemento describe mejor los datos que voy a mostrar?

  • ¿Es una lista? ¿Ordenada o no ordenada?

  • ¿Es un artículo con secciones y un contenido relacionado aparte (aside)?

  • ¿Es una lista de definiciones?

  • ¿Es una imagen o figura que necesita una leyenda?

  • ¿Necesita un encabezado y un pie propios, además de los globales del sitio?

Algunos de los elementos semánticos disponibles

HTML ofrece cerca de un centenar de elementos semánticos. Algunos de los más usados:

Elemento

Propósito

 

<article>

Contenido autocontenido y reutilizable (un post, una noticia)

<aside>

Contenido relacionado pero secundario

<details> / <summary>

Contenido expandible/colapsable con su resumen

<figure> / <figcaption>

Contenido ilustrativo con su leyenda

<footer>

Pie de página o de sección

<header>

Cabecera de página o de sección

<main>

Contenido principal de la página

<mark>

Texto resaltado o relevante

<nav>

Bloque de enlaces de navegación

<section>

Sección temática independiente

<time>

Fecha u hora legible por máquina

En resumen

Escribir con semántica —en JavaScript, en CSS o en HTML— significa priorizar el significado sobre la apariencia o la estructura superficial. Un buen nombre de función, un buen selector o el elemento HTML correcto no cambian lo que el usuario final ve en pantalla, pero sí cambian radicalmente lo fácil (o difícil) que resulta entender, mantener y hacer accesible ese código.

Artículo basado en el glosario de MDN sobre semántica.

Comentarios

Entradas populares de este blog

Elemento de formulario atributo {action}

En esta ocasión hablaré del atributo {action}, que en resumen solo contiene la URL que procesará los datos contenidos en el formulario. Puede ser muchos lenguajes los que procesen el formulario, sin embargo, tomaremos como ejemplo un script de PHP. Dicho esto podemos decir que el atributo {action} es propio del elemento {form} de HTML y es usado para enviar todo el contenido dentro del formulario. Aunque debes tener en cuneta de que solo los elementos {input} con atributo {type} y {neme} son enviados. Existe una buena cantidad de input type de lo que hablaremos más adelante. Por lo que te adelanto que estos son los elementos que vemos para la entrada de texto números y controles dentro de páginas web. Son elementos capaces de recoger datos a rais de entrada por el usuario por también ficheros de imágenes y mucho más. ...

HTMLElement.accessKey

Presione dos veces en el texto para leer, después de haber activado la funcionalidad si estás desde un móvil. Si estás desde un ordenador puedes hacer doble clic en los textos de esta entrada para leerlos. Nota: Más adelante se actualizará la entrada y mostraremos el mensaje para dispositivos móviles usando JavaScript para detectar el dispositivo que visita la página web. En esta entrada hablaré sobre el atributo {accesskey} de HTML5. Este atributo da la posibilidad de brindar al usuario realizar acción en un elemento de HTML. Por esta razón analizaremos las posibilidades que tenemos para que esta acción realmente, beneficie al usuario. Como de costumbre publico definiciones de atributos, funciones, mét...

Formulario HTML attribute: accept-charset

Definición del atributo {accept-charset} de HTML5. En esta ocasión he realizado una investigación de los parámetros que podemos pasar a este atributo. La definición a continuación que nos brinda MDN dice: accept-charset Codificaciones de caracteres separadas en el espacio El servidor acepta. El navegador los usa en el orden en que se enumeran. El valor predeterminado significa la misma codificación que la página. (En versiones anteriores de HTML, las codificaciones de caracteres también podrían ser delimitadas por comas). Sin embargo, carece de enlaces para ver detalles sobre la implementación del atributo y más sobre el tema. Un análisis importante es que podemos definir la codificación de caracteres diferentes al resto de la página web o aplicación en la que estemos trabajando. Esto solo para casos específicos. También debemos recordar que...

Efectos CSS con Izmir Hover Effects

Mira que bellos estos efectos con una librería CSS llamada Izmir Hover Effects Pasa el ratón sobre las imágenes o haz clic sobre ellas si etas en el móvil Mi avatar. Mi avatar. ...

¿Bajo qué licencia opera MySQL? ¿Tenemos que pagar?

En esta entrada comprenderemos, bajo que licencia se puede distribuir y/o acceder a los productos MySql y de paso hablaremos de MariaDB para aclarar conceptos de licencia, y del porqué en algunos sitios de la Internet, suelen decir que es gratis la base de datos MySQL. Esta entrada surge a raíz de un comentario de una persona muy apreciada lo cual lee mis escritos y presenta críticas constructivas. Exactamente en mi publicación anterior declaro que MySQL era gratuito, más adelante les dejo una cita, que hace referencia dicha entrada. MySQL para empresas no es gratuito y los detalles de estas se encuentran en su página oficial. A continuación leemos sobre lo que nos tiene que decir acerca de las licencias, dado el caso de que "Oracle" obtuvo los derechos de MySQL, estos cambios se han ido incorporando poco a poco, de hecho con en el lenguaje Java está sucediendo algo similar. No digo q...

HTML / Atributos

Atributos / HTML Nombre del atributo Descripción Estado de revisión accept Lista de tipos que acepta el servidor, normalmente un tipo de archivo. Puedes encontrar una entrada con ejemplo en este blog aquí Formulario HTML attribute: accept ...

Atributo accept de HTML

    En esta ocasión hablaré del atributo {accept=" "} de HTML. A modo de introducción este atributo hace referencia al tipo de archivos que permitimos al usuario insertar en un input type="file" Ahora comenzamos con la descripción y una lista de parámetros que en teoría deberían ser válidos para aplicaciones web. Sin embargo, es necesario hacer pruebas en los navegadores más usados para comprobar la compatibilidad. Este atributo recibe como parámetro de tipo {MIME types} por lo que podemos ir a esta referencia y deberían funcionar. Estos son los tipos más comunes, sin embargo, hay una listas más completas, pero no asegura la compatibilidad. Por otro lado, no es aconsejable permitir a los usuarios subir archivos de tipo ejecutaba o que puedan ejecutarse de alguna forma. El atributo {accept=" "}, toma como su valor una lista separada...

JavaScript Array

Follow @codefuncode En esta ocasión les traigo algo muy sencillo. Se trata de cómo definir una matriz y acceder a sus valores. Recordemos que las matrices tienen valores de acuerdo a su índice. O sea que una matriz puede tener distintos valores y para encontrarlos debemos especificar el índice en que se encuentra. A continuación un ejemplo de cómo definir una matriz y acceder a sus valores. Un Aray en JavaScript es un objeto. Básicamente, todo es un objeto en JavaScript. Por lo que cuando estés avanzado con este lenguaje verás que en ocasiones deberás buscar el objeto en sí, ya que muchos de los objetos tienen métodos ya definidos por defecto y en otras ocasiones tienen métodos que no conocemos, porque en la internet no se habla mucho de ellos. Más adelante hablaré muchos detalles sobre esto. Más adelante hablaremos de matrices asociativas y mucho más. Por ahora veamos esto. ...

¿Empezando con desarrollo de aplicaciones web?

Si deseas ser desarrollador de aplicaciones web y tener pleno dominio del código fuente que escribes deberás estar atento nuevas entradas. Crear aplicaciones web no es tarea sencilla, por lo que te recomiendo estar preparado para especializarte en un campo específico. A modo de introducción le muestro los componentes de una aplicación web: Interfaz. Lógica de la aplicación. Base de datos. Básicamente, esto es de lo que se compone una aplicación web. Para esta serie de entradas usaremos MariaDB, PHP, JavaScript, CSS3, HTML5. Recuerda que aprender a crear aplicaciones web le dará la posibilidad de crear páginas web tanto estáticas como dinámicas. Para trabajar con aplicaciones web debemos considerar la instalación de progra...