Introdução a kotlin

Muitos devem estar a espera que eu comece este artigo com a famosa frase “10 motivos porquê você deve migrar de java para kotlin”, sinto muito decepcionar, mas eu não acredito que kotlin seja um substituto do java mas sim uma alternativa para desenvolvedores JVM (como o Scala ou groovy), verdade que o kotlin já trás consigo integrado as boas praticas de programação, e trás consigo muitas funcionalidades que não encontramos ou difíceis de encontrar no java, você devia com certeza dar uma olhada no kotlin que não vai se arrepender.


O que é Kotlin ?

Kotlin é a nova linguagem de programação que tem dado de falar na actualidade, foi criado pela jetbrains e teve 6 anos de desenvolvimento (2010–2016), pelos anos de desenvolvimento pode se perceber que não é uma linguagem que surge como uma brincadeira, mas sim é algo estável e sério. O principal motivo da sua criação foi porque a jetbrains precisava de uma linguagem de programação que facilitasse no seu trabalho (desenvolvimento de ferramentas de programação). É uma linguagem estática, funcional, pragmática, concisa, segura e 100% interoperável com Java.

JetBrains (anteriormente IntelliJ) é uma empresa de desenvolvimento de software cujas ferramentas são direcionadas para desenvolvedores de software e gestores de projeto.
A partir de 2017, a empresa tem cerca de 700 funcionários em seus seis escritórios em Praga, São Petersburgo, Moscou, Munique, Boston e Novosibirsk.
A empresa oferece uma extensa família de ambientes de desenvolvimento integrado (IDEs) para as linguagens de programação Java, Ruby, Python, PHP, SQL, Objective-C, C ++, C # e JavaScript. A empresa também está desenvolvendo o IDE para Go (GoLand), que actualmente é oferecido como beta ao público para fins de teste.
Em 2011, a empresa entrou em uma nova área ao introduzir o Kotlin, uma linguagem de programação que é executada em uma máquina virtual Java (JVM).

Linguagem Estática (Statically typed)

Assim como Java, Kotlin é uma linguagem de programação tipicamente estática. Isso significa que o tipo de cada expressão no código é conhecida no tempo de compilação, e o compilador pode validar se os métodos e os campos que você está a tentar aceder existem nos objetos criados.

Em contraste as linguagens de programação dinâmicas (Groovy e JRuby), elas permitem definir variáveis ​​e funções que podem armazenar ou retornar dados de qualquer tipo e resolver o método e as referências de campo em tempo de execução. Isso permite um código mais curto e uma maior flexibilidade na criação de estruturas de dados. Mas a desvantagem é que problemas como nomes com erros ortográficos não podem ser detectados ​​durante a compilação.

Por outro lado, em contraste com o Java, Kotlin não exige que você especifique o tipo de cada variável explicitamente no seu código-fonte. Em muitos casos, o tipo de variável pode ser determinado automaticamente a partir do contexto, permitindo que você omita a declaração de tipo.

var x = 20

no exemplo acima não se especificou o tipo de dados mas o compilador pode inferir o tipo da variável através do dado que ela recebe, nesse caso como se está a receber um numero inteiro a variável será do tipo Int, isso não quer dizer que o tipo de dados pode mudar durante a execução do programa.

Linguagem Funcional

Como um desenvolvedor Java, você está familiarizado com os princípios da programação orientada a objetos, mas a programação funcional pode ser nova para você. Os conceitos-chave da programação funcional são os seguintes:

Funções de Topo (Top Level Functions) — funções não precisam de classes para existir, isto é, você pode ter um ficheiro com apenas funções e sem nenhuma classe associada. Por incrível que pareça, sempre existe num projecto aquelas funções (ou métodos falando de java) que não se encaixa em nenhuma classe e dai somos obrigados a criar classes como (OperacoesUtil). Funções podem ser armazenadas em variáveis, uma função pode receber outra função como parâmetro ou ate mesmo retornar uma função.

Imutabilidade — a principio os dados passados por parâmetro numa função não devem mudar por questões de segurança;

Quais os benefícios que você pode obter ao escrever o código no estilo funcional? Primeiro, concisão. O código funcional pode ser mais elegante e sucinto em comparação com sua contrapartida imperativa, pois usar funções como valores oferece muito mais poder de abstração, o que permite evitar a duplicação em seu código.

A seguir vem a assinatura padrão de uma função:

fun nomeDaFunção(nomeDoParametro: TipoDoParametro): TipoDeRetorno

pode-se observar alguns pontos da assinatura acima:

1. A declaração de uma função começa com a palavra reservada fun;

2. Primeiro especificamos o nome da função e só depôs o tipo retornado (ao contrario do java)

3. Para os parâmetros também primeiro especificamos o tipo de parâmetro e só depôs o tipo do parâmetro

4. A separação entre o nome e o tipo é feito através de dois pontos (:)

De um modo geral, o estilo funcional pode ser usado com qualquer linguagem de programação, incluindo o Java, e essa prática é vista como um bom estilo de programação. Mas nem todas as línguas fornecem o suporte sintático e bibliotecário necessário para usá-lo sem esforço
Existirá na série dos artigos um artigo dedicado só para funções

Linguagem pragmática

Kotlin é uma linguagem prática projetada para resolver problemas do mundo real. O seu design baseia-se em muitos anos de experiência na indústria, criando sistemas de grande escala e suas características são escolhidas para abordar casos de uso encontrados por muitos desenvolvedores de software. Além disso, os desenvolvedores dentro da JetBrains e na comunidade têm usado versões iniciais do Kotlin há vários anos e seus comentários moldaram a versão lançada da linguagem.

Além disso, Kotlin não faz uso de nenhum estilo ou paradigma de programação específico. À medida que você começa a estudar a linguagem, você pode usar o estilo e as técnicas que você conhece de sua experiência em Java. Mais tarde, você descobrirá as características mais poderosas da Kotlin e aprenderá a aplicá-las em seu próprio código, para torná-lo mais conciso e idiomático

Linguagem Concisa

É de conhecimento comum que os desenvolvedores passem mais tempo a ler o código existente do que escrever um novo código. Imagine que você é um parto de uma equipe que desenvolve um grande projeto, e você precisa adicionar um novo recurso ou corrigir um bug. Quais são os primeiros passos? Você procura a seção exata de código que você precisa mudar, e somente então você implementa uma correção. Você lê muitos códigos para descobrir o que você tem que fazer. Este código pode ter sido escrito recentemente por seus colegas ou por alguém que não trabalha mais no projeto ou por você, mas há muito tempo. Somente depois de entender o código circundante você pode fazer as modificações necessárias.

Quanto mais simples e conciso for o código, mais rápido você entenderá o que está acontecendo. Claro, o bom design e os nomes expressivos desempenham um papel importante aqui. Mas a escolha da linguagem e sua concisão também são importantes

Uma linguagem diz-se concisa quando claramente expressa a intensão do código que se lê e não se fazem necessários códigos boilerplate para que se perceba a intensão.

Exemplo de Ferramentas que tornam a linguagem concisa:

Extension Functions (Funções de Extensão) — capacidade de adicionar funcionalidade a qualquer classe ou biblioteca (mesmo que não seja da sua autoria) sem ter acesso ao código fonte, imagine que queira adicionar uma função ultimaLetra() que devolve o ultimo caractere, poderia fazer isso da seguinte forma:

Fun String.ultimaLetra() = this.charAt(this.lenght() — 1)
Não se preocupe se não entende o codigo acima ainda.
Teremos um artigo na série que se dedicará a falar especificamente sobre extension function
Existem várias outras ferramentas usadas para tornar kotlin uma linguagem concisa que serão abordados nesta série

Linguagem Segura

Em geral, quando se fala de uma linguagem de programação como segura, quer-se dizer que seu projecto impede certos tipos de erros em um programa. Claro, esta não é uma qualidade absoluta; nenhuma linguagem impede todos os possíveis erros. Além disso, evitar erros geralmente vem com um custo. Você precisa fornecer ao compilador mais informações sobre a operação pretendida do programa, para que o compilador possa então verificar se a informação corresponde ao que o programa faz. Por causa disto, há sempre uma internação entre o nível de segurança que você obtém e a melhor forma de produção requerida.

Funcionar na JVM já oferece muitas garantias de segurança: por exemplo, segurança de memória e outros problemas causados ​​pelo uso incorreto da memória alocada dinamicamente. Como uma linguagem estática, Kotlin também garante o tipo de segurança de seus aplicativos.

Kotlin também vai além disso, o que significa que mais erros podem ser evitados por verificações em tempo de compilação em vez de falhar no tempo de execução. Mais importante, Kotlin se esforça para remover o NullPointerException do seu programa. Compilador rastreia valores que podem e não podem ser nulos e proíbem operações que podem levar a uma NullPointerException em tempo de execução. O custo adicional necessário para este é essencial: marcar um tipo como nullable leva apenas um caractere único, um sinal de referência:

Val nome: String //não pode ser null
Val nome: String? //Pode ser null
Uma explicação será dada mais a frente sobre isso

100% interoperável com java

O que garante essa interoperabilidade é que o código kotlin compila em java bytecode, o que quer dizer que depois de compilado o código kotlin é o mesmo que o código java, e também muitas das bibliotecas usadas pelo kotlin são do java (como por exemplo as coleções de dados).

Compiladores como Intellij permitem converter código java em kotlin e vice versa

O que quer dizer que integrantes da mesma equipe podem estar a trabalhar em harmonia sendo que um deles trabalha em java e outro em kotlin sem nenhuma dificuldade de interação entre eles.


Onde Usar?

Server-Side

Android

Native

•Compila em javascript

  • Maior parte onde encontramos java hoje em dia

Uuufffa, espero que tenha conseguido te convencer a dar uma olhadinhano kotlin, caso esteja impaciente para esperar os meus futuros artigos pode ir dando uma olhada aqui.

Como bónus aqui vai uma demostração de como seria um método que compara dois números em java e kotin:

//versão java
public String compara(int x, int y){
  If(x == y){
    Return “Iguais”;
  }
  Return “Diferentes”;
}
//versão Kotlin
fun compara(x: Int, y: Int) = if(x == y) “Iguais” else “Diferentes”
Não esqueça de dar um claps (likes) se achou o artigo útil, nos vemos em breve com certeza
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.