Kotlin no vive en el vacío: por qué y cómo conectar con otros lenguajes
\n\nImagine: usted escribe en Kotlin, un lenguaje moderno, conciso y seguro. Pero su proyecto no es una pizarra en blanco. En algún lugar del sistema vive código heredado en Java, los analistas necesitan una biblioteca en Python y para operaciones de bajo nivel se requiere C. O quiere reutilizar la lógica de negocio en el frontend, escribiéndola en Kotlin, pero allí JavaScript es el que manda.
\n\nLa buena noticia: la integración de Kotlin con otros lenguajes no es un dolor, sino una superpotencia. Kotlin está diseñado para ser un "lenguaje pegamento". Puede funcionar en la JVM (junto a Java), compilarse a código nativo (Kotlin/Native) e incluso a JavaScript (Kotlin/JS).
\n\nEn este artículo, analizaremos cuatro escenarios clave de interacción de Kotlin con otros lenguajes con ejemplos prácticos. Aprenderá cómo llamar a Python desde Kotlin, incrustar código C a través de JNI, trabajar sin problemas con Java e incluso usar Kotlin en el frontend. ¡Allá vamos!
\n\n1. Kotlin y Java: almas gemelas desde la primera línea
\n\nEl escenario más obvio y simple es la interacción Kotlin Java. Dado que Kotlin se compila a bytecode de la JVM, es 100% compatible con Java. Puede llamar a cualquier código Java desde Kotlin y viceversa, sin puentes, adaptadores ni dolor.
\n\nCómo llamar a Java desde Kotlin
\nSupongamos que tiene una clase Java antigua para trabajar con fechas:
\n\n// Java: DateUtils.java\npublic class DateUtils {\n public static String formatDate(long timestamp) {\n return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date(timestamp));\n }\n}\n\n\nEn Kotlin lo usa como si fuera nativo:
\n\n// Kotlin\nfun main() {\n val formatted = DateUtils.formatDate(System.currentTimeMillis())\n println("Hoy: $formatted") // Hoy: 2025-04-03\n}\n\n\nTodo funciona "de fábrica". Pero hay matices: la seguridad null. Java no conoce los tipos nullable de Kotlin, por lo que al llamar a métodos Java, Kotlin trata los valores devueltos como tipos de plataforma (por ejemplo, String!). Consejo: siempre especifique explícitamente el tipo o use !! / ?. con criterio.
Cómo llamar a Kotlin desde Java
\nLa compatibilidad inversa también existe. Supongamos que tiene un archivo Kotlin:
\n\n// Kotlin: Calculator.kt\npackage utils\n\nobject Calculator {\n @JvmStatic\n fun sum(a: Int, b: Int): Int = a + b\n}\n\n\nDesde Java lo llamamos así:
\n\n// Java\nimport utils.Calculator;\n\npublic class Main {\n public static void main(String[] args) {\n int result = Calculator.sum(5, 3);\n System.out.println(result); // 8\n }\n}\n\n\nLo principal es no olvidar la anotación @JvmStatic para métodos estáticos y @JvmName para resolver conflictos de nombres. La integración de Kotlin con Java es tan estrecha que puede mezclar ambos lenguajes en un mismo proyecto; esto es un estándar para el desarrollo de Android y muchos backends con Spring.
2. Kotlin y Python: dos mundos, una JVM (y GraalVM)
\n\nEsto ya es más interesante. Kotlin Python no es el vínculo más trivial, pero es posible. No hay un puente nativo directo, pero podemos usar soluciones basadas en JVM.
\n\nOpción A: GraalVM — ejecutamos Python en la JVM
\nGraalVM es una máquina virtual que puede ejecutar varios lenguajes (Java, Kotlin, JavaScript, Python, Ruby) en un solo proceso. Es la herramienta ideal para la integración de Kotlin con Python.
\n\nInstale GraalVM y agregue soporte para Python:
\n\ngu install python\n\n\nAhora, en el código Kotlin se pueden llamar funciones de Python:
\n\n// Kotlin (GraalVM Polyglot API)\nimport org.graalvm.polyglot.*\n\nfun main() {\n val context = Context.create("python")\n // Ejec