O que os Engenheiros de Software geralmente pensam da linguagem de programação Kotlin?
Kotlin é't revolucionária (com a possível excepção do seu manuseamento nulo) mas parece uma amálgama muito cuidadosa de algumas das melhores características de outras linguagens. A abordagem do It't é muito pragmática e enfatiza a interoperabilidade com Java e a falta de surpresa.
Syntacticamente parece muito com Scala mas não't tem as capacidades mais avançadas de correspondência de padrões (ainda?) Como Scala it's datilografado estaticamente, permite sobrecarga do operador, enfatiza a imutabilidade e fornece suporte de primeira classe para tipos de valores imutáveis, é bom para escrever DSLs estaticamente cumpridas e tem um sistema do tipo muito robusto.
Algumas decisões erram do lado do pragmatismo e da interoperabilidade. Por exemplo, onde Scala fornece sua própria biblioteca de coleções que funciona excepcionalmente bem e tem imutabilidade padrão, mas requer que você use funções de conversão ou implícitas sempre que quiser interagir com APIs Java Kotlin' a API de coleções do Scala envolve coleções Java regulares, fornecendo uma fachada imutável, mas permitindo a interoperabilidade transparente do Java. Você pode ou não gostar disso. Eu faço.
Kotlin também não't tenho implícitos que eu encontro enquanto conveniente e elegante no Scala não aumentam a legibilidade ou compreensibilidade do código. Kotlin's funções de extensão escopadas atendem a algumas utilizações de implícitos.
Funções de extensão parecem ser a parte boa da meta-programação de Groovy's sem nenhuma das dores consideráveis. As funções de extensão são estaticamente compiladas e despachadas. Elas são estritamente escopadas onde a correção de macacos em metaclasse tem tendência a vazar para fora do contexto onde ela's é necessária com resultados surpreendentes.
Comparando Kotlin para Java as principais coisas que eu acho melhoradas incluem:
- Excelente tipo inferência que remove muita da desordem e redundância do código.
- Flow sensitive typing o que significa que você praticamente nunca precisa lançar.
- First class immutable value types. Doloroso e tedioso em Java a menos que você use Lombok's @Nottação de valores.
- Imutabilidade padrão para coleções.
- Interpolação de String.
A interpolação de string evita criar um novo tipo de string como Groovy's GString, o que significa que não há gotchas estranhas como uma GString terminando como uma chave de mapa que você pode't recuperar usando uma String.
Então lá's Kotlin's a maior inovação (pelo menos eu acho's uma inovação - I'não estou familiarizado com outra linguagem que não seja o Ceilão que o tem) - segurança nula. Kotlin trata os tipos anuláveis como os tipos de opções, mas sem nenhuma das despesas gerais de embrulho e desembrulhamento. Isso evita tantos problemas e é completamente compatível com as APIs Java, então você não tem nenhum dos debates "devemos ou não devemos't adotamos Opcional" que você faz com Java 8.
Again if you're a purist que pode soar errado, mas é'é prático como o inferno. Eu prefiro muito mais do que usar as opções types.
Overall I can't think of another JVM language I'd rather be using. O Java 8 é uma melhoria significativa em relação às versões anteriores e acoplado ao Lombok é tolerável, mas ainda tem uma série de coisas que me frustram. Eu gosto do Scala mas não gosto't gosto de tudo sobre ele. Scala'é uma linguagem tão grande que duas pessoas'as idéias do que conta como idiomático podem ser totalmente diferentes. Se eu pudesse escolher uma linguagem JVM para trabalhar no dia-a-dia agora mesmo seria Kotlin.