La irrupción de Kotlin sin duda existe para superar a Java

La aparición de Kotlin sin duda existe para superar a Java. En Google I/O 2017, Google anunció que Kotlin se convirtió en el lenguaje de desarrollo oficial de Android, el trasfondo es que Oracle demandó a Google por infringir el uso de java. Como todos sabemos, el lenguaje de desarrollo multiplataforma de Java se beneficia de las máquinas virtuales. Estoy más preocupado por Kotlin para Android, IOS y la investigación en ciencia de datos (categoría de aprendizaje automático).

Tabla de contenido

Kotlin multiplataforma

Escenarios de uso multiplataforma de Kotlin

Aplicaciones para Android e iOS

Aplicación web de pila completa

Biblioteca multiplataforma

Código común para aplicaciones móviles y web

Cómo funciona la multiplataforma de Kotlin

Compartir código entre diferentes plataformas

empezando

proyecto de muestra

Kotlin para el desarrollo del lado del servidor

Un marco para el desarrollo del lado del servidor usando Kotlin

Implementar la aplicación del lado del servidor de Kotlin

Kotlin para productos del lado del servidor

Kotlin para el desarrollo de Android

Kotlin para el desarrollo de JavaScript

Compilador de infrarrojos de Kotlin/JS

Escenarios de uso de Kotlin/JS

Nativo de Kotlin

¿Por qué elegir Kotlin/Native?

plataforma objetivo

interoperabilidad

Compartir código entre múltiples plataformas

cómo empezar

Tutoriales y Documentación

Kotlin para la ciencia de datos

editor interactivo

Núcleo Jupyter Kotlin

Cuadernos Kotlin en Datalore

Intérprete de Zeppelin Kotlin

biblioteca de clases

biblioteca kotlin

biblioteca java

Kotlin para programación competitiva

Ejemplo simple: problema de accesibilidad

Ejemplo de manipulación funcional: problemas con números largos

Más consejos y trucos

Aprende Kotlin


Kotlin multiplataforma

Kotlin Multiplatform está en etapa Beta . Es casi estable, pero es posible que se requiera un paso de migración en el futuro. Haremos todo lo posible para minimizar los cambios que deben realizar los desarrolladores.

Escenarios de uso multiplataforma de Kotlin

Aplicaciones para Android e iOS

Compartir código entre plataformas móviles es uno de los principales casos de uso de la multiplataforma de Kotlin. Con Kotlin Multi-Platform Mobile, puede crear aplicaciones móviles multiplataforma y compartir código común entre Android e iOS, como lógica comercial, conectividad y más.

Consulte los tutoriales de Kotlin Multi-Platform Mobile Introducción y Creación de aplicaciones multiplataforma con Ktor y SQLDelight , que crean aplicaciones de Android e iOS con módulos que comparten código entre las dos plataformas.

Aplicación web de pila completa

Otro escenario en el que el código compartido puede traer beneficios es una aplicación conectada donde la lógica se puede reutilizar tanto en el servidor como en el lado del cliente que se ejecuta en el navegador. Esto también está cubierto por Kotlin Multiplatform.

Consulte el tutorial Crear una aplicación web de pila completa con Kotlin Multiplatform , donde creará una aplicación conectada que consiste en una parte de servidor, usando Kotlin/JVM y un cliente web, usando Kotlin/JS.

Biblioteca multiplataforma

Kotlin Multiplatform también es útil para los autores de bibliotecas. Puede crear una biblioteca multiplataforma con código común y sus implementaciones específicas de plataforma para JVM, JS y plataformas nativas. Una vez publicada, una biblioteca multiplataforma se puede usar en otros proyectos multiplataforma como dependencia.

Consulte el tutorial Crear y publicar una biblioteca multiplataforma , donde creará una biblioteca multiplataforma, la probará y la publicará en Maven.

Código común para aplicaciones móviles y web

Otro caso popular para usar Kotlin Multiplatform es compartir el mismo código en Android, iOS y aplicaciones web. Reduce la cantidad de lógica empresarial codificada por los desarrolladores frontend y ayuda a implementar productos de manera más eficiente, lo que reduce los esfuerzos de codificación y prueba.

Vea el proyecto de muestra RSS Reader : una aplicación multiplataforma para iOS y Android con clientes web y de escritorio implementados como características experimentales.

Cómo funciona la multiplataforma de Kotlin

 

  • Public Kotlin incluye el idioma, la biblioteca central y las herramientas básicas. El código escrito en Kotlin común funciona en todas partes en todas las plataformas.
  • Con la biblioteca multiplataforma de Kotlin, la lógica multiplataforma se puede reutilizar en código común, así como en código dependiente de la plataforma. El código común puede basarse en un conjunto de bibliotecas que cubren tareas cotidianas como HTTP , serialización y administración de rutinas .
  • Para la interoperabilidad de la plataforma, use la versión específica de la plataforma de Kotlin. Las versiones específicas de la plataforma de Kotlin (Kotlin/JVM, Kotlin/JS, Kotlin/Native) contienen extensiones del lenguaje Kotlin, así como bibliotecas y herramientas específicas de la plataforma.
  • Estas plataformas brindan acceso al código nativo de la plataforma (JVM, JS y Native) y aprovechan toda la funcionalidad nativa.

Compartir código entre diferentes plataformas

Con Kotlin multiplataforma, dedique menos tiempo a escribir y mantener el mismo código para diferentes plataformas ; simplemente compártalo utilizando los mecanismos proporcionados por Kotlin:

empezando

¿Nuevo en Kotlin? Eche un vistazo a Primeros pasos con Kotlin .

proyecto de muestra

Explore la aplicación multiplataforma de muestra para ver cómo funciona la multiplataforma de Kotlin:

Kotlin para el desarrollo del lado del servidor

Kotlin es excelente para desarrollar aplicaciones del lado del servidor. Le permite escribir código conciso y expresivo, al tiempo que mantiene la compatibilidad total con las pilas de tecnología basadas en Java existentes y una curva de aprendizaje fluida:

  • Expresividad : las características innovadoras del lenguaje de Kotlin, como la compatibilidad con constructores con seguridad de tipos y propiedades delegadas , ayudan a crear abstracciones potentes y fáciles de usar.
  • Escalabilidad : la compatibilidad de Kotlin con corrutinas ayuda a crear aplicaciones del lado del servidor que se adaptan a requisitos de hardware modestos para manejar una gran cantidad de clientes.
  • Interoperabilidad : Kotlin es totalmente compatible con todos los marcos basados ​​en Java, por lo que puede usar su pila tecnológica familiar mientras obtiene los beneficios de un lenguaje más moderno.
  • Migración : Kotlin admite la migración gradual de grandes bases de código de Java a Kotlin. Puede comenzar a escribir código nuevo en Kotlin mientras las partes más antiguas del sistema continúan en Java.
  • Herramientas : además de la excelente compatibilidad con IDE, Kotlin también proporciona herramientas específicas del marco (como Spring) para complementos en IntelliJ IDEA Ultimate.
  • Curva de aprendizaje : para los desarrolladores de Java, comenzar a usar Kotlin es fácil. El convertidor automático de Java a Kotlin incluido en el complemento de Kotlin ayuda con ese primer paso. Kotlin Heartprint ofrece una guía de las principales características del lenguaje a través de una serie de ejercicios interactivos.

Un marco para el desarrollo del lado del servidor usando Kotlin

  • Spring aprovecha las características del lenguaje de Kotlin para proporcionar una API más limpia , a partir de la versión 5.0. El generador de proyectos en línea le permite generar rápidamente un nuevo proyecto en Kotlin.

  • Vert.x es un marco para crear aplicaciones web reactivas en JVM, con soporte dedicado para Kotlin , incluida la documentación completa .

  • Ktor es un marco creado por JetBrains para crear aplicaciones web en Kotlin, que utiliza corrutinas para una alta escalabilidad y proporciona una API idiomática y fácil de usar.

  • kotlinx.html es un DSL que se puede usar para crear HTML en aplicaciones web. Se puede utilizar como reemplazo de los sistemas de plantillas tradicionales como JSP y FreeMarker.

  • Micronaut es un marco moderno de pila completa basado en JVM para crear microservicios modulares y fácilmente comprobables y aplicaciones sin servidor. Viene con muchas características útiles incorporadas.

  • http4k es un conjunto de herramientas funcional para aplicaciones HTTP de Kotlin escritas en Kotlin puro con un tamaño reducido. La biblioteca se basa en el documento de Twitter "Tu servidor como función" y modela tanto el servidor HTTP como el cliente como funciones simples de Kotlin que se pueden componer.

  • Javalin es un marco web muy ligero para Kotlin y Java, compatible con WebSockets, HTTP2 y solicitudes asincrónicas.

  • Las opciones disponibles para la persistencia a través del controlador Java correspondiente incluyen el acceso directo a JDBC, JPA y el uso de bases de datos NoSQL. Para JPA, el complemento del compilador kotlin-jpa adapta las clases compiladas de Kotlin a los requisitos del marco.

Implementar la aplicación del lado del servidor de Kotlin

Las aplicaciones de Kotlin se pueden implementar en cualquier host que admita aplicaciones web de Java, incluidos Amazon Web Services, Google Cloud Platform y otros.

Para implementar una aplicación Kotlin en Heroku , puede seguir el tutorial oficial de Heroku .

AWS Labs proporciona un proyecto de muestra que demuestra el uso de Kotlin para escribir funciones de AWS Lambda .

Google Cloud Platform (Google Cloud Platform) proporciona una serie de tutoriales para implementar aplicaciones de Kotlin en GCP, incluidas las aplicaciones de Ktor y App Engine y las aplicaciones de Spring y App Engine . Además, hay un laboratorio de código interactivo para implementar aplicaciones de Kotlin Spring.

Kotlin para productos del lado del servidor

Corda es una plataforma de contabilidad distribuida de código abierto impulsada por los principales bancos y construida completamente en Kotlin.

JetBrains Accounts , el sistema responsable de todo el proceso de venta y validación de licencias de JetBrains, está 100% escrito en Kotlin y ha estado funcionando en producción desde 2015 sin mayores problemas.

Kotlin para el desarrollo de Android

Desde Google I/O 2019, Kotlin ha sido la opción preferida para el desarrollo móvil con Android.

El uso de Kotlin para el desarrollo de Android puede beneficiarse de:

  • Menos código y más legible . Dedique menos tiempo a escribir código que a comprender el código de otras personas.
  • Lenguaje y ambiente maduros . Desde su creación en 2011, Kotlin ha crecido en todo el ecosistema no solo a través del lenguaje sino también a través de herramientas poderosas. Ahora está perfectamente integrado en Android Studio y muchas empresas lo utilizan activamente para desarrollar aplicaciones de Android.
  • Compatibilidad con Kotlin en Android Jetpack y otras bibliotecas . Las extensiones KTX agregan características del lenguaje Kotlin, como rutinas, funciones de extensión, lambdas y parámetros con nombre a las bibliotecas de Android existentes.
  • Interoperabilidad con Java . Puedes usar Kotlin con el lenguaje de programación Java en tus aplicaciones sin migrar todo tu código a Kotlin.
  • Admite el desarrollo multiplataforma . No solo puede usar Kotlin para desarrollar Android, sino que también puede desarrollar aplicaciones iOS , backend y web. Disfrute de los beneficios de compartir código común entre plataformas.
  • Código de seguridad . Menos código y una mejor legibilidad conducen a menos errores. El compilador de Kotlin detecta estos errores restantes, lo que hace que el código sea seguro.
  • Fácil de aprender y usar . Kotlin es muy fácil de aprender, especialmente para los desarrolladores de Java.
  • gran comunidad Kotlin cuenta con un gran apoyo y muchas contribuciones de una comunidad que crece en todo el mundo. Según Google, más del 60% de las 1000 mejores aplicaciones en Play Store usan Kotlin.

Muchas empresas emergentes y de la lista Fortune 500 han utilizado Kotlin para desarrollar aplicaciones de Android; consulte el sitio de Google para desarrolladores de Kotlin para obtener más información .

Si desea comenzar a usar Kotlin para el desarrollo de Android, consulte Primeros pasos con Kotlin en Desarrollo de Android .

Si eres nuevo en Android y quieres aprender a crear aplicaciones en Kotlin, consulta este curso de Udacity .

Kotlin para el desarrollo de JavaScript

Kotlin/JS brinda la capacidad de convertir código Kotlin, la biblioteca estándar de Kotlin y cualquier dependencia compatible con JavaScript. La implementación actual de Kotlin/JS apunta a ES5 .

La forma recomendada de usar Kotlin/JS es a través kotlin.jsdel kotlin.multiplatformcomplemento Gradle. Proporcionan una forma centralizada y conveniente de configurar y controlar proyectos de Kotlin que tienen como objetivo JavaScript. Esto incluye funciones básicas como controlar la agrupación de su aplicación, agregar dependencias de JavaScript directamente desde npm y más. Para obtener una descripción general de las opciones disponibles, consulte la documentación del proyecto Building a Kotlin/JS .

Compilador de infrarrojos de Kotlin/JS

El compilador Kotlin/JS IR tiene muchas mejoras con respecto al antiguo compilador predeterminado. Por ejemplo, reduce el tamaño del ejecutable resultante al eliminar el código muerto y proporciona una interoperabilidad más fluida con el ecosistema de JavaScript y sus herramientas.

El antiguo compilador ha quedado obsoleto desde la versión 1.8.0 de Kotlin.

Al generar archivos de declaración TypeScript ( d.ts) a partir del código Kotlin, el compilador IR facilita la creación de aplicaciones "híbridas" que combinan código TypeScript y Kotlin, y aprovecha las capacidades de uso compartido de código multiplataforma de Kotlin.

Para obtener más información sobre las funciones disponibles en Kotlin/JS IR Compiler y cómo probarlo en sus proyectos, visite la página de documentación del Kotlin/JS IR Compiler y su guía de migración .

Escenarios de uso de Kotlin/JS

Hay muchas formas de usar Kotlin/JS. Aquí hay una lista no exhaustiva de escenarios en los que se puede usar Kotlin/JS.

  • Escribir una aplicación front-end web usando Kotlin/JS

    • Kotlin/JS permite aprovechar potentes API web y de navegador de forma segura . Cree, modifique e interactúe con elementos en el modelo de objetos de documento (DOM), use el código Kotlin para controlar la canvasrepresentación de los componentes WebGL y disfrute del acceso a más funciones compatibles con los navegadores modernos.
    • Escriba aplicaciones React completas y con seguridad de tipos en Kotlin/JS utilizando kotlin-wrappers proporcionados por JetBrains , que proporciona una abstracción conveniente y una integración profunda para React y otros marcos JavaScript populares. También se proporciona soporte para muchas tecnologías similares (por ejemplo , y ). La interoperabilidad con el ecosistema de JavaScript significa que se pueden usar componentes de React y bibliotecas de componentes de terceros.kotlin-wrappersreact-reduxreact-routerstyled-components
    • Utilice los marcos de Kotlin/JS para aprovechar los conceptos relacionados con Kotlin y su expresividad y simplicidad (por ejemplo, kvision o fritz2 ).
  • Escribir aplicaciones del lado del servidor y sin servidor con Kotlin/JS

    • Kotlin/JS proporciona objetivos de Node.js para crear aplicaciones que se ejecutan en un servidor o se ejecutan en una infraestructura sin servidor . Disfrute de todos los beneficios de ejecutar en el tiempo de ejecución de JavaScript, como un inicio más rápido y un uso de memoria más pequeño . Con kotlinx-nodejs , puede tener acceso seguro a las API de Node.js directamente desde el código de Kotlin .
  • Proyectos multiplataforma que usan Kotlin para compartir código con otros objetivos de Kotlin

    • También se puede acceder a toda la funcionalidad de Kotlin/JS cuando se usa multiplatformel complemento Gradle multiplataforma.
    • Si tiene un backend escrito en Kotlin, puede compartir código común , como modelos de datos o validación lógica, con un frontend escrito en Kotlin/JS , lo que le permite escribir y mantener aplicaciones web completas .
    • También es posible compartir la lógica comercial entre la interfaz web y la aplicación móvil (Android e iOS) y evitar la duplicación de funciones comunes, como proporcionar abstracciones en torno a los puntos finales de la API REST, la autenticación de usuarios o los modelos de dominio.
  • Crear bibliotecas para JavaScript y TypeScript

    • Tampoco es necesario escribir una aplicación completa en Kotlin/JS; en cambio, las bibliotecas se pueden generar a partir del código de Kotlin que se puede usar como módulos en cualquier base de código escrita en JavaScript o TypeScript, independientemente de los otros marcos o tecnologías utilizadas. Este enfoque para crear aplicaciones híbridas aprovecha las capacidades que las personas y los equipos ya tienen en el desarrollo web, al mismo tiempo que reduce la duplicación de esfuerzos y facilita la alineación de los objetivos web con las otras plataformas de destino de la aplicación.

Por supuesto, esta no es una lista completa de cómo sacar el máximo provecho de Kotlin/JS, sino solo una selección de escenarios de uso. Pruebe diferentes combinaciones y encuentre la que funcione mejor para su proyecto.

Independientemente del caso de uso específico, los proyectos de Kotlin/JS pueden usar bibliotecas compatibles del ecosistema de Kotlin , así como bibliotecas de terceros de los ecosistemas de JavaScript y TypeScript . Si desea utilizar este último en su código de Kotlin, puede proporcionar sus propios contenedores de tipo seguro, usar contenedores mantenidos por la comunidad o dejar que Dukat genere automáticamente declaraciones de Kotlin. El uso de escritura dinámica específica de Kotlin/JS le permite relajar las restricciones del sistema de tipos de Kotlin y omitir la creación de contenedores de biblioteca detallados, aunque a expensas de la seguridad de tipos.

Kotlin/JS también es compatible con los sistemas de módulos más comunes: UMD, CommonJS y AMD. Ser capaz de producir y consumir módulos significa poder interactuar con el ecosistema de JavaScript de forma estructurada.

Nativo de Kotlin

Kotlin/Native es una técnica para compilar código Kotlin en binarios nativos que pueden ejecutarse sin una máquina virtual. Kotlin/Native incluye un backend de compilador de Kotlin basado en LLVM y una implementación nativa de la biblioteca estándar de Kotlin.

¿Por qué elegir Kotlin/Native?

El principal objetivo de diseño de Kotlin/Native es hacer que Kotlin sea compilable para plataformas donde el uso de una máquina virtual no es deseable o posible (como dispositivos integrados o iOS). Es ideal para situaciones en las que los desarrolladores necesitan producir programas autónomos que no requieren tiempos de ejecución ni máquinas virtuales adicionales.

plataforma objetivo

Kotlin/Native es compatible con las siguientes plataformas:

  • Mac OS
    • iOS, tvOS, reloj OS
  • linux
    • Ventanas (MinGW)
  • NDK de Android

Para compilar las plataformas de destino de Apple macOS, iOS, tvOS y watchOS, debe instalar Xcode y sus herramientas de línea de comandos.

Consulte la lista completa de objetivos admitidos .

interoperabilidad

Kotlin/Native admite la interoperabilidad bidireccional con lenguajes de programación nativos de diferentes sistemas operativos. El compilador puede crear:

  • Ejecutables para múltiples plataformas
  • Biblioteca estática o dinámica y archivos de encabezado en lenguaje C para proyectos C/C++
  • Apple Frameworks para proyectos Swift y Objective-C

Se admite la interoperabilidad con las siguientes bibliotecas existentes directamente en Kotlin/Native:

Es fácil incluir código Kotlin compilado en proyectos existentes escritos en C, C++, Swift, Objective-C y otros lenguajes. También es fácil usar el código nativo existente, las bibliotecas C estáticas o dinámicas, los marcos Swift/Objective-C , los motores gráficos y cualquier otro contenido nativo directamente en Kotlin/Native .

La biblioteca Kotlin/Native ayuda a compartir el código Kotlin entre varios proyectos. POSIX, gzip, OpenGL, Metal, Foundation y muchas otras bibliotecas populares y marcos de Apple están preimportados e incluidos en el paquete del compilador como bibliotecas Kotlin/Native.

Compartir código entre múltiples plataformas

Los proyectos multiplataforma permiten compartir código común de Kotlin en varias plataformas, incluidas: Android, iOS, JVM, JavaScript y nativo. La biblioteca multiplataforma proporciona las API necesarias para el código común de Kotlin y ayuda a desarrollar partes compartidas de un proyecto en Kotlin en un solo lugar y compartirlo con algunas o todas las plataformas de destino.

Puede usar Kotlin Mobile Multi-Platform para crear aplicaciones móviles multiplataforma compartiendo código entre Android e iOS.

cómo empezar

Tutoriales y Documentación

¿Nuevo en Kotlin? Eche un vistazo a la página Primeros pasos con Kotlin .

Documentos recomendados:

Tutorial recomendado:

Kotlin para la ciencia de datos

Desde la construcción de canalizaciones de datos hasta la producción de modelos de aprendizaje automático, Kotlin puede ser una excelente opción para trabajar con datos:

  • Kotlin es conciso, legible y fácil de aprender.
  • La escritura estática y la seguridad nula ayudan a crear un código confiable, fácil de mantener y fácil de solucionar.
  • Como lenguaje JVM, Kotlin ofrece un gran rendimiento y la capacidad de aprovechar todo un ecosistema de bibliotecas Java probadas y comprobadas.

editor interactivo

Los cuadernos como Jupyter Notebook , Datalore y Apache Zeppelin brindan herramientas convenientes para la visualización de datos y la investigación exploratoria. Kotlin se integra con estas herramientas para ayudar a explorar datos, compartir hallazgos con colegas o desarrollar habilidades de ciencia de datos y aprendizaje automático.

Núcleo Jupyter Kotlin

Jupyter Notebook es una aplicación web de código abierto que permite crear y compartir documentos (también llamados "cuadernos") que contienen código, visualizaciones y texto Markdown. Kotlin-jupyter es un proyecto de código abierto que brinda compatibilidad con Kotlin a Jupyter Notebook.

Consulte el repositorio de GitHub del kernel de Kotlin para obtener instrucciones de instalación, documentación y ejemplos.

Cuadernos Kotlin en Datalore

Con Datalore, puede usar Kotlin en el navegador de forma inmediata, sin necesidad de instalación. También puede colaborar en cuadernos de Kotlin en tiempo real, obtener asistencia de codificación inteligente al escribir código y compartir resultados como informes interactivos o estáticos. Consulte un informe de muestra .

Regístrese y use Kotlin con una cuenta gratuita de Datalore Community .

Intérprete de Zeppelin Kotlin

Apache Zeppelin es una popular solución basada en web para el análisis interactivo de datos. Proporciona un potente soporte para el sistema informático de clúster Apache Spark, que es especialmente útil para la ingeniería de datos. A partir de la versión 0.9.0 , Apache Zeppelin tiene un intérprete de Kotlin integrado.

biblioteca de clases

El ecosistema de bibliotecas para tareas relacionadas con datos creado por la comunidad de Kotlin se está expandiendo rápidamente. Aquí hay algunas bibliotecas que pueden ser útiles:

biblioteca kotlin

  • Multik : matrices multidimensionales en Kotlin. La biblioteca proporciona una API segura de tipo y dimensión idiomática de Kotlin para operaciones matemáticas en matrices multidimensionales. Multik ofrece JVM intercambiables y motores informáticos nativos, y una combinación de los dos para un rendimiento óptimo.

  • KotlinDL es una API de aprendizaje profundo de alto nivel escrita en Kotlin e inspirada en Keras. Ofrece API simples para entrenar modelos de aprendizaje profundo desde cero, importar modelos Keras existentes para inferencia y aprovechar el aprendizaje de transferencia para ajustar los modelos preentrenados existentes a sus tareas.

  • Kotlin DataFrame es una biblioteca para el procesamiento de datos estructurados. Su objetivo es reconciliar la tipificación estática de Kotlin con la naturaleza dinámica de los datos mediante el uso de toda la potencia del lenguaje Kotlin y las oportunidades que brinda la ejecución intermitente de código en los cuadernos Jupyter y REPL.

  • Kotlin para Apache Spark agrega una capa faltante de compatibilidad entre Kotlin y Apache Spark. Permite a los desarrolladores de Kotlin usar funciones de lenguaje familiares, como clases de datos y expresiones lambda como expresiones simples entre llaves o referencias a métodos.

  • kotlin-statistics es una biblioteca que proporciona funciones de extensión para estadísticas exploratorias y estadísticas de producción. Admite funciones básicas de lista/secuencia/matriz numérica (de suma skewness), operadores de división (como countBy, simpleRegressionBy), operadores de binning, muestreo discreto de PDF, clasificadores Naive Bayes, agrupamiento, regresión lineal y más.

  • kmath es una biblioteca experimental que se inspiró inicialmente en NumPy pero evolucionó hacia abstracciones más flexibles. Implementa operaciones matemáticas combinadas en estructuras algebraicas sobre tipos Kotlin, define API para estructuras lineales, expresiones, histogramas, operaciones de transmisión, proporciona envoltorios intercambiables sobre bibliotecas Java y Kotlin existentes, incluidas ND4J, Commons Math , Multik y otras .

  • krangl es una biblioteca inspirada en dplyr en R y pandas en Python . Esta biblioteca proporciona funciones para la manipulación de datos utilizando una API de estilo funcional; también incluye funciones para filtrar, transformar, agregar y remodelar datos tabulares.

  • lets-plot es una biblioteca de trazado de datos estadísticos escrita en Kotlin. Lets-Plot es multiplataforma, no solo para JVM, sino también para JS y Python.

  • Kravis es otra biblioteca para visualización de datos tabulares inspirada en ggplot de R.

  • londogard-nlp-toolkit es una biblioteca que proporciona utilidades cuando se trabaja con el procesamiento del lenguaje natural, como incrustaciones de palabras/subpalabras/oraciones, frecuencias de palabras, palabras vacías, lematización y mucho más.

biblioteca java

Debido a que Kotlin brinda soporte de primera clase para la interoperabilidad con Java, también es posible usar bibliotecas de Java en el código de Kotlin para la ciencia de datos. Estos son algunos ejemplos de estas bibliotecas:

  • DeepLearning4J : una biblioteca de aprendizaje profundo de Java

  • ND4J : biblioteca matemática de matriz eficiente para JVM

  • Dex : una herramienta de visualización de datos basada en Java

  • Smile : un sistema completo de aprendizaje automático, procesamiento de lenguaje natural, álgebra lineal, gráficos, interpolación y visualización. Además de la API de Java, Smile también proporciona una API funcional de Kotlin , así como las API de Scala y Clojure.

    • Smile-NLP-kt : reescribe los implícitos de Scala de la parte de procesamiento de lenguaje natural de Smile en la función de extensión Kotlin y el formato de interfaz.
  • Apache Commons Math : una biblioteca común de matemáticas, estadísticas y aprendizaje automático para Java

  • NM Dev : una biblioteca matemática de Java que cubre todas las matemáticas clásicas.

  • OptaPlanner : una utilidad de resolución para problemas de planificación de optimización

  • Gráficos : una biblioteca científica de gráficos JavaFX en desarrollo

  • Apache OpenNLP : un conjunto de herramientas basado en aprendizaje automático para el procesamiento de texto en lenguaje natural

  • CoreNLP : un conjunto de herramientas de procesamiento de lenguaje natural

  • Apache Mahout : un marco distribuido para regresión, agrupación y recomendación

  • Weka : un conjunto de algoritmos de aprendizaje automático para tareas de minería de datos

  • Tablesaw : un marco de datos de Java. Incluye una biblioteca de visualización basada en Plot.ly

Si esta lista no es suficiente, se pueden encontrar más opciones en el repositorio de GitHub de demostraciones de aprendizaje automático de Kotlin de Thomas Nield con exhibiciones.

Kotlin para programación competitiva

Este tutorial es adecuado para programadores competitivos que no han usado Kotlin antes y para desarrolladores de Kotlin que nunca antes han participado en ninguna actividad de programación competitiva. Este tutorial asume que el lector tiene las habilidades de programación adecuadas.

La programación competitiva es un deporte intelectual en el que los competidores escriben programas que resuelven con precisión problemas algorítmicos específicos bajo restricciones estrictas. Los problemas pueden ser tan simples que cualquier desarrollador de software puede resolverlos y obtener la respuesta correcta con muy poco código, o tan complejos que requieren algoritmos especiales, conocimiento de estructuras de datos y mucha práctica. Si bien Kotlin no fue diseñado para la programación competitiva, encaja perfectamente, reduciendo drásticamente la cantidad de código repetitivo que los programadores necesitan escribir y leer, lo que hace posible escribir código casi como un lenguaje de secuencias de comandos dinámico, sin dejar de ser soporte de herramientas y rendimiento para lenguajes escritos estáticamente.

Para saber cómo configurar un entorno de desarrollo de Kotlin, consulte Primeros pasos con Kotlin/JVM . En la programación competitiva, generalmente se crea un solo proyecto, con las respuestas a cada pregunta escritas en un solo archivo fuente.

Ejemplo simple: problema de accesibilidad

Veamos un ejemplo concreto.

Codeforces Round 555 Breakout 3 tuvo lugar el 26 de abril, lo que significa que tiene preguntas para que cualquier desarrollador las pruebe. Puede abrir este enlace para leer la pregunta. El más fácil de este conjunto de problemas es el Problema A: Números alcanzables . Requiere implementar un algoritmo simple como se describe en el enunciado del problema.

Resolveremos esto creando un archivo fuente de Kotlin con un nombre arbitrario. A.ktEstá bien. Primero, debe implementar la función especificada en el enunciado del problema, de la siguiente manera:

Representamos la función f(x) de tal manera que sumamos 1 a x y, si el número resultante termina en al menos un cero, eliminamos el cero.

Kotlin es un lenguaje pragmático y ecléctico que admite estilos de programación imperativo y funcional sin empujar a los desarrolladores hacia ninguno de los estilos. Las funciones se pueden implementar en un estilo funcional f, utilizando características de Kotlin como la recursión de cola :

tailrec fun removeZeroes(x: Int): Int =
    if (x % 10 == 0) removeZeroes(x / 10) else x

fun f(x: Int) = removeZeroes(x + 1)

También es posible escribir fimplementaciones imperativas de funciones, utilizando bucles while tradicionales con variables variables (indicadas por var en Kotlin ):

fun f(x: Int): Int {
    var cur = x + 1
    while (cur % 10 == 0) cur /= 10
    return cur
}

Los tipos son opcionales en muchos lugares de Kotlin debido al uso generalizado de la inferencia de tipos, pero cada declaración aún tiene un tipo estático bien definido conocido en el momento de la compilación.

Todo lo que queda ahora es escribir la función principal que lee la entrada e implementar el resto del algoritmo requerido por la declaración del problema, contando el número de enteros distintos que resultan de la aplicación repetida de la función en el número inicial dado a la entrada estándar n.f

De forma predeterminada, Kotlin se ejecuta en JVM y tiene acceso directo a una biblioteca de colecciones rica y eficiente que contiene colecciones y estructuras de datos comunes, como arreglos de tamaño dinámico ( ), mapas y conjuntos basados ​​en hash ( / ), ArrayListThe map HashMapy HashSetconjunto ( TreeMap/ TreeSet). Usando un conjunto hash entero para realizar un seguimiento del fvalor alcanzado al aplicar la función, una versión imperativa simple de la solución a este problema se puede escribir como:

【Kotlin 1.6.0 y superior】

fun main() {
    var n = readln().toInt() // 读取输入的整数
    val reached = HashSet<Int>() // 可变的哈希 set
    while (reached.add(n)) n = f(n) // 迭代函数 f
    println(reached.size) // 输出答案
}

No hay necesidad de manejar entradas mal formadas en la programación competitiva. El formato de entrada en la programación competitiva siempre se ha especificado con precisión, y la entrada real no puede desviarse de la especificación de entrada en el enunciado del problema. Es por eso que puedes usar la función readln() de Kotlin , que afirma que la cadena de entrada existe y lanza una excepción si no es así. Del mismo modo, la función String.toInt() genera una excepción si la entrada no es un número entero .

【versión temprana】

fun main() {
    var n = readLine()!!.toInt() // 读取输入的整数
    val reached = HashSet<Int>() // 可变的哈希 set 
    while (reached.add(n)) n = f(n) // 迭代函数 f
    println(reached.size) // 输出答案
}

Tenga en cuenta el uso del operador de aserción nulo después de la llamada a la función readLine() . Las funciones de Kotlin están definidas para devolver un tipo anulable y regresar cuando la entrada está completa , lo que obliga explícitamente al desarrollador a manejar la ausencia de entrada. !!readLine() String?null

No hay necesidad de manejar entradas mal formadas en la programación competitiva. En la programación competitiva, el formato de entrada siempre se especifica con precisión y la entrada real no puede desviarse de la especificación de entrada en el enunciado del problema. Esto es lo que hace esencialmente el operador de afirmación nula !!: afirma que la cadena de entrada existe o, de lo contrario, genera una excepción. Lo mismo es cierto para String.toInt() .

Todas las actividades de programación competitiva en línea permiten el uso de código preescrito, por lo que puede definir su propia biblioteca de funciones de herramientas orientadas a la programación competitiva para hacer que el código real de resolución de problemas sea más fácil de leer y escribir. Luego puede usar ese código como plantilla para resolver problemas. Por ejemplo, la siguiente función auxiliar podría definirse para leer la entrada en la programación competitiva:

【Kotlin 1.6.0 y superior】

private fun readStr() = readln() // 一行字符串
private fun readInt() = readStr().toInt() // 单个整数
// 用于在解题中会用到的其他类型的类似声明等

【versión temprana】

private fun readStr() = readLine()!! // 一行字符串
private fun readInt() = readStr().toInt() // 单个整数
// 用于在解题中会用到的其他类型的类似声明等

Tenga en cuenta el uso del modificador visibleprivate (privado) aquí . Si bien el concepto de modificadores de visibilidad no tiene nada que ver con la programación competitiva, le permite colocar varios archivos de solución basados ​​en la misma plantilla en el mismo paquete sin obtener errores sobre declaraciones públicas en conflicto.

Ejemplo de manipulación funcional: problemas con números largos

Para problemas más complejos, la rica biblioteca de operaciones de estilo de función de colección de Kotlin es útil, lo que puede reducir en gran medida el código de la plantilla y escribir el código como una canalización de conversión de datos de transmisión de arriba a abajo y de izquierda a derecha. Por ejemplo , el problema B: el problema de los números largos se implementa con un algoritmo codicioso simple, que se puede escribir en este estilo sin ninguna variable mutable:

【Kotlin 1.6.0 y superior】

fun main() {
    // 读取输入
    val n = readln().toInt()
    val s = readln()
    val fl = readln().split(" ").map { it.toInt() }
    // 定义局部函数 f
    fun f(c: Char) = '0' + fl[c - '1']
    // 贪婪查找第一个与最后一个索引
    val i = s.indexOfFirst { c -> f(c) > c }
        .takeIf { it >= 0 } ?: s.length
    val j = s.withIndex().indexOfFirst { (j, c) -> j > i && f(c) < c }
        .takeIf { it >= 0 } ?: s.length
    // 组合并写出答案
    val ans =
        s.substring(0, i) +
        s.substring(i, j).map { c -> f(c) }.joinToString("") +
        s.substring(j)
    println(ans)
}

【versión temprana】

fun main() {
    // 读取输入
    val n = readLine()!!.toInt()
    val s = readLine()!!
    val fl = readLine()!!.split(" ").map { it.toInt() }
    // 定义局部函数 f
    fun f(c: Char) = '0' + fl[c - '1']
    // 贪婪查找第一个与最后一个索引
    val i = s.indexOfFirst { c -> f(c) > c }
        .takeIf { it >= 0 } ?: s.length
    val j = s.withIndex().indexOfFirst { (j, c) -> j > i && f(c) < c }
        .takeIf { it >= 0 } ?: s.length
    // 组合并写出答案
    val ans =
        s.substring(0, i) +
        s.substring(i, j).map { c -> f(c) }.joinToString("") + 
        s.substring(j)
    println(ans)
}

En este código denso, además de la conversión de la colección, también puede ver características útiles de Kotlin como funciones locales y el operador elvis . A través del operador elvis, puede expresar algo como "si es un número positivo, tome su valor, de lo contrario tomar la longitud" , por supuesto, también es posible usar Kotlin para crear variables variables adicionales y expresar el mismo código en un estilo imperativo.?:.takeIf { it >= 0 } ?: s.length

Para hacer que la lectura de entrada sea más compacta en esta tarea de programación competitiva, se puede usar la siguiente lista de funciones auxiliares de lectura de entrada:

【Kotlin 1.6.0 y superior】

private fun readStr() = readln() // 一行字符串
private fun readInt() = readStr().toInt() // 单个整数
private fun readStrings() = readStr().split(" ") // 字符串列表
private fun readInts() = readStrings().map { it.toInt() } // 整数列表

【versión temprana】

private fun readStr() = readLine()!! // 一行字符串
private fun readInt() = readStr().toInt() // 单个整数
private fun readStrings() = readStr().split(" ") // 字符串列表
private fun readInts() = readStrings().map { it.toInt() } // 整数列表

Con estas funciones auxiliares, la parte del código que lee la entrada se vuelve más simple, línea por línea siguiendo estrictamente la especificación de entrada en el enunciado del problema:

// 读取输入
val n = readInt()
val s = readStr()
val fl = readInts()

Tenga en cuenta que en la programación competitiva se acostumbra dar a las variables nombres más cortos de lo habitual en la práctica de la programación industrial, ya que el código solo debe escribirse una vez y no se admite más tarde. Por supuesto, estos nombres suelen seguir siendo mnemotécnicos: para matrices, índices , números de filas y columnas ade tablas , coordenadas , etc. También es más fácil mantener los nombres de los datos de entrada como se indica en el enunciado del problema. Por supuesto, los problemas más complejos requieren más código para resolverse, lo que lleva a nombres de funciones y variables más largos que se explican por sí mismos.ijrcxy

Más consejos y trucos

La programación competitiva generalmente tiene tales entradas:

La primera línea de entrada contiene dos enteros nyk

En Kotlin, esta línea se puede analizar de manera concisa usando la siguiente declaración que desestructura una lista de enteros:

val (n, k) = readInts()

Mucha gente está acostumbrada a usar las clases de JVM java.util.Scannerpara analizar formatos de entrada menos estructurados. Kotlin ha sido diseñado para interoperar bien con las bibliotecas JVM, por lo que usarlos en Kotlin se siente natural. Tenga en cuenta, sin embargo, java.util.Scannerque es extremadamente lento. De hecho, es tan lento que probablemente no alcanzará el límite típico de 2 segundos al analizar 105 o más enteros con él, lo que puede hacer un simple Kotlin split(" ").map { it.toInt() }.

Escribir resultados en Kotlin suele ser tan simple como llamar a println(...) y usar las plantillas de cadenas de Kotlin . Sin embargo, se debe tener cuidado cuando la salida contiene aproximadamente 105 o más líneas. Llamar tantas veces printlnes demasiado lento, porque esta salida en Kotlin vacía automáticamente el búfer de escritura después de cada línea. Una forma más rápida de escribir varias líneas de una matriz o lista es usar la función joinToString()"\n" con un separador de la siguiente manera:

println(a.joinToString("\n")) // 数组/list 中的每个元素占一行

Aprende Kotlin

Kotlin es fácil de aprender, especialmente para aquellos que ya conocen Java. Para los desarrolladores de software, se puede encontrar una breve introducción a la sintaxis básica de Kotlin directamente en la sección de referencia del sitio web, comenzando con la sintaxis básica .

IDEA tiene un convertidor de Java a Kotlin incorporado . Las personas que están familiarizadas con Java pueden usarlo para aprender la estructura de sintaxis de Kotlin correspondiente, pero no es perfecta y aún necesita familiarizarse con Kotlin y aprender modismos de Kotlin .

Un buen recurso para aprender la sintaxis de Kotlin, así como la API de la biblioteca estándar de Kotlin, es Kotlin Heartprint .

Documentos de referencia:

Acerca de este libro Documentación oficial de Kotlin Versión en chino

Desarrollo de Kotlin Android-Artículos básicos-Conocimiento

Supongo que te gusta

Origin blog.csdn.net/boonya/article/details/130294643
Recomendado
Clasificación