Red de conocimiento informático - Material del sitio web - Cómo aprender el lenguaje de programación Kotlin

Cómo aprender el lenguaje de programación Kotlin

¿Por qué Kotlin es excelente?

Este artículo no enumerará las características interesantes del lenguaje al principio como los artículos generales que presentan el contenido.

Comenzaré con información adicional, porque un estudio de 2013 demostró que el ecosistema es más importante que las características del lenguaje cuando los desarrolladores evalúan un lenguaje de programación. Esto está en línea con mi experiencia personal, así que permítanme comenzar con la introducción:

Kotlin se compila en código de bytes JVM o código JavaScript. Los desarrolladores de Java estarán más interesados ​​en él, pero también tendrá cierto atractivo para los desarrolladores que utilizan lenguajes de ejecución con 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 conversión de alta calidad con un solo clic de Java a Kotlin y presta gran atención a la compatibilidad binaria de Java. Puede convertir un proyecto Java existente en un proyecto Kotlin de una sola vez y el proyecto aún se compilará bien, incluso si es un programa complejo con millones de líneas de código.

Obviamente, por lo anterior se puede saber que los programas Kotlin pueden usar todos los marcos y bibliotecas de Java existentes, incluso aquellos marcos avanzados que dependen del procesamiento de anotaciones. La interacción entre ellos es perfecta y no requiere capas de envoltura o adaptación. Kotlin puede integrarse con Maven, Gradle y otros sistemas de compilación.

Es muy accesible, la sintaxis es concisa e intuitiva y puedes aprender a usarlo simplemente leyendo el documento de referencia del idioma en unas pocas horas. Kotlin se parece mucho a Scala pero es más simple y legible.

No sigue una filosofía de programación específica, como programación funcional extrema o estilos de programación orientada a objetos.

No añade sobrecarga de tiempo de ejecución. La biblioteca estándar de Kotlin es muy pequeña y compacta: se centra en ampliar la biblioteca estándar de Java. La gran cantidad de operaciones en línea durante la fase de compilación significa que las funciones estructurales de canalización, como map/filter/reduce, se compilarán en un código similar a un lenguaje imperativo. .

La aparición de frameworks como Anko y Kovenant significa que Kotlin se está volviendo popular entre los desarrolladores de Android. Si se dedica a un trabajo relacionado con Android, creo que pronto conseguirá un buen trabajo. Puede leer este informe del desarrollador de Square, Jake Wharton, para conocer la experiencia de usar Kotlin para el desarrollo de Android.

Kotlin te permite seguir utilizando tus herramientas de productividad. El IDE de IntelliJ tiene soporte muy completo para Kotlin: puede refactorizar, buscar, navegar y usar la función de autocompletar en el código, y el IDE es totalmente compatible con la depuración, las pruebas unitarias, el análisis de rendimiento y otras funciones.

Además de Android, creo que Kotlin también es muy adecuado para escenarios de aplicaciones Java en empresas. Si su trabajo consiste en sumergirse en el código base de una gran empresa durante todo el día, entonces debería consultar Kotlin 1.0 lo antes posible cuando se lance oficialmente:

Tiene un fuerte soporte comercial de -empresas conocidas. JetBrains es una empresa que cuenta con un gran equipo altamente cualificado trabajando en el proyecto, un modelo de negocio estable e incluso utiliza Kotlin en algunos de sus productos estrella, lo que demuestra que Kotlin no será abandonado en el corto plazo.

Usar Kotlin es menos riesgoso: uno o dos miembros del equipo interesados ​​pueden experimentar con Kotlin a pequeña escala en el proyecto. Esto no interrumpirá su proyecto, porque las clases de Kotlin proporcionan API de Java al mundo exterior. Parece un código Java normal.

Debido a que Kotlin pone un fuerte énfasis en la legibilidad de la sintaxis, la revisión del código no será un problema y los miembros del equipo que no están familiarizados con Kotlin aún pueden completar el trabajo.

Kotlin está basado en Java 6, por lo que si te resulta difícil actualizar a una nueva versión de la JVM en tu proyecto, puedes utilizar Kotlin.

A principios de este año presenté Kotlin al equipo de Swiss Re, una compañía de reaseguros suiza que utiliza Java y .NET. Primero, definí una clase Java simple que contiene algunos campos y métodos como toString, equals, hashCode, etc., con aproximadamente 50 líneas de código. Luego lo convertí a código Kotlin (principalmente automáticamente), lo que resultó en solo 1 línea de código, y luego demostré otras funciones para ahorrar tiempo. Lo vieron y se entusiasmaron con Kotlin y lo consideraron un competidor potencial del lenguaje C# en sus proyectos.

Creo que Kotlin está tocando el corazón de los desarrolladores empresariales de Java, por lo que, aunque Kotlin es gratuito, JetBrains podrá ganar mucho dinero aumentando las ventas de versiones comerciales de sus IDE. Esto los incentivará a mejorarlo continuamente en función de los deseos de los usuarios.

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 conceptos de diseño anteriores.

Características

Kotlin se destaca como un nuevo lenguaje de programación porque se centra en el ecosistema: JetBrains entiende que la productividad depende más del ecosistema que de una sintaxis conveniente.

Tan pronto como sea posible, Kotlin todavía tiene muchas características útiles para hacer que su proceso de codificación sea placentero:

Ya hemos mencionado la seguridad nula (opcional), que permite al compilador Las banderas del sistema posibles referencias de puntero nulo. 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 solo necesitan una línea, estructuras simples y JavaBeans se pueden declarar en una sola línea, propiedades reales: getFoo/ se puede generar automáticamente detrás de escena. Se utiliza el método setFoo. para interactuar con Java, y la función puede existir de forma independiente fuera de la clase.

Todas las excepciones están sin marcar. (Nota del traductor: si está interesado, puede leer Teoría y práctica de Java: debate sobre excepciones)

El uso de la palabra clave de clase de datos para crear una clase de datos generará automáticamente métodos comunes, como iguales, hashCode, toString y copy y componenteN (este método se llama cuando se declaran varias variables al mismo tiempo). Esto le ayudará a obtener fácilmente clases inmutables sin utilizar constructores.

Pero si necesita construir una estructura compleja, puede lograrlo de manera concisa con la ayuda de la función de creación de tipos seguros. Si utiliza Google Protocol Buffers para almacenar datos estructurados, puede hacerlo fácilmente con la biblioteca KBuilders.

Admite programación funcional y expresiones lambda sin sobrecarga, y puede realizar mapas, filtros, carpetas y otros procesamientos en colecciones de Java. El sistema de tipos de Kotlin reconoce automáticamente colecciones mutables o inmutables.

La función de función extendida le permite agregar métodos a una clase sin cambiar el código fuente. A primera vista, creo que es para evitar escribir azúcar sintáctico para herramientas de estilo herramienta como FooUtils. Sin embargo, a medida que lo use más profundamente, se dará cuenta de que no solo puede ayudarlo a completar automáticamente los métodos de uso, sino también. ayudarle a integrar las API de Java existentes y crear extensiones potentes con otras funciones de Kotlin.

Se admite la sobrecarga de operadores, pero no hay código ininteligible como Scala o Perl.

Los operadores se asignan a métodos con nombres correspondientes. La anulación de estos métodos cambia el comportamiento de los operadores (incluidas las llamadas a funciones), pero no se pueden definir nuevos operadores. Esto permite que el programa equilibre la funcionalidad con la legibilidad.

Kotlin no tiene macros ni otras formas de redefinir el lenguaje, pero a través de estas características cuidadosamente diseñadas, las bibliotecas de terceros pueden ampliarlo libremente. La extensión oficial de la clase de colección es solo una pequeña prueba. para ello, consulte el ejemplo siguiente.

¿Quieres utilizar fibras, actores y canales estilo Go? Una biblioteca llamada Quasar ha implementado esto para usted.

Utilice Markdown en lugar de HTML para escribir documentación API, por lo que escribir JavaDocs es mucho más cómodo que antes. (Nota del traductor: JetBrains proporciona el generador de documentos correspondiente, Dokka)

Genéricos mejor utilizados. Si no comprendes del todo el significado de super y extends en parámetros genéricos, no te preocupes, no es tu culpa. Los genéricos en Java son realmente confusos, Kotlin resuelve este problema.

La delegación es un patrón de diseño muy conocido y Kotlin lo admite de forma nativa.

El operador == se comporta como se esperaba (Nota del traductor: en pocas palabras, a == b es equivalente a a.equals(b); se agrega un nuevo operador === para determinar el operador ¿Ambos lados apuntan? al mismo objeto)

¿Quiere realizar programación asincrónica de forma rápida y cómoda? ¡ciertamente!

Interpolación de cadenas "Puedes usar este método de escritura para hacer referencia directamente a la variable {this.example} en la creación del carácter"

Los parámetros en la función pueden especificar valores predeterminados, usa variable longitudes y pasar parámetros por nombre de parámetro.

Hay muchos ajustes y optimizaciones. Si hay algunos problemas en Java que le molestan, creo que Kotlin debe haberlo resuelto.

¡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 IDE maduro, que incluye autocompletado de respuesta rápida, compilación en segundo plano en tiempo real e incluso análisis estático en línea.

Pruébalo online

Bien, continuemos con el siguiente contenido

¿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 que no está lo suficientemente maduro, porque Kotlin todavía está en la etapa Beta, lo que significa:

Cada vez que se actualiza una versión, la sintaxis, ABI y el estándar cambio de biblioteca. La buena noticia es que estos cambios suelen ser menores e IntelliJ IDE puede actualizar automáticamente su código, por lo que el proceso no es demasiado problemático.

La herramienta de conversión de Java a Kotlin (J2K) aún no está completa. Ocasionalmente rompe masivamente y borra silenciosamente Lambdas en Java 8 (Revisado: octubre de 2015: la versión M13 de la herramienta de conversión ya maneja correctamente las funciones de Java 8). El código que convierte no siempre es la mejor manera de escribirlo, pero JetBrains se esforzó mucho en esta herramienta y es, con diferencia, la mejor herramienta de conversión de idiomas que he usado. Así que no estoy demasiado preocupado por este tema, este convertidor está mejorando rápidamente y se está volviendo cada vez más maduro.

Encontrarás errores del compilador. Aunque mi programa no es grande, todavía no se puede compilar o incluso produce resultados de compilación incorrectos. Diagnosticar estos problemas no es difícil, pero aún 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 la opción de informarlo a JetBrains. La mayoría de los errores son olvidables, pero aun así pueden resultar molestos.

Ocasionalmente habrá un error que indica que no se puede cargar el documento de solicitud (modificación: después del lanzamiento de la versión M14, este problema se solucionó)

Actualmente, JetBrains está trabajando para mejorar el lanzamiento de la versión 1.0 en lugar de agregar nuevas funciones, esperamos que estos problemas se puedan solucionar.

El segundo problema más importante que encontré es que la interacción con Java a veces es 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. Lógicamente hablando, esta operación debería hacer que el compilador informe un error, como usar una clave del tipo incorrecto para eliminar un elemento. Algunas colecciones en el JDK usan genéricos y los parámetros genéricos de algunos métodos importantes son Objetos, por lo que el compilador no lo solicitará. Habrá advertencias de análisis estático al escribir código Java en IntelliJ IDE, pero actualmente el entorno Kotlin no tiene esta característica. Debido a que Kotlin usa el marco de recopilación de Java sin su propia implementación, esto genera algunos problemas de seguridad de tipos, que he encontrado varias veces.

(Modificación: este problema se resolvió en la versión Beta 1.0 y la falla de seguridad de tipos del marco de recopilación en Java ya no existe en Kotlin. ¡Hola!)

Otra Por ejemplo, la función de seguridad Null de Kotlin no funciona al llamar o usar código Java (se puede compensar con la ayuda de anotaciones). Como principiante en Kotlin, es posible que al principio escribas mucho código que llame a bibliotecas Java, pero debido a los problemas anteriores, no son tan fáciles de usar como crees. Esta situación sólo mejorará a medida que crezca el número de usuarios de Kotlin. JetBrains ha estado intentando que las características de seguridad nulas se reflejen en las interacciones de Java. Esta idea es buena, pero a veces no se considera demasiado bien. (Modificación: a partir de la versión M13, las funciones de seguridad Null de Kotlin se implementarán automáticamente en el código Java con anotaciones como @NotNull @Nullable)

Aunque los problemas anteriores existen, también nos permite ejecutar más fluidamente con la API de Java, creo que la compensación vale la pena, es algo a tener en cuenta durante el desarrollo.

Otros temas a considerar:

La comunidad de Kotlin aún es relativamente pequeña. Aunque actualmente no hay muchas bibliotecas de Kotlin disponibles, con sus excelentes capacidades de interacción con Java, Kotlin puede utilizar bibliotecas de Java maduras existentes.

Si te gusta leer libros para aprender, tendrás que esperar hasta finales de este año para ver el libro escrito por los desarrolladores de Kotlin (Nota del traductor: Kotlin en acción)

Funciones puras Los desarrolladores de estilos de programación pueden sentir que el sistema de tipos carece de algunas de las características avanzadas que se encuentran en Scala o Haskell. Si valora algunas características del sistema de tipos, es posible que Kotlin no sea para usted.

Kotlin también se puede compilar en código Javascript, pero se usa menos, por lo que puedes encontrar más problemas. Esta es la impresión que me dieron en el foro. (Modificación: el enfoque de desarrollo actual 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 1.0)

Actualmente no existe una guía de estilo de programación estándar. , Kotlin Hay una variedad de sintaxis disponibles para elegir. Es probable que el código Kotlin escrito por diferentes personas sea completamente diferente. Esto contrasta marcadamente con el estilo estricto de Go. (Modificación: a partir de la versión 1.0 de Kotlin, se ha eliminado parte de la sintaxis flexible. Por ejemplo, la sobrecarga de operadores y la definición de funciones infijas ahora deben marcarse con las palabras clave operador e infijo respectivamente)

Kotlin La velocidad de compilación es ligeramente Es más lento que Java y la respuesta rápida inteligente de IntelliJ IDE es un poco lenta, pero no es grave y es mucho más rápida que Scala.

(Modificación: la velocidad de compilación ha mejorado significativamente desde Kotlin 1.0)

Kotlin tiene un complemento Eclipse, pero obviamente no es tan fácil de usar como IntelliJ.

Kotlin es más estricto que Java en algunos aspectos. No convierte automáticamente un tipo Int a Long, lo que requiere una conversión explícita por parte del desarrollador. Esto se debe a que Kotlin se centra en la corrección y en tratar de resolver los problemas planteados en el libro "Java Puzzlers". JetBrains afirma que ya están a mitad de camino.

Kotlin está basado en Java 6 y por tanto adolece de sus limitaciones. Kotlin es similar o mejor que C# en muchas áreas, pero carece de algunas características, como ciertos tipos de datos que aún no son compatibles con la plataforma Java.

Por qué deberías empezar a considerar el uso de JVM

En los últimos tiempos, me he encontrado con muchas personas que utilizan lenguajes de scripting dinámicos (JavaScript o Go - Nota del traductor: Go debería ser un lenguaje compilado estático) Empresa de nueva creación.

Cuando trabajaba en Bitcoin Space, trabajar con lenguajes dinámicos era una molestia. No existen tipos seguros en estos idiomas, lo que ha resultado en enormes pérdidas monetarias. Go es menos propenso a errores, pero la experiencia en el nivel básico sigue siendo deficiente, como la falta de buenas herramientas de depuración, mecanismos de GC rápidos, administradores robustos y herramientas de análisis confiables.

Durante los últimos 15 años o más, Java se ha vuelto cada vez más robusto, detallado e incluso sobredimensionado, y estos cambios se deben en gran medida a su reputación. Esto se ejemplifica con el nombre de la clase Java empresarial PathVariableMapMethodArgumentResolver. No pensé en la JVM durante mucho tiempo, estaba convencido de que este entorno no era para mí.

Al final, me vi obligado a volver a Java debido a Android y descubrí que el entorno de desarrollo de Java había cambiado. Aunque XML todavía aparece con una frecuencia anacrónica en diversas situaciones, algunas funciones básicas son muy completas e impresionantes. IntelliJ es un IDE más rápido e inteligente que Eclipse. Maven ha crecido rápidamente desde que salió y tiene muchas características que me hubiera gustado ver agregadas a otros sistemas de compilación/dependencia. Los marcos web más nuevos, como Ninja y Play, aprenden la simplicidad liviana de marcos como Ruby on Rails. Hay toneladas de bibliotecas disponibles. El hardware se vuelve más eficaz y la JVM se vuelve más eficiente, y así sucesivamente.

Lo que realmente no ha cambiado es el lenguaje en sí, el código Java sigue siendo desagradablemente detallado de escribir.

Ahora con Kotlin, no hay necesidad de soportar el dolor de abandonar el ecosistema existente de Java. Puede escribir código que sea más expresivo y, al mismo tiempo, más limpio que los lenguajes de programación, 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 el lenguaje Go porque puede compilar programas independientes, prueba la herramienta javapackager. Kotlin crea paquetes de forma nativa para cada plataforma, lo que significa que puede obtener DEB (paquetes de instalación de Linux) de forma independiente o paquetes comprimidos en Linux sin dependencias de JRE. Por supuesto, después de descomprimirlo, no es un solo archivo sino un solo directorio, que no es difícil de operar desde una perspectiva de implementación.

En resumen: si has ignorado el ecosistema JVM antes porque no te gustaba Java, entonces deberías ingresar a este mundo con el nuevo lenguaje Kotlin.