Magia de las cadenas: por qué el formateo en Kotlin es un arte
\n\nImagine: 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\nEn 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!
1. Interpolación de cadenas: el pan y la mantequilla de Kotlin
\n\nLa 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.
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\nVentajas: legibilidad, velocidad, sin llamadas adicionales. Desventajas: no hay control sobre el formato de números (por ejemplo, la cantidad de decimales).
\n\nCuá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()oStringBuilder\n
2. String.format(): el legado de Java en Kotlin
\n\nSi 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).
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\nUn 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\n3. MessageFormat: cuando se necesitan plantillas con marcadores de posición
\n\nPara 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\nimport 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\nCuándo elegirlo: internacionalización (i18n), declinaciones complejas, plantillas con 5+ argumentos. Desventaja: sintaxis verbosa y dependencia de java.text.
4. Extensiones de Kotlin: brevedad y seguridad de tipos
\n\nA 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).
// 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