{"id":671738,"date":"2025-12-31T02:36:37","date_gmt":"2025-12-31T01:36:37","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=671738"},"modified":"2026-01-05T23:25:30","modified_gmt":"2026-01-05T22:25:30","slug":"introduccion-a-kotlin-para-desarrolladores-java","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/es\/kotlin\/2025\/12\/introduccion-a-kotlin-para-desarrolladores-java\/","title":{"rendered":"Introducci\u00f3n a Kotlin para desarrolladores Java"},"content":{"rendered":"<p><em>Art\u00edculo de <a href=\"https:\/\/www.linkedin.com\/in\/urs-peter-70a2882\/\" target=\"_blank\" rel=\"noreferrer noopener\" data-type=\"link\" data-id=\"https:\/\/bit.ly\/urs-peter-linked-in\">Urs Peter<\/a>, ingeniero de software s\u00e9nior y formador de Kotlin certificado por JetBrains. Para los lectores que busquen una forma m\u00e1s estructurada de desarrollar sus habilidades en Kotlin, Urs tambi\u00e9n dirige el <\/em><a href=\"https:\/\/academy.xebia.com\/upskilling\/kotlin-academy\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Kotlin Upskill Program<\/em><\/a><em> en Xebia Academy.<\/em><\/p>\n<p><em>Este art\u00edculo inaugura <\/em><strong><em>La gu\u00eda definitiva para adoptar Kotlin en un entorno dominado por Java<\/em><\/strong><em>, una serie que sigue c\u00f3mo crece la adopci\u00f3n de Kotlin entre equipos reales, desde la curiosidad de un \u00fanico desarrollador hasta la transformaci\u00f3n de toda la empresa.<\/em><\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<p class=\"has-text-align-left\">\u00ab<em>No se aprieta un bot\u00f3n para &#8220;pasarse a Kotlin&#8221;.<\/em><\/p>\n<p class=\"has-text-align-left\"><em>Se mitigan los riesgos, se calcula y se celebran las victorias,<\/em><\/p>\n<p class=\"has-text-align-left\"><em>y solo entonces se dobla la apuesta.<\/em>\u00bb\u00bb<\/p>\n<p>Adoptar Kotlin en un entorno Java establecido no es solo una decisi\u00f3n t\u00e9cnica: es un recorrido que requiere una planificaci\u00f3n cuidadosa, pensamiento estrat\u00e9gico y, lo que es m\u00e1s importante, ganarse la total confianza de los compa\u00f1eros.\u00a0<\/p>\n<p>Tras formar a m\u00e1s de 1000 desarrolladores y ayudar a numerosas organizaciones a triunfar en la transici\u00f3n a Kotlin, he visto lo que funciona y lo que no. Esta gu\u00eda con consejos que he ido recopilando a lo largo del tiempo para ayudarle a adoptar Kotlin con facilidad le orientar\u00e1 desde sus primeros proyectos experimentales hasta la transformaci\u00f3n organizativa a gran escala.<\/p>\n<p>Esta serie seguir\u00e1 el itinerario siguiente:<\/p>\n<ul>\n<li><a href=\"#it-always-starts-with-a-spark,-initiated-by-you\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/#it-always-starts-with-a-spark,-initiated-by-you\">Todo comienza con una chispa: \u00a1enci\u00e9ndala!<\/a><\/li>\n<li><a href=\"#the-play-around-stage-start-small-\u2013-with-tests\">La etapa de experimentar: empezar poco a poco con pruebas<\/a><\/li>\n<li>La fase de evaluaci\u00f3n: algo m\u00e1s que jugar con Kotlin<\/li>\n<li>Correr la voz: g\u00e1nese la confianza de sus colegas desarrolladores<\/li>\n<li>Persuadir a la direcci\u00f3n: abogar por Kotlin para la empresa<\/li>\n<li>Factores de \u00e9xito para la adopci\u00f3n de Kotlin a gran escala<\/li>\n<li>Kotlin o no Kotlin, esa es la cuesti\u00f3n. \u00bfQu\u00e9 tipo de empresa quiere ser?<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><strong>Todo comienza con una chispa: \u00a1enci\u00e9ndala!<\/strong><\/h2>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-647072\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-12.png\" alt=\"Todo comienza con una chispa: \u00a1enci\u00e9ndala!\" width=\"1586\" height=\"526\" \/><\/figure>\n<p><em>\u00bfPor qu\u00e9 esforzarse en pasarse a Kotlin? \u00bfPor qu\u00e9 no limitarse a Java y seguir adelante?\u00a0<\/em><\/p>\n<p>La respuesta depende de numerosos factores. Aunque los datos muestran claramente las ventajas de Kotlin en varios \u00e1mbitos, la decisi\u00f3n no es puramente t\u00e9cnica. La subjetividad (\u00abMe gusta mi lenguage porque s\u00ed\u00bb) y el escepticismo ante algo nuevo, que generalmente es algo bueno, desempe\u00f1an un papel importante.\u00a0<\/p>\n<p>Sin embargo, la evoluci\u00f3n de los lenguajes de programaci\u00f3n demuestra que nuestras preferencias y necesidades cambian con el tiempo. Esencialmente, cada nueva generaci\u00f3n de lenguajes incorpora nuevos paradigmas \u2014seguridad (null), sintaxis concisa y ligera, funciones como ciudadanos de primera clase, biblioteca est\u00e1ndar rica, concurrencia as\u00edncrona, compatibilidad multiplataforma, compatibilidad con IA generativa, etc.\u2014 que proporcionan a los desarrolladores y a las organizaciones una ventaja decisiva.\u00a0<\/p>\n<p>Sin esta progresi\u00f3n natural, seguir\u00edamos codificando todo en COBOL u otro lenguaje arcaico, incapaces de satisfacer las exigencias actuales. Por lo tanto, la evoluci\u00f3n no es opcional; est\u00e1 ligada a la historia de nuestro sector.<\/p>\n<p>Sin embargo, para que esta evoluci\u00f3n arraigue en una empresa, hace falta algo m\u00e1s que m\u00e9ritos t\u00e9cnicos. Requiere facilitadores: personas dispuestas a explorar, defender y mostrar el valor de estos nuevos paradigmas en la pr\u00e1ctica. En mi experiencia, hay tres tipos de ingenieros que suelen convertirse en estos catalizadores de la adopci\u00f3n de Kotlin:<\/p>\n<ol>\n<li><strong>El ingeniero Java pragm\u00e1tico y centrado en la productividad<\/strong>: desarrolladores experimentados que ven Java como una herramienta, no como una religi\u00f3n. Siempre est\u00e1n buscando mejores formas de hacer el trabajo m\u00e1s r\u00e1pido.<\/li>\n<li><strong>Los entusiastas de los lenguajes modernos centrados en la calidad<\/strong>: ingenieros que dan prioridad al c\u00f3digo legible, conciso y f\u00e1cil de mantener. A menudo se trata de las mismas personas que anteriormente se habr\u00edan pasado a Scala.<\/li>\n<li><strong>Desarrolladores junior<\/strong>: juniors que se hacen una pregunta sencilla pero poderosa: \u00ab\u00bfPor qu\u00e9 deber\u00eda usar Java si puedo usar Kotlin?\u00bb. Sin el bagaje de a\u00f1os de experiencia en Java, Kotlin es a menudo la elecci\u00f3n obvia para ellos.<\/li>\n<\/ol>\n<p>\u00bfA qu\u00e9 grupo pertenece?\u00a0<\/p>\n<p>Estos primeros adoptantes encienden la primera chispa. Pero \u00bfc\u00f3mo arrancar? Siga leyendo&#8230; ;-)\u00a0<\/p>\n<h2 class=\"wp-block-heading\"><strong>La etapa de experimentar: empezar poco a poco con pruebas<\/strong><\/h2>\n<p>Ha o\u00eddo hablar de Kotlin y quiere probarlo sin comprometerse inmediatamente.\u00a0<\/p>\n<p>As\u00ed que lo primero que necesita es una herramienta para desarrolladores en la que plantar sus primeras semillas de Kotlin. Estas son algunas opciones:<\/p>\n<ul>\n<li><a href=\"https:\/\/play.kotlinlang.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/play.kotlinlang.org\/<\/a> es un gran patio de recreo en l\u00ednea, simplemente escriba y ejecute c\u00f3digo Kotlin no solo en la JVM, sino tambi\u00e9n para varias otras plataformas (JS, WASM, etc.).<img decoding=\"async\" loading=\"lazy\" class=\"wp-image-647084\" style=\"width: 650px;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-13.png\" alt=\"\u00c1rea de juegos de Kotlin\" width=\"1462\" height=\"660\" \/><\/li>\n<\/ul>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/kotlin-notebook-overview.html\" target=\"_blank\" rel=\"noreferrer noopener\">Kotlin Notebook<\/a> es una potente funcionalidad de IntelliJ IDEA que le permite importar dependencias, ejecutar c\u00f3digo e incluso trabajar con datos, dibujar gr\u00e1ficos, etc. de forma sencilla. He aqu\u00ed un ejemplo que muestra lo f\u00e1cil que es realizar una llamada REST con RestClient de Spring:<img decoding=\"async\" loading=\"lazy\" class=\"wp-image-647095\" style=\"width: 650px;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-11.png\" alt=\"Kotlin Notebook\" width=\"1600\" height=\"1035\" \/><\/li>\n<\/ul>\n<ul>\n<li>IntelliJ IDEA dispone de compatibilidad de primera con Kotlin. Esto no es ninguna sorpresa, ya que JetBrains es el fabricante de Kotlin, y una gran parte de IntelliJ IDEA est\u00e1 escrito en \u00e9l. Por lo tanto, para empezar a utilizar Kotlin en <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/get-started-with-kotlin.html#add-kotlin-dependency\" target=\"_blank\" rel=\"noreferrer noopener\">IntelliJ IDEA<\/a> (incluso en su proyecto Java existente) es coser y cantar:\n<ul>\n<li>Para <a href=\"https:\/\/kotlinlang.org\/docs\/maven.html\" target=\"_blank\" rel=\"noreferrer noopener\">Maven<\/a>, basta con configurar el complemento <code>kotlin-maven-plugin<\/code> y la biblioteca est\u00e1ndar de Kotlin <code>kotlin-stdlib<\/code>.<\/li>\n<li>Para <a href=\"https:\/\/kotlinlang.org\/docs\/gradle-configure-project.html\" target=\"_blank\" rel=\"noreferrer noopener\">Gradle<\/a>, configure el complemento kotlin.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&#8230;\u00a1y ya est\u00e1!<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-647106\" style=\"aspect-ratio: 1.1216216216216217; width: 320px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/unnamed-14.png\" alt=\"\" width=\"498\" height=\"444\" \/><\/figure>\n<ul>\n<li>\u00a1Pero hay m\u00e1s! JetBrains lanz\u00f3 recientemente el Kotlin Language Server, que ofrece una experiencia de desarrollo Kotlin con todas las funciones a otros IDE m\u00e1s all\u00e1 de IntelliJ IDEA, como VS Code. Compru\u00e9belo: <a href=\"https:\/\/github.com\/Kotlin\/kotlin-lsp\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/Kotlin\/kotlin-lsp<\/a>\u00a0<\/li>\n<\/ul>\n<p>Ahora, puede escribir Kotlin en su entorno de desarrollo favorito. \u00bfC\u00f3mo puede evaluar el lenguaje en un contexto real con el m\u00ednimo impacto y el m\u00e1ximo conocimiento? \u00a1En el conjunto de pruebas de un proyecto Java existente!\u00a0<\/p>\n<p>Este enfoque seguro y realista para experimentar con Kotlin ofrece varias ventajas:<\/p>\n<ul>\n<li><strong>Riesgo bajo<\/strong>: las pruebas no afectan al c\u00f3digo de producci\u00f3n.<\/li>\n<li><strong>Oportunidad de aprendizaje<\/strong>: puede explorar las funcionalidades del lenguaje en un contexto familiar.<\/li>\n<li><strong>Introducci\u00f3n gradual<\/strong>: los miembros del equipo pueden sentirse c\u00f3modos con la sintaxis de Kotlin sin presiones.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>Consejos<\/strong><\/h3>\n<ol>\n<li>Pruebe Kotest + MockK: para sentir de inmediato la expresividad de los DSL (Domain-Specific Languages, lenguajes espec\u00edficos de dominio) de pruebas de Kotlin, como las aserciones ricas en funcionalidades [<code>shouldHaveSize(...)<\/code>, infix (<code>value shouldBe 1<\/code>), etc.].<\/li>\n<li>Utilice las concisas y potentes colecciones de Kotlin en lugar de Java Streams.<\/li>\n<li>Juegue con diversas funcionalidades del lenguaje como tipos anulables, desestructuraci\u00f3n, inmutabilidad (<code>val<\/code>, <code>data classes<\/code>), construcciones de expresi\u00f3n (<code>when<\/code>, <code>try-catch<\/code>, <code>if else<\/code>) y muchas m\u00e1s.<\/li>\n<\/ol>\n<p>Esto es lo que obtendr\u00e1:<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Test\nvoid shouldGetAverageRating() {\n   when(productRepository.findAll()).thenReturn(products);\n\n   Map ratings = productService.averageRatings();\n\n   assertAll(\n           () -&gt; assertThat(ratings).hasSize(4),\n           () -&gt; assertEquals(ratings, products\n                   .stream()\n                   .collect(Collectors.groupingBy(\n                           Product::getName,\n                           Collectors.flatMapping(\n                                   p -&gt; p.getRatings()\n                                    .stream()\n                                    .mapToDouble(Integer::doubleValue)\n                                    .boxed(),   \n                              Collectors.averagingDouble(Double::doubleValue)\n                           )))\n           )\n   );\n   verify(productRepository).findAll();\n\n}\n<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Test\nfun `should get average rating`() { \/\/descriptive tests using ``\n   every { productRepository.findAll() } returns products\n\n   val ratings = productService.averageRatings()\n\n   assertSoftly(ratings) { \t\t\/\/powerful testing DSLs (Kotest)\n       shouldHaveSize(4)\n       this shouldBe productRepository.findAll()\n           .groupBy { it.name }   \t\t\t\/\/concise collections\n           .mapValues { (_, products) -&gt; \t\t\/\/destructuring\n                  products.flatMap { it.ratings }.average() }\n   }\n    verify { productRepository.findAll() }\n}<\/pre>\n<h3 class=\"wp-block-heading\">Siguiente de la serie<\/h3>\n<p>La adopci\u00f3n de Kotlin suele comenzar con una persona que explora y unas pocas pruebas que demuestran su utilidad. Esos primeros momentos de descubrimiento conducen naturalmente a algo m\u00e1s grande: evaluar Kotlin en un proyecto real.<\/p>\n<p>El pr\u00f3ximo art\u00edculo de esta serie describir\u00e1 esa etapa y explicar\u00e1 c\u00f3mo probar Kotlin en entornos de producci\u00f3n.<\/p>\n<p>A<em>rt\u00edculo original en ingl\u00e9s de:<\/em><\/p>\n<div class=\"about-author \">\n<div class=\"about-author__box\">\n<div class=\"row\">\n<div class=\"about-author__box-img\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/a3f7-400o400o1-QYUavRYyARnAVJLCpM1m8M.webp\" alt=\"\" \/><\/div>\n<div class=\"about-author__box-text\">\n<h4>Urs Peter<\/h4>\n<p>Urs es un experimentado ingeniero de software, arquitecto de soluciones, conferenciante y formador con m\u00e1s de 20 a\u00f1os de experiencia en la creaci\u00f3n de sistemas resistentes, escalables y cr\u00edticos, principalmente con Kotlin y Scala.<\/p>\n<p>Adem\u00e1s de su trabajo como consultor, tambi\u00e9n es un formador apasionado y autor de una gran variedad de cursos que van desde cursos de los lenguajes Kotlin y Scala hasta formaciones de arquitectura como los microservicios y las arquitecturas orientadas a eventos.<\/p>\n<p>Como persona sociable por naturaleza, le encanta compartir conocimientos e inspirar y dejarse inspirar por sus compa\u00f1eros en quedadas y conferencias. Urs es un formador de Kotlin certificado por JetBrains.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/08\/photo_2021-08-03_15-27-43-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Alyona Chernyaeva\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Alyona Chernyaeva<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":671750,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/671738"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=671738"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/671738\/revisions"}],"predecessor-version":[{"id":672142,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/671738\/revisions\/672142"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/671750"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=671738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=671738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=671738"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=671738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}