Kotlin

O conteúdo desta página se refere à pesquisa sobre Kotlin, realizada pelos alunos Alan Souza Fagundes e Ruth Anne de Carvalho Macedo.


1*YK5PLgDKciZ0J66Ilvb9wQ.png

1. O que é?

O Kotlin é uma linguagem de programação desenvolvida pela JetBrains que tem como objetivo ser executada em diversos ambientes como a JVM (Java Virtual Machine), Android, JavaScript e Nativo. Ela é open source, pois seu código fonte é fornecido de forma aberta à comunidade, e estatisticamente tipada, pois faz verificações e inferências de tipos adicionais em tempo de compilação para evitar erros.
Combinando programação orientada a objetos com características funcionais, o Kotlin se torna uma poderosa linguagem, útil, segura, flexível e pragmática, que oferece vários recursos, como a interoperabilidade, e é capaz de ser aplicada de diferentes formas para resolver diversos tipos de problemas.

É uma linguagem de propósito geral, ou seja, ela pode ser utilizada em vários tipos de desenvolvimento, como o back-end, onde pode ser utilizada em qualquer ambiente que suporte de aplicações Java Web.

Kotlin foi desenvolvida para interoperar com o código Java, isto é, possui capacidade de comunicação e execução de aplicações através da linguagem Java, embora a sua sintaxe não seja compatível com a sintaxe da linguagem Java.

Um dos motivos de destaque dessa linguagem é que ela uma versão melhorada em relação às limitações do Java, afetando de forma positiva o fluxo de desenvolvimento e trabalho dos desenvolvedores.

Kotlin ainda não possui uma grande comunidade de desenvolvedores. Isso significa que não há tanta facilidade em encontrar fontes de aprendizagem e suporte para a linguagem em comunidades ou fóruns online, como o StackOverflow, que fornece cerca de 3.600 postagens relacionadas ao Kotlin e mais de 1.000.000 de postagens relacionadas ao Java.


2. História

O projeto Kotlin foi revelado pela JetBrains em julho de 2011 como uma nova linguagem para JVM, com conceitos baseados nas linguagens Java e Scala, unindo os melhores aspectos de ambas, com o objetivo de suprir características não encontradas em outras linguagens.

Em fevereiro de 2012 o projeto foi liberado como open source, sob licença da Apache, e ganhou maior visibilidade em 2017 quando, durante a conferência Google I/O, o Google anunciou Kotlin como a linguagem oficial do para desenvolvimento Android.


3. Características

Expressividade: sendo uma linguagem pensada para ser flexível e menos verbosa que o Java, o Kotlin oferece uma linguagem clara, estatisticamente tipada e com abstrações de fácil compreensão.

Escalabilidade: Kotlin tem suporte para corrotinas, ou seja, o multiprocessamento de sua rotinas funciona de forma cooperativa no servidor, conceito também conhecido como “multitarefa”, não preemptiva ou cooperativa. Isso possibilita a construção de aplicações otimizadas a atender grande quantidades de processos provindos de diferentes clientes num servidor.

Interoperabilidade: é 100% compatível com todas estruturas baseadas em java, o que permite a utilização das duas linguagens para a mesma aplicação de forma transparente e fácil.

Alta facilidade de migração: por existir total interoperabilidade com a linguagem Java, é possível migrar um sistema Java paulatinamente para o Kotlin sem grandes problemas.

Ferramentas: possui um grande suporte para IDE’s, principalmente para a IntelliJ IDEA, criada pela mesma empresa que o Kotlin, a JetBrains.

Curva de aprendizagem: o Kotlin possui uma baixa curva de aprendizado para desenvolvedores java e oferece um conjunto de tutorias chamado Kotlin Koans para facilitar ainda mais a transição, além de possuir plugins para converter automaticamente código Java em Kotlin.

Compatibilidade: é completamente compatível com o JDK 6 e posteriores, o que possibilita sua execução em sistemas android antigos.

Performance: uma aplicação Kotlin é executada tão rápido quanto aplicações em Java, porém com a utilização de estruturas específicas do Kotlin, como as inline function, é possível rodar mais rapidamente que as aplicações em Java.

Tempo de compilação: a compilação incremental do Kotlin e mais eficiente que a do Java, portanto, a compilação de código Kotlin é geralmente mais rápida que a compilação do código em Java.

Desenvolvimento JavaScript: Kotlin é capaz de produzir código JavaScript limpo e legível para a especificação ECMAScript 5.1, uma das várias especificações do JavaScript, o que facilita a interoperabilidade entre os sistemas, porém oferece este suporte de transformação somente para códigos escritos com biblioteca padrão do Kotlin.

  • Elementos DOM: Kotlin oferece interfaces para interagir facilmente com elementos DOM, ou seja, os elementos HTML e XML do front-end de uma aplicação.
  • WebGL: é possível criar elementos gráficos utilizando a API JavaScript WebGL com Kotlin.

4. Ambientes

Kotlin para desenvolvimento Android
Kotlin é a linguagem oficial para desenvolvimento android. é completamente compatível com o Android. Possui vantagens claras de facilidade de desenvolvimento a respeito a linguagem oficial anterior, o Java.

Kotlin para desenvolvimento Back-End
Kotlin tem suporte para desenvolvimento backend e pode ser hospedado em qualquer ambiente que suporte Aplicações Java com a possibilidade de ser utilizado sozinho ou inteiramente compatível com qualquer aplicação java. Dentro dos frameworks para desenvolvimento web estão os Vert.x, Ktor e até mesmo o Spring, o famoso framework para desenvolvimento Java web.

Kotlin para desenvolvimento JavaScript
O Compilador Kotlin tem a capacidade de transformar código Kotlin em código JavaScript, legível compatível que pode interagir tanto com front-end quanto para o back-end em aplicaçẽos Node.js por exemplo, servidor back-end em JavaScript. Durante o processo de transpilação, nome dado a transformação do código Kotlin para JavaScript, a biblioteca padrão do kotlin também é transformada e adicionada ao projeto.

Kotlin para desenvolvimento Nativo
Kotlin também pode ser compilado para código nativo de diferentes plataformas. Esta parte do projeto foi desenvolvida principalmente para ser possível compilar código kotlin para ambiente onde não seria possível rodar a JVM como o IOS. Atualmente o compilador oferece suporte de compilação para diversas plataformas como Windows (x86_64), Linux, MacOs e IOS.


5. Interações com outros sistemas

Java

Kotlin foi pensado para ser completamente interoperante com o Java. As classes em Java podem ser chamadas normalmente, como demonstrado abaixo:

import java.util.*

fun demo(source: List<Int>) {
    val list = ArrayList<Int>()
    // Laços de repetição Kotlin funcionam em objetos Java
    for (item in source) {
        list.add(item)
    }
    // Convenção de Operadores Java funciona em código Kotlin:
    for (i in 0..source.size - 1) {
        list[i] = source[i]
    }
}

Kotlin também oferece um conjunto de anotações para definir se objetos java podem ser nulos ou não, como @Nullable e @NotNull. Também e possível chamar o código Kotlin de código Java, utilizando as anotações para definir nome e o caminho que será chamado pelo código java, como demonstrado abaixo.

@file:JvmName("DemoUtils")
package demo
class Foo
fun bar() { ... }

// Java
new demo.Foo();
demo.DemoUtils.bar();

JavaScript

É possível chamar o código JavaScript do Kotlin utilizando a função js( ), como no código abaixo:

fun jsTypeOf(o: Any): String {
    return js("typeof o")
}

Ou utilizando modificadores externos:

external fun alert(message: Any?): Unit

external class Node {
    val firstChild: Node
    fun append(child: Node): Node
    fun removeChild(child: Node): Node
    // etc
}

external val window: Window

6. Kotlin x Java

1*bRcmpWqKSW1aRCcN0Z0rsQ.png

Sendo orientado a objetos e executável na JVM, Kotlin possui uma linguagem mais concisa e expressiva que o Java, trazendo conceitos funcionais como expressões lambda. Segue abaixo a comparação entre as sintaxes com um código "Hello world":

Kotlin

fun main(args: Array<String>) {
    print("Hello, world!")
}

Java

public class Main{  
   public static void main(String []args) {
      System.out.println("Hello World");
   }
}

Além das diferenças de sintaxe, o Kotlin possui diversas outras funcionalidades notáveis como:

Funções Lambda:

Implementado no Java 8, e por outras linguagens como C# e JavaScript, Kotlin possui suporte para funções lambda, que tem capacidade de serem armazenadas em variáveis e passadas como parâmetro para execução.

//Kotlin
val sum: (Int, Int) -> Int = { x, y -> x + y }

//Java
(X, y) -> { return x + y; };

Funções estendidas :
Função estendida é a capacidade de adicionar funções às classes sem a necessidade e estendê-la.

fun String.novaFuncao(): String {
    ...
}

Null Safety:

Kotlin define todos tipos não nulos por padrão, ou seja, o compilador não permitirá a utilização de variáveis nulas que não foram especificadas como nullable.

var nullable: String? // É nullable
var normal: String // Não é  nullable

7. Kotlin e Compiladores

Um compilador realiza a tradução de um código fonte escrito em uma linguagem fonte, de programação, de alto nível, e gera um código objeto escrito em uma linguagem objeto, de programação, de alto ou baixo nível, propiciando a posterior execução desse código.

Dentre as principais ferramentas de compilação que suportam o Kotlin, estão incluídas o Maven, Kobalt, Ant e Gradle. Além destas, ele pode ser compilado e recebe suporte para execução de aplicativos através de um compilador de linha de comando.

Sendo também uma linguagem da JVM, o compilador do Kotlin emite bytecode em Java. Portanto, para escrever código para Android, o compilador tem a necessidade de traduzir o código para bytecode que seja compatível com a versão do Java.

Kotlin pode ser compilado para código fonte em JavaScript ou se utiliza da estrutura do compilador LLVM (Low Level Virtual Machine), construído para otimizar o tempo de compilação, quando o código é compilado, e o tempo de execução, quando o código é executado pelo sistema operacional, em diferentes linguagens de programação. O código gerado pela compilação é executado posteriormente.

O Kotlin auxilia na construção de um código limpo e nítido, economizando tempo e evitando bad smells, entendendo o código e pode inferir nos tipos de declaração das variáveis, como os getters, equals e hashcode gerados pelo compilador. Ele evita a tarefa de colocar pontos e vírgulas em cada declaração, economizando tempo e facilitando a produtividade do programador.

A desvantagem de utilizar o compilador do Kotlin é a sua baixa velocidade de compilação, que é muito menor do que a das linguagens concorrentes.


8. Referências

https://kotlinlang.org/docs/reference/faq.html
https://kotlinlang.org/docs/kotlin-docs.pdf
http://www.oracle.com/technetwork/articles/java/breslav-1932170.html
https://www.treinaweb.com.br/blog/kotlin-a-nova-linguagem-oficial-para-desenvolvimento-android/
https://www.onlinejournal.in/IJIRV3I8/041.pdf
https://pt.wikipedia.org/wiki/Low_Level_Virtual_Machine
http://blog.triadworks.com.br/uma-breve-introducao-a-kotlin


"We believe Kotlin is an excellent fit for Android not only because it gives developers what they want, but also because it matches the spirit of Android.” Google Developer Product Group
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License