Formateo de cadenas en Kotlin: 5 enfoques para profesionales

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Magia de las cadenas: por qué el formateo en Kotlin es un arte

\n\n

Imagine: está escribiendo una aplicación para el seguimiento de entrenamientos deportivos. Necesita mostrar un mensaje: "¡Hola, Alexéi! Su tiempo: 42.5 km en 2:15:07. El mejor resultado es un 3.2% mejor.". Si construye dicha cadena con concatenación (unión) al estilo Java, el código se convertirá en una mezcla de signos más y comillas. El formateo de cadenas en Kotlin resuelve este problema de manera elegante y potente.

\n\n

En este artículo, analizaremos 5 enfoques para el Kotlin String formatting. Aprenderá cuándo usar interpolación, cuándo usar el clásico String.format() y cuándo usar plantillas avanzadas. ¡Allá vamos!

\n\n

1. Interpolación de cadenas: el pan y la mantequilla de Kotlin

\n\n

La técnica más popular y simple es la interpolación de cadenas en Kotlin. Está integrada directamente en el lenguaje: use el signo de dólar $ para insertar una variable y ${} para expresiones.

\n\n
val name = "Ana"\nval age = 28\nval message = "Me llamo $name, tengo $age años."\nprintln(message) // Me llamo Ana, tengo 28 años.\n\n// Expresiones con llaves\nval price = 49.99\nval discount = 0.2\nval finalPrice = "Precio con descuento: ${price * (1 - discount)} rublos."\nprintln(finalPrice) // Precio con descuento: 39.992 rublos.
\n\n

Ventajas: legibilidad, velocidad, sin llamadas adicionales. Desventajas: no hay control sobre el formato de números (por ejemplo, la cantidad de decimales).

\n\n

Cuándo usarlo

\n
    \n
  • Mensajes simples, registros, textos de UI
  • \n
  • Cuando no se necesita un ajuste preciso del formato de números o fechas
  • \n
  • Dentro de println() o StringBuilder
  • \n
\n\n

2. String.format(): el legado de Java en Kotlin

\n\n

Si necesita control de formato, String.format() en Kotlin viene al rescate. Es un puente directo al método Java String.format() con los mismos especificadores (%s, %d, %.2f).

\n\n
val pi = 3.1415926535\nval formatted = String.format("Número π con tres decimales: %.3f", pi)\nprintln(formatted) // Número π con tres decimales: 3.142\n\n// Varios argumentos\nval name = "Iván"\nval score = 95\nval result = String.format("%s obtuvo %d puntos de 100", name, score)\nprintln(result) // Iván obtuvo 95 puntos de 100
\n\n

Un detalle importante: el formateo de cadenas Kotlin String.format no es type-safe; si pasa el tipo incorrecto, obtendrá una excepción en tiempo de ejecución. Para una verificación estática, use métodos específicos de Kotlin (consulte la sección 5).

\n\n

3. MessageFormat: cuando se necesitan plantillas con marcadores de posición

\n\n

Para plantillas complejas con argumentos repetidos o localización, use MessageFormat en Kotlin. Puede elegir la forma de la palabra (singular/plural) y formatear fechas.

\n\n
import java.text.MessageFormat\n\nval pattern = "{0} tiene {1} {0,choice,0#manzanas|1#manzana|2#manzanas}."\nval result = MessageFormat.format(pattern, "Pedro", 5)\nprintln(result) // Pedro tiene 5 manzanas.\n\n// Con fecha\nval datePattern = "Hoy es {0,date,long}. Hora: {0,time,short}"\nval now = java.util.Date()\nprintln(MessageFormat.format(datePattern, now))
\n\n

Cuándo elegirlo: internacionalización (i18n), declinaciones complejas, plantillas con 5+ argumentos. Desventaja: sintaxis verbosa y dependencia de java.text.

\n\n

4. Extensiones de Kotlin: brevedad y seguridad de tipos

\n\n

A la comunidad de Kotlin le encantan las extensiones para el formateo de cadenas. Puede escribir su propia solución o usar bibliotecas ya preparadas (por ejemplo, kotlinx.string).

\n\n
// Extensión muy simple\nfun String.format(vararg args: Any?): String {\n    return String.format(this, *args)\n}\n\n// Uso\nval template = "¡Hola, %s! Tu saldo: %.2f USD"\nval msg = template.format("Maxim", 1234.5678)\nprintln(msg) // ¡H                

Blogs

Book Recommendations