Cadenas de texto y Unicode
Una cadena es una secuencia codificada, no una lista simple de letras. Longitud, posición y corte dependen de distinguir bytes, unidades de código y caracteres visibles.
Para este tema conviene tener claro:Arreglos, listas y matrices
¿Cuántos caracteres tiene un emoji? La respuesta puede ser uno, dos o varios según qué estemos contando. El texto parece simple hasta que confundimos bytes, unidades de código, puntos Unicode y símbolos que una persona ve en pantalla.
De símbolos a puntos de código a bytes
Unicode asigna puntos de código a símbolos; una codificación como UTF-8 los convierte en bytes. Algunos lenguajes exponen posiciones como bytes y otros como unidades de longitud fija. Ninguna de esas posiciones garantiza coincidir con caracteres visibles.
Una letra acentuada puede representarse como un punto precompuesto o como letra más marca. Un emoji familiar puede combinar varios puntos mediante modificadores y uniones.
La palabra «café» escrita con la é precompuesta: cuatro posiciones, cuatro símbolos visibles.
Antes de seguir, predecí
Concatenar, buscar y cortar tienen precio
Concatenar, buscar y cortar tienen costos que dependen de la representación. Si las cadenas son inmutables, concatenar repetidamente dentro de un ciclo puede copiar todo el prefijo una y otra vez y terminar en costo cuadrático.
Para construir texto grande conviene acumular fragmentos y unir una vez, o usar un constructor
especializado. La claridad de result += part no garantiza eficiencia para todos los runtimes.
Cortar por posición rompe cosas
Cortar por posición interna puede separar una pareja sustituta o una secuencia combinada. Si la
operación visible es “tomar los primeros diez caracteres”, necesitamos segmentación por grafemas,
no un slice arbitrario.
Si la operación es un protocolo, quizá sí importen bytes exactos. La unidad correcta depende del problema: almacenamiento, comparación lingüística y edición visual piden abstracciones distintas.
Escena 1 — Cada más arma un texto nuevo
paso a paso
Cargando la escena…
Comparar texto no es comparar números
Comparar texto tampoco es sólo comparar números internos. Mayúsculas, normalización y reglas de idioma afectan búsquedas y orden. Un identificador técnico puede exigir igualdad exacta; un nombre visible puede necesitar comparación localizada.
Normalizar sin definir el dominio puede alterar datos significativos. Primero decidí qué significa “igual” para la aplicación y luego elegí la operación correspondiente.
Lo que pasa al comparar y al cortar
const a = 'café'; // é como un solo punto de código
const b = 'cafe\u0301'; // e + acento combinante
a === b; // false: son bytes distintos
a.length; // 4
b.length; // 5
a.normalize('NFC') === b.normalize('NFC'); // true: ahora sí
'Straße'.toUpperCase(); // 'STRASSE': una letra se convirtió en dos
'İ'.toLowerCase().length; // en turco, el mapeo no es uno a uno
const emoji = '👨👩👧';
emoji.length; // 8: son varios puntos unidos
[...emoji].length; // 5: iterar da puntos de código, no símbolos
emoji.slice(0, 2); // corta al medio de la familiaLas tres partes muestran lo mismo desde ángulos distintos: la longitud de una cadena no es la cantidad de símbolos que se ven, cortar por posición puede partir una secuencia, y convertir mayúsculas depende del idioma.
Comparar, ordenar y guardar texto
| Para | Usar | Por qué no lo obvio |
|---|---|---|
| Comparar si son el mismo texto | normalizar y después === | los mismos símbolos pueden ser bytes distintos |
| Comparar sin distinguir mayúsculas | localeCompare con sensitivity | toLowerCase depende del idioma |
| Ordenar una lista para mostrar | Intl.Collator | el orden de los bytes no es el alfabético |
| Buscar un usuario por nombre | una columna normalizada aparte | normalizar en cada consulta impide usar el índice |
| Guardar en la base | UTF-8, y declararlo | la codificación por defecto puede no serlo |
Cierre
Una cadena tiene varias capas: bytes, codificación, puntos de código y grafemas. Elegir la capa correcta evita texto corrupto y conteos falsos. El usuario ve símbolos; el programa debe declarar qué unidad está procesando.
Autoevaluación
¿Lo entendiste?
Práctica