¿Es el lenguaje Kotlin una encapsulación secundaria de Java?
Este artículo no comenzará con una lista de características interesantes del lenguaje como una introducción general al lenguaje; hablaremos de ellas más adelante.
Primero, cubriré información adicional, porque un estudio de 2013 mostró que el ecosistema es más importante que las características del lenguaje cuando los desarrolladores evalúan los lenguajes de programación. Esto coincide con mi experiencia personal, así que déjame comenzar:
Kotlin compila en código de bytes JVM o código JavaScript. Es de mayor interés para los desarrolladores de Java, pero también es atractivo para los desarrolladores que utilizan lenguajes de ejecución de recolección de basura como Scala, Go, Python, Ruby y JavaScript.
Kotlin proviene de la industria, no de la academia. Resuelve problemas reales que enfrentan los desarrolladores hoy en día. Por ejemplo, su sistema de tipos le ayuda a evitar excepciones de puntero nulo.
¡Cambiar a Kotlin no cuesta nada! Es de código abierto, pero ese no es el punto, el punto es que proporciona una herramienta de alta calidad con un solo clic para convertir de Java a Kotlin y presta mucha atención a la compatibilidad binaria de Java. Puede convertir un proyecto Java existente en un proyecto Kotlin de una sola vez, e incluso si el proyecto es un programa complejo con millones de líneas de código, se compilará sin problemas.
Obviamente, como mencionaste anteriormente, los programas Kotlin pueden usar todos los marcos y bibliotecas de Java existentes, incluso los marcos avanzados que dependen del procesamiento de anotaciones. La interacción entre ellos es perfecta y no requiere envoltorios ni capas de adaptación, y Kotlin se puede integrar con Maven, Gradle y otros sistemas de compilación.
Kotlin es muy accesible, su sintaxis es tan compacta e intuitiva que puedes aprender a utilizarlo en unas horas con solo leer la referencia del lenguaje.
No sigue una filosofía de programación específica, como estilos funcionales extremos u orientado a objetos.
No aumenta la sobrecarga del tiempo de ejecución y la biblioteca estándar de Kotlin es muy pequeña y compacta: se centra en ampliar la biblioteca estándar de Java y la gran cantidad de operaciones en línea en tiempo de compilación significa que cosas como mapear/filtrar /reduce Las funciones estructurales de Pipeline se pueden compilar en un código que se asemeja a un lenguaje imperativo.
La aparición de frameworks como Anko y Kovenant significa que Kotlin está empezando a hacerse popular entre los desarrolladores de Android. Si estás desarrollando algo relacionado con Android, estoy seguro de que pronto tendrás un buen trabajo. Puede leer el informe del desarrollador de Square, JakeWharton, sobre cómo es desarrollar para Android con Kotlin.
Kotlin le permite continuar usando sus herramientas de productividad, y el IDE de IntelliJ proporciona un excelente soporte para Kotlin: puede refactorizar, buscar, navegar y usar el autocompletado, y el IDE tiene un excelente soporte para depuración, pruebas unitarias y rendimiento. Se proporciona soporte integral para análisis y más.
Aparte de Android, creo que Kotlin encaja perfectamente con Java en la empresa. Si su trabajo implica sumergirse en el código base de una gran empresa, esto es lo que debe saber tan pronto como se lance oficialmente Kotlin 1.0:
Cuenta con un fuerte apoyo comercial de una empresa reconocida. JetBrains es una empresa con un equipo de proyecto grande y capaz y un modelo de negocio estable, e incluso utiliza Kotlin en algunos de sus productos estrella, lo que demuestra que Kotlin no desaparecerá pronto.
El riesgo de usar Kotlin es bajo: puedes probarlo a pequeña escala con uno o dos miembros del equipo interesados y no interrumpirá tu proyecto porque las clases de Kotlin están disponibles para las API públicas de Java. que parecen código Java normal.
Debido a que Kotlin pone un fuerte énfasis en la legibilidad de la sintaxis, las revisiones de código no son un problema y los miembros del equipo que no están familiarizados con Kotlin aún pueden hacer el trabajo.
Kotlin está basado en Java 6, por lo que si tienes problemas para actualizar a una versión más reciente de JVM para tu proyecto, puedes usar Kotlin.
A principios de este año, presenté Kotlin a un equipo de Swiss Re, una compañía de seguros de Swiss Re que utiliza Java y .NET. Primero, definí una clase Java simple con algunos campos y métodos como toString, equals, hashCode, etc. Hay alrededor de 50 líneas de código. Luego lo convertí a código Kotlin (casi automáticamente) con solo una línea de código y demostré otras funciones para ahorrar tiempo. Les apasiona Kotlin y lo ven como un competidor potencial de C# en sus proyectos.
Creo que Kotlin es exactamente lo que quieren los desarrolladores empresariales de Java, por lo que, aunque Kotlin es gratuito, JetBrains aún puede ganar mucho dinero aumentando las ventas de versiones comerciales del IDE. Esto los motivará a mejorar continuamente el IDE en función de las necesidades del usuario.
Por el contrario, los desarrolladores de lenguajes financiados por productos no relacionados rara vez realizan ajustes cuando las necesidades del usuario entran en conflicto con ideas de diseño anteriores.
Características
Como nuevo lenguaje de programación, lo que destaca de Kotlin es su enfoque en el ecosistema: JetBrains entiende que la productividad depende más del ecosistema que de la sintaxis de conveniencia.
Kotlin pronto proporcionará muchas características útiles para hacer que la codificación sea fácil y agradable:
Ya hemos mencionado la seguridad nula (opcional), que permite al compilador marcar sistemáticamente un posible puntero nulo. referencia. A diferencia de algunos lenguajes, no hay ninguna clase de opción involucrada, por lo que no hay gastos generales y hay otras características del lenguaje para garantizar que no sea un inconveniente.
Sintaxis refinada: inferencia de tipos ubicua, funciones simples de una sola línea, declaración de una sola línea de estructuras simples y JavaBeans, propiedades reales: los métodos getFoo/setFoo se pueden generar automáticamente detrás de escena para su integración con Java Interactive. Las funciones pueden existir independientemente de las clases.
No se comprueban las excepciones.
La creación de una clase de datos utilizando la palabra clave data class genera automáticamente métodos comunes como igual, hashCode, toString y copy y componenteN (estos métodos se llaman cuando se declaran múltiples variables al mismo tiempo). Esto facilita la obtención de clases inmutables sin utilizar constructores.
Pero si necesita construir estructuras complejas, puede hacerlo de manera concisa con la ayuda de constructores con seguridad de tipos. Si utiliza Google Protocol Buffers para almacenar datos estructurados, esta funcionalidad es fácil de implementar utilizando la biblioteca de compilación KB.
Admite programación funcional y expresiones lambda sin sobrecarga, y puede realizar operaciones de mapas, filtros, carpetas y otras en colecciones de Java. El sistema de tipos de Kotlin puede reconocer automáticamente colecciones mutables e inmutables.
La característica de función de extensión le permite agregar métodos a una clase sin cambiar el código fuente. A primera vista, podría pensar que esta es una forma de evitar escribir azúcar sintáctico para kits de herramientas como FooUtils, pero cuando lo use, encontrará que no solo simplifica el uso de métodos mediante el autocompletado, sino que también lo ayuda a integrarse con Java existente. API y cree extensiones potentes utilizando otras funciones de Kotlin.
Se admite la sobrecarga de operadores sin que el código sea ilegible como Scala o Perl. Los operadores se asignan a métodos con nombres correspondientes. La sobrecarga de estos métodos cambiará el comportamiento del operador (incluidas las llamadas a funciones), pero no definirá nuevos operadores. Esto permite que el programa logre un equilibrio entre funcionalidad y legibilidad.
Kotlin no tiene macros ni ninguna otra forma de redefinir el lenguaje, pero tiene características bien diseñadas que permiten que las bibliotecas de terceros se extiendan libremente, y la extensión oficial de la clase de colección es solo una Una muestra de las funciones futuras, puede ver esto en el siguiente ejemplo.
¿Quieres utilizar los canales Fibers, Actors y Go-style? Una biblioteca llamada Quasar puede satisfacer sus necesidades.
Escribir JavaDocs es más fácil que nunca usando Markdown en lugar de HTML para documentar su API. (Nota: JetBrains proporciona un generador de documentación Dokka)
Mejor generalización. No se preocupe si no comprende completamente el significado de super y se extiende en parámetros genéricos, no es culpa suya; los genéricos de Java son confusos y Kotlin resuelve ese problema.
Proxy es un patrón de diseño muy conocido y Kotlin admite proxies de forma nativa.
El operador === se comporta como se esperaba (en resumen, a == b es equivalente a a.equals(b); el operador === se agregó para determinar si ambos lados del operador apuntan a mismo objeto)
¿Quieres programación asincrónica rápida y fácilmente? ¡seguro!
La interpolación de cadenas "se puede escribir de tal manera que se haga referencia directa a la variable {this.example} al crear el carácter"
Los parámetros de la función pueden especificar el valor predeterminado , longitud variable o Pasado por nombre.
Hay más ajustes y optimizaciones por venir. Si hay algo que te molesta en Java, creo que Kotlin lo ha solucionado.
¡Pruébalo ahora!
Al igual que muchos lenguajes de programación modernos, Kotlin se puede utilizar a través de un navegador web. Pero a diferencia de otros lenguajes, el sitio web experimental de Kotlin proporciona un entorno de desarrollo integrado maduro, que incluye autocompletado responsivo, compilación backend en tiempo real e incluso análisis estático en línea.
Prueba en línea
Bien, sigamos discutiendo el siguiente paso
¿Cuáles son los problemas actuales?
Nada en la vida es perfecto, incluido Kotlin. Estos son algunos de los problemas que encontré al probar el idioma.
El mayor problema es la inmadurez, porque Kotlin todavía está en beta, lo que significa:
La sintaxis, ABI y la biblioteca estándar cambiarán en cada versión. Afortunadamente, estos cambios suelen ser menores y puedes usar IntelliJ IDE para actualizar automáticamente tu código, por lo que no será una gran molestia.
La herramienta de conversión de Java a Kotlin (J2K) aún no está completa. En Java 8, ocasionalmente rompe masivamente y borra silenciosamente Lambdas (revisado en octubre de 2015: la versión M13 de la herramienta de conversión ahora maneja correctamente la funcionalidad de Java 8). El código que convierte no siempre es el mejor escrito, pero JetBrains puso mucho esfuerzo en esta herramienta y ya es la mejor herramienta de conversión de idiomas que he usado. Así que no estoy demasiado preocupado por esto, este convertidor está mejorando rápidamente y se está volviendo más maduro.
Encontrarás errores del compilador. Aunque mi programa no es grande, de vez en cuando se producen fallas de compilación o incluso errores de compilación. Diagnosticar estos problemas no es difícil, pero en última instancia afecta la experiencia de desarrollo.
Te encontrarás con un error interno del IDE. Cuando se produce este error, IntelliJ IDE abrirá una ventana flotante con una opción para informar el error a JetBrains. La mayoría de los errores se ignoran, pero aun así pueden resultar molestos.
Ocasionalmente habrá un error que impide que se cargue el documento emergente (editar: este problema se ha solucionado desde el lanzamiento de la versión M14)
Se espera que estos problemas se solucionen. y ahora JetBrains está trabajando para mejorar su versión 1.0, en lugar de agregar nuevas funciones.
El segundo gran problema que encontré fue que la interacción con Java a veces era limitada.
Un error típico es que el sistema de tipos de Java no puede impedir que cambies el tipo de clave en el mapa. Esto provocará errores del compilador, como eliminar elementos con el tipo de clave incorrecto. Algunas colecciones en el JDK usan genéricos y algunos de sus métodos importantes tienen parámetros genéricos de objeto, por lo que el compilador no solicita estos parámetros. IntelliJ IDE emite advertencias de análisis estático al escribir código Java, pero el entorno Kotlin aún no tiene esta característica. Dado que Kotlin utiliza el marco de colecciones de Java sin su propia implementación, esto genera algunos problemas de seguridad de tipos, que he encontrado muchas veces.
(Editar: este problema se resolvió en la versión Beta 1.0 y la falla de seguridad de tipos de Java Collections Framework ya no existe en Kotlin. (¡Yippee!)
Otro Un ejemplo es que la función de seguridad Null de Kotlin no funciona al llamar o usar código Java (esto se puede compensar con anotaciones). Como principiante en Kotlin, es posible que escribas mucho código llamando a bibliotecas Java al principio, pero debido a lo anterior. El problema es que estos códigos no funcionan tan bien como se esperaba. Esta situación solo mejorará cuando aumente la cantidad de usuarios de Kotlin. JetBrains ha estado tratando de proporcionar una funcionalidad segura para nulos para las interacciones de Java, lo cual es una buena idea, pero a veces se considera. Mala idea (Modificado: a partir de la versión M13, las funciones de seguridad Null de Kotlin se implementarán automáticamente en el código Java a través de anotaciones como @NotNull @Nullable)
Aunque estos problemas existen, también nos permiten. Uso más fluido de la API de Java, lo cual creo que es una compensación que vale la pena, pero es algo a tener en cuenta durante el desarrollo
Otros aspectos a considerar:
La comunidad Kotlin permanece. Relativamente pequeño. No hay muchas bibliotecas de Kotlin disponibles, pero con sus excelentes capacidades de interacción con Java, Kotlin puede usar bibliotecas de Java maduras existentes.
Si te gusta aprender leyendo, no es necesario. No espere hasta finales de este año para ver un libro escrito por un desarrollador de Kotlin.
Los desarrolladores puramente funcionales pueden encontrar que el sistema de tipos carece de algunas de las características avanzadas de Scala o Haskell si eso es lo que valora. características del sistema de tipos, entonces Kotlin puede no ser adecuado para usted
Kotlin también puede compilar en código Javascript, pero no se usa comúnmente, por lo que puede haber más preguntas, esto es lo que obtuve del forum Impression. (Editor: actualmente, el enfoque de desarrollo de Kotlin es completar la versión 1.0 y hacer que se ejecute de manera estable en la JVM; los problemas de Javascript se resolverán después del lanzamiento de la versión 1.0)
Hay. Actualmente no hay una guía de estilo de programación estándar, Kotlin actualmente proporciona una variedad de sintaxis para que usted elija. Diferentes personas escriben código Kotlin, lo que contrasta marcadamente con el estilo estricto de Go (Modificación: a partir de la versión Kotlin 1.0, hay algunas sintaxis flexibles. (Eliminar, por ejemplo, los operadores y las palabras clave subordinadas deben marcarse respectivamente al sobrecargar operadores y definir funciones subordinadas)
La velocidad de compilación de Kotlin es ligeramente más lenta que la de Java, y la velocidad de respuesta inteligente de IntelliJ IDE también es ligeramente menor. Más lento. Esto no es gran cosa y es mucho más rápido que Scala. (Editar: Kotlin se compila significativamente más rápido desde la versión 1.0)
Kotlin tiene un complemento de Eclipse, pero obviamente no es tan bueno como el complemento de IntelliJ.
Kotlin tiene un complemento de Eclipse, pero obviamente no es tan bueno como el complemento de IntelliJ.
Kotlin es más estricto que Java en algunos aspectos. No convierte automáticamente un Int en Long, pero requiere que el desarrollador muestre el proceso de conversión.
Esto se debe a que Kotlin se centra en la corrección e intenta resolver los problemas planteados en el libro Java Puzzlers, que JetBrains afirma que están a la mitad.
Kotlin está basado en Java 6 y por tanto tiene sus limitaciones. Kotlin es similar o mejor que C# en muchos aspectos, pero carece de ciertas características, como ciertos tipos de datos que aún no son compatibles con la plataforma Java.
Por qué deberías empezar a pensar en la JVM
Últimamente, me he encontrado con muchas empresas emergentes que utilizan lenguajes de secuencias de comandos dinámicos (JavaScript o Go; se supone que Go es un lenguaje compilado estáticamente).
Cuando trabajaba en Bitcoin Space, trabajar con lenguajes dinámicos era un dolor de cabeza.
Go tiene tasas de error más bajas, pero aún proporciona una mala experiencia en un nivel básico, ya que carece de buenas herramientas de depuración, mecanismos de GC rápidos, administradores sólidos y herramientas de creación de perfiles confiables.
Durante los últimos 15 años aproximadamente, Java se ha vuelto más robusto, más detallado e incluso muestra signos de haber sido diseñado en exceso, cambios que se derivan en gran parte de su reputación. El nombre de clase empresarial Java PathVariableMapMethodArgumentResolver es un buen ejemplo. Durante mucho tiempo no consideré la JVM porque estaba convencido de que este entorno no era para mí.
Finalmente, Android me obligó a regresar a Java y descubrí que el entorno de desarrollo de Java había cambiado. Si bien XML sigue siendo un anacronismo y una característica recurrente, algunas de las funciones subyacentes son bastante impresionantes. IntelliJ es un IDE más rápido e inteligente que Eclipse, y Maven ha crecido rápidamente desde que apareció por primera vez, con muchas características que me gustaría ver agregadas a otros sistemas de compilación/dependencia. Los marcos web más nuevos como Ninja y Play toman la simplicidad liviana de marcos como Ruby on Rails. Hay toneladas de bibliotecas disponibles. Entre otros cambios, el hardware se ha vuelto más potente y las JVM se han vuelto más eficientes.
Lo que realmente no ha cambiado es el lenguaje en sí; el código Java todavía requiere un tiempo incómodamente largo para escribir.
Ahora, con Kotlin, ya no tendrás que soportar el dolor de abandonar tu ecosistema Java existente. Puede escribir código más expresivo de una forma más limpia que los lenguajes de scripting, con mejor rendimiento y menos errores.
Si te gusta JavaScript, prueba el backend JS de Kotlin o ejecuta tu código existente en el motor Nashorn JS.
Finalmente, si te gusta Go por su capacidad para compilar programas independientes, prueba la herramienta javapackager. Kotlin crea paquetes nativos para cada plataforma, lo que significa que en Linux puede obtener un DEB (instalador de Linux) o un archivo zip sin depender de un JRE. Por supuesto, después de descomprimirlo no es un solo archivo, sino un solo directorio, lo cual no es tan difícil de manejar desde una perspectiva de implementación.
En resumen: si has ignorado el ecosistema JVM porque tienes problemas para usar Java, entonces deberías ingresar al mundo con un nuevo lenguaje como Kotlin.