Kotlin no es revolucionario (con la posible excepción de su manejo nulo), pero se siente como una fusión muy cuidadosa de algunas de las mejores características de otros idiomas. Su enfoque es muy pragmático y enfatiza la interoperabilidad con Java y la falta de sorpresa.
Sintácticamente se parece mucho a Scala pero no tiene las capacidades de coincidencia de patrones más avanzadas (¿todavía?) Al igual que Scala, está tipado estáticamente, permite la sobrecarga del operador, enfatiza la inmutabilidad y proporciona soporte de primera clase para tipos de valores inmutables, es bueno para escribir estáticamente cumplió DSL y tiene un sistema de tipo muy robusto.
Algunas decisiones se equivocan del lado del pragmatismo y la interoperabilidad. Por ejemplo, donde Scala proporciona su propia biblioteca de colecciones que funciona excepcionalmente bien y tiene una inmutabilidad predeterminada, pero requiere que use funciones de conversión o implique en cualquier momento que desee interactuar con las API de Java La API de la colección de Kotlin envuelve las colecciones normales de Java, proporcionando una fachada inmutable pero permitiendo interoperabilidad transparente con Java. Puede que te guste o no. Hago.
- ¿Puedo seguir siendo ingeniero de software si me especialicé en matemáticas en una de las 10 mejores universidades públicas?
- ¿Cuáles son algunas buenas áreas de investigación en ingeniería de software?
- ¿Por qué los programadores / ingenieros de software / desarrolladores son vistos como los más bajos / débiles de todas las otras profesiones en una empresa de TI?
- ¿Alguien puede explicarme por qué leo bien el código pero no puedo hacerlo bien?
- Cómo desarrollar habilidades de diseño de sistemas para roles de ingeniero de desarrollo de software senior en compañías de productos
Kotlin tampoco tiene problemas que encuentro, aunque convenientes y elegantes en Scala, no mejoran la legibilidad o la comprensión del código. Las funciones de extensión con alcance de Kotlin se adaptan a algunos usos de implicidades.
Las funciones de extensión se sienten como la buena parte de la metaprogramación de Groovy sin nada del dolor considerable. Las funciones de extensión se compilan y envían estáticamente. Tienen un alcance estricto donde los parches de mono de metaclase tienden a filtrarse fuera del contexto donde se necesita con resultados sorprendentes.
Comparando Kotlin con Java, las principales cosas que encuentro mejoradas incluyen:
- Excelente inferencia de tipos que elimina gran parte del desorden y la redundancia del código.
- Escritura sensible al flujo, lo que significa que prácticamente nunca necesita lanzar.
- Tipos de valores inmutables de primera clase. Doloroso y tedioso en Java a menos que use la anotación
@Value
de Lombok. - Inmutabilidad predeterminada para colecciones.
- Interpolación de cuerdas.
La interpolación de cadenas evita la creación de un nuevo tipo de cadena como GString
de Groovy, GString
que significa que no hay GString
extrañas como una GString
termina como una clave de mapa que luego no puede recuperar usando una String
.
Luego está la mayor innovación de Kotlin (al menos creo que es una innovación, no estoy familiarizado con otro idioma que no sea Ceilán que lo tenga): seguridad nula. Kotlin trata los tipos anulables como tipos de opciones pero sin ninguna sobrecarga en el envoltorio y desenvolvimiento. Esto evita tantos problemas y es completamente compatible con las API de Java, por lo que no tiene ninguno de los debates “deberíamos o no deberíamos adoptar” Optional
que tiene con Java 8.
Nuevamente, si eres un purista, eso puede sonar mal pero es práctico como el infierno. Prefiero usar tipos de opciones.
En general, no puedo pensar en otro lenguaje JVM que preferiría usar. Java 8 es una mejora significativa con respecto a las versiones anteriores y, junto con Lombok, es tolerable, pero aún tiene una serie de cosas que me frustran. Me gusta Scala pero no me gusta todo. Scala es un lenguaje tan grande que las ideas de dos personas sobre lo que cuenta como idiomático pueden ser totalmente diferentes. Si pudiera elegir un lenguaje JVM para trabajar día a día en este momento sería Kotlin.