{"id":245,"date":"2019-11-12T23:33:23","date_gmt":"2019-11-13T02:33:23","guid":{"rendered":"http:\/\/desarrollo-agil.ml\/blog\/?p=245"},"modified":"2019-11-13T22:25:27","modified_gmt":"2019-11-14T01:25:27","slug":"migrando-de-java-a-kotlin","status":"publish","type":"post","link":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/","title":{"rendered":"Migrando de Java a Kotlin"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es Kotlin?<\/h3>\n\n\n\n<p>Es un lenguaje de programaci\u00f3n montado sobre la JVM. Originalmente se empez\u00f3 a usar para desarrollar aplicaciones Android, pero \u00faltimamente fue ganando terreno en aplicaciones backend<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCon Java no te alcanza?<\/h3>\n\n\n\n<p>Java es un lenguaje de programaci\u00f3n excelente. Pero naci\u00f3 a mediados de los a\u00f1os 90 y pasaron ya muchos a\u00f1os desde que vio la luz. El desarrollo de software fue evolucionando, y si bien Java acompa\u00f1\u00f3 este cambio y fue sumando algunas cosas, fue quedando atr\u00e1s en la carrera con algunos lenguajes posteriores, que tienen caracter\u00edsticas m\u00e1s avanzadas, de un modo m\u00e1s natural, ya que fueron concebidos con esas caracter\u00edsticas en mente desde el inicio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 features tiene?<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Data Class<\/h4>\n\n\n\n<p>Es la principal ausencia de Java. Nos permite crear clases que son solamente para almacenar info. Son nada m\u00e1s y nada menos que los viejos y queridos DTO&#8217;s, pero con esteroides. Nos proveen la implementaci\u00f3n de los m\u00e9todos equals y copy , y los setters y getters de cada atributo. Cr\u00e9anme que van a ahorrar mucho c\u00f3digo s\u00f3lo con usar los data class.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Null safety<\/h4>\n\n\n\n<p>En Kotlin los tipos de datos no permiten valor null, a menos que expresamente le indiquemos lo contrario. \u00bfEso quiere decir que no tengo que estar nullchequeando todo? Exacto. \u00bfY c\u00f3mo hago si algo en mi negocio puede ser null? Se lo indico expresamente. Esto tiene 2 ventajas. La primera, es que en los valores que no admiten null, me olvido de andar poniendo  \u00abif (algo != null){doMagic()}\u00bb .  La segunda, es que en el caso de los valores nulleables, tengo el operador \u00ab?\u00bb, y le puedo aplicar operaciones \u00ablet\u00bb y \u00abrun\u00bb, que se aplican solo cuando tiene un valor v\u00e1lido. El c\u00f3digo queda mucho mas claro y conciso.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">High Order Functions (funciones de orden superior)<\/h4>\n\n\n\n<p>Muchas veces quise mandar funciones como par\u00e1metro a un m\u00e9todo para hacer el dise\u00f1o m\u00e1s simple, pero desde Java eso se complica un poco, y no es directo (ten\u00e9s que involucrar interfaces funcionales, o alg\u00fan que otro truco). En kotlin, este concepto de la programaci\u00f3n funcional ya viene derecho de f\u00e1brica a simplificarnos nuestras vidas.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Interoperabilidad con Java<\/h4>\n\n\n\n<p>Kotlin naci\u00f3 para ser usado en conjunto con Java. Puedo tener una clase en Kotlin en el medio de todo mi proyecto Java, puedo invocarlo desde y hacia c\u00f3digo Java, y todo sigue andando. Eso me permite ir probando de a poco y migrar mi c\u00f3digo iterativamente. Si no me gusta (cosa muy poco probable, creeme), puedo volver atr\u00e1s muy f\u00e1cilmente. Pr\u00e1cticamente no tiene costo de adopci\u00f3n.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Baja barrera de entrada<\/h4>\n\n\n\n<p>Kotlin naci\u00f3 para desarrolladores Java que quieran tener algunos features extra. No es un \u00abbarajar y dar de nuevo\u00bb. Cualquier desarrollador Java puede beneficiarse con Kotlin en unas pocas horas. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Operaciones funcionales sobre colecciones<\/h4>\n\n\n\n<p>Map, filter, forEach, first, last y otras vienen incluidas \u00abde serie\u00bb. Nada de andar poniendo miLista.stream().map().collect(Collectors.toList()). En Kotlin es un simple miLista.map()<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Named parameters<\/h4>\n\n\n\n<p>Cuando invocamos un m\u00e9todo, podemos mandar solo algunos par\u00e1metros, indicando el nombre de ellos. Olvidate del patr\u00f3n builder, ya no es necesario.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Extension functions<\/h4>\n\n\n\n<p>\u00bfTe pas\u00f3 que alguna vez pensaste \u00abque bueno si esta clase tuviera este m\u00e9todo\u00bb y no la pod\u00edas cambiar porque era de una librer\u00eda, o no estaba bajo tu dominio? Bueno, con Kotlin podemos declarar extension functions a un determinado tipo, para agregarle todas las funciones que querramos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo migrar a Kotlin?<\/h3>\n\n\n\n<p>Si usas Maven el proceso se reduce a copiar y pegar algo en el pom. No me voy a explayar en este punto, est\u00e1 bien conciso en la documentaci\u00f3n oficial:  <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/using-maven.html\">https:\/\/kotlinlang.org\/docs\/reference\/using-maven.html<\/a> <\/p>\n\n\n\n<p> Otra cosa muy importante, es tener un IDE que tenga buena integraci\u00f3n. Como Kotlin fue desarrollado por la gente de Intellij, el soporte con este IDE es excelente. Tambi\u00e9n tiene soporte en Eclipse, aunque personalmente no lo prob\u00e9. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pensamientos finales<\/h3>\n\n\n\n<p>Si est\u00e1s desarrollando con Java, y tenes unos minutos libres, date la oportunidad de probar Kotlin. Si alguna vez probaste Scala, vas a encontrar la mayor parte de los features, a un precio mucho m\u00e1s bajo. <\/p>\n\n\n\n<p>Satisfacci\u00f3n (y diversi\u00f3n) garantizada.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es Kotlin? Es un lenguaje de programaci\u00f3n montado sobre la JVM. Originalmente se empez\u00f3 a usar para desarrollar aplicaciones Android, pero \u00faltimamente fue ganando terreno en aplicaciones backend \u00bfCon Java no te alcanza? Java es un lenguaje de programaci\u00f3n excelente. Pero naci\u00f3 a mediados de los a\u00f1os 90 y pasaron ya muchos a\u00f1os desde\u2026 <span class=\"read-more\"><a href=\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,38],"tags":[36,37],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Migrando de Java a Kotlin - Desarrollo \u00c1gil<\/title>\n<meta name=\"description\" content=\"Motivos para migrar desde Java a Kotlin\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrando de Java a Kotlin - Desarrollo \u00c1gil\" \/>\n<meta property=\"og:description\" content=\"Motivos para migrar desde Java a Kotlin\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo \u00c1gil\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-13T02:33:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-14T01:25:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:site\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emiliano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\",\"url\":\"http:\/\/52.201.184.187\/blog\/\",\"name\":\"Desarrollo \\u00c1gil\",\"description\":\"Sofware por y para humanos\",\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.201.184.187\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage\",\"url\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/\",\"name\":\"Migrando de Java a Kotlin - Desarrollo \\u00c1gil\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\"},\"datePublished\":\"2019-11-13T02:33:23+00:00\",\"dateModified\":\"2019-11-14T01:25:27+00:00\",\"description\":\"Motivos para migrar desde Java a Kotlin\",\"breadcrumb\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/desarrollo-agil.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrando de Java a Kotlin\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage\"},\"author\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"headline\":\"Migrando de Java a Kotlin\",\"datePublished\":\"2019-11-13T02:33:23+00:00\",\"dateModified\":\"2019-11-14T01:25:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage\"},\"wordCount\":727,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"keywords\":[\"kotlin\",\"programaci\\u00f3n funcional\"],\"articleSection\":[\"experiencias\",\"Kotlin\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\",\"name\":\"Emiliano\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\",\"inLanguage\":\"es\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"caption\":\"Emiliano\"},\"logo\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/emilianotebes\/\",\"https:\/\/twitter.com\/emilianotebes\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migrando de Java a Kotlin - Desarrollo \u00c1gil","description":"Motivos para migrar desde Java a Kotlin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/","og_locale":"es_ES","og_type":"article","og_title":"Migrando de Java a Kotlin - Desarrollo \u00c1gil","og_description":"Motivos para migrar desde Java a Kotlin","og_url":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/","og_site_name":"Desarrollo \u00c1gil","article_published_time":"2019-11-13T02:33:23+00:00","article_modified_time":"2019-11-14T01:25:27+00:00","twitter_card":"summary_large_image","twitter_creator":"@emilianotebes","twitter_site":"@emilianotebes","twitter_misc":{"Escrito por":"Emiliano","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.201.184.187\/blog\/#website","url":"http:\/\/52.201.184.187\/blog\/","name":"Desarrollo \u00c1gil","description":"Sofware por y para humanos","publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.201.184.187\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"WebPage","@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage","url":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/","name":"Migrando de Java a Kotlin - Desarrollo \u00c1gil","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/#website"},"datePublished":"2019-11-13T02:33:23+00:00","dateModified":"2019-11-14T01:25:27+00:00","description":"Motivos para migrar desde Java a Kotlin","breadcrumb":{"@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/desarrollo-agil.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Migrando de Java a Kotlin"}]},{"@type":"Article","@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#article","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage"},"author":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"headline":"Migrando de Java a Kotlin","datePublished":"2019-11-13T02:33:23+00:00","dateModified":"2019-11-14T01:25:27+00:00","mainEntityOfPage":{"@id":"http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#webpage"},"wordCount":727,"commentCount":0,"publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"keywords":["kotlin","programaci\u00f3n funcional"],"articleSection":["experiencias","Kotlin"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/52.201.184.187\/blog\/experiencias\/migrando-de-java-a-kotlin\/#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851","name":"Emiliano","image":{"@type":"ImageObject","@id":"http:\/\/52.201.184.187\/blog\/#personlogo","inLanguage":"es","url":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","caption":"Emiliano"},"logo":{"@id":"http:\/\/52.201.184.187\/blog\/#personlogo"},"sameAs":["https:\/\/www.linkedin.com\/in\/emilianotebes\/","https:\/\/twitter.com\/emilianotebes"]}]}},"_links":{"self":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/245"}],"collection":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/comments?post=245"}],"version-history":[{"count":10,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/245\/revisions"}],"predecessor-version":[{"id":256,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/245\/revisions\/256"}],"wp:attachment":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/media?parent=245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/categories?post=245"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/tags?post=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}