Meu início no mundo Kotlin
Tags: braziliandevs, kotlin, beginners, career
Published: 2022-01-12 03:10:38

Em janeiro de 2021 comecei em um novo trabalho. Além dos desafios de adaptação que costuma ocorrer ao você iniciar em uma nova empresa, como, por exemplo, regras e cultura da organização, arquitetura e objetivo do projeto, etc.

Nesse novo trabalho tive outro desafio que foi desenvolver com uma linguagem de programação que eu nunca tinha tido contato anteriormente e essa linguagem foi o Kotlin, de início fiquei um pouco com medo de ter que mexer com algo que nem sequer tinha estudado antes. Só tinha visto alguns vídeos aleatórios no youtube sobre Kotlin, mas bem por cima mesmo, sem algo muito detalhado.

Mas depois de um tempo eu me senti mais confortável, durante esse artigo, irei explicar um pouco de como comecei a estudar Kotlin e, porque resolvi continuar investindo nele.

## Kotlin além do Android 

Um dos grandes desafios era que eu iria desenvolver com o Kotlin no lado do servidor, é muito comum se ouvir falar de Kotlin para programação Android, mas ela é uma linguagem multiplataforma, ao decorrer do artigo vou explicar melhor sobre isso.

Fiquei receoso em investir o meu tempo de estudos em uma linguagem que quase não via vaga para backend, via muitas para mobile, mas backend era quase zero. Lembro que chamei a [@morgannadev](https://dev.to/morgannadev) para conversar, pois, ela era a única pessoa que eu conhecia que trabalhava com Kotlin no backend e perguntei se realmente valia a pena investir meu tempo estudando e se tinha mercado para essa tecnologia no backend.

Após conversar bastante, cheguei na decisão de que iria continuar estudando Kotlin.

### Como surgiu?

Kotlin foi desenvolvida em 2011 pela Jetbrains, o seu principal objetivo ao ser criada era porque a Jetbrains queria uma linguagem de programação para resolver problemas de produtividade na criação de suas IDEs, que eram desenvolvidas com Java.

Porém, ela estava tendo problemas com certas características do Java, foi aí que Jetbrains resolveu desenvolver uma linguagem de programação, que pudesse suprir suas necessidades e melhorar o desenvolvimento de seus produtos. A versão 1.0 do Kotlin foi lançada oficialmente em 15 de fevereiro de 2016.

### Onde posso usar Kotlin? 


Como foi falado anteriormente, Kotlin é uma linguagem multiplataforma. Ela roda em cima da JVM (Java Virtual Machine), ou seja, você consegue executar em qualquer lugar que rode a JVM.

Hoje em dia é muito comum ver o Kotlin ligado ao desenvolvimento Mobile, o motivo disso é que em 2017 o Google anunciou que a partir daquele momento, Kotlin era uma linguagem suportada para o desenvolvimento Android e em 7 de maio de 2019 declarou como a linguagem oficial para o desenvolvimento de aplicações Android.

Mas podemos trabalhar com Kotlin no lado do servidor, desenvolvendo aplicações Web utilizando frameworks como [Micronaut](https://micronaut.io/), [Ktor](https://ktor.io/), [Spring](https://spring.io/) etc, esse é meu foco atualmente. Também podemos criar aplicações Desktop utilizando bibliotecas de interfaces como [TornadoFx](https://tornadofx.io/) ou [JavaFx](https://openjfx.io/). Existe ainda a possibilidade de transpilar um código Kotlin para javascript, fazendo com que seja possível desenvolver aplicações web frontend. Você pode achar mais informações sobre o [nessa parte](https://kotlinlang.org/docs/js-overview.html) da documentação.

Também é possível desenvolver aplicações para IOS utilizando o [KMM](https://kotlinlang.org/lp/mobile/)(Kotlin Multiplatform Mobile) e conseguimos criar aplicações nativas para várias plataformas utilizando o Kotlin native, temos um [artigo](https://dev.to/kotlinautas/o-que-e-kotlin-native-1ejh) da [@lissadev](https://dev.to/lissadev) sobre isso.

Kotlin possui várias possibilidades para trabalhar, você pode ver melhor na documentação oficial. Mas resumindo temos os seguintes locais onde podemos criar aplicações:

- Desenvolvimento Android
- Desenvolvimento Backend
- Desenvolvimento Desktop
- Transpilação para Javascript
- Desenvolvimento multiplataforma (Ios e Android)
- Desenvolvimento nativo

### Características do Kotlin

Logo abaixo você consegue ver um exemplo de um código escrito em Kotlin:

```kotlin
fun soma(valor1: Int, valor2: Int): Int {
    return valor1 + valor2
}

fun main() {
    val primeiroNumero = 10
    val segundoNumero = 5
    val resultado = soma(primeiroNumero, segundoNumero)
    println("O resultado da soma é: $resultado")
}

main()
// O resultado da soma é: 15
```

Esse é um código bem simples que declara uma função chamada soma esperando dois parâmetros do tipo inteiro e retorna a soma desses valores. Já na função `main()` definimos duas variáveis que recebe dois números inteiros, definimos uma variável chamada de `resultado` que recebe o retorno da função `soma` passando como parâmetro às duas variáveis declaradas anteriormente e por fim mostramos na tela o valor da soma, concatenado com uma string. 

E no final chamamos nossa função main. Você pode executar o código acessando  [esse](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS42LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiZnVuIHNvbWEodmFsb3IxOiBJbnQsIHZhbG9yMjogSW50KTogSW50IHtcbiAgICByZXR1cm4gdmFsb3IxICsgdmFsb3IyXG59XG5cbmZ1biBtYWluKCkge1xuICAgIHZhbCBwcmltZWlyb051bWVybyA9IDEwXG4gICAgdmFsIHNlZ3VuZG9OdW1lcm8gPSA1XG4gICAgdmFsIHJlc3VsdGFkbyA9IHNvbWEocHJpbWVpcm9OdW1lcm8sIHNlZ3VuZG9OdW1lcm8pXG4gICAgcHJpbnRsbihcIk8gcmVzdWx0YWRvIGRhIHNvbWEgw6k6ICRyZXN1bHRhZG9cIilcbn0ifQ==) link.

Como pode ver a sintaxe do Kotlin é bem simples e amigável. Uma coisa que escutei quando tava começando, é que o Kotlin pega as coisas que são boas de várias linguagens e junta em uma só.
Durante o tempo em que estou escrevendo código em Kotlin, me lembro de várias coisas que utilizo em outras linguagens como, por exemplo javascript e Java.

## Vantagens do Kotlin

Bom, mas quais são as vantagens em relação as outras linguagens? Existem diversas vantagens, mas eu resolvi destacar aqui nesse artigo as quais eu considero mais legais pra quem está iniciando saber.


- **Compatibilidade com Java**: Como falado antes, Kotlin roda em cima da JVM, isso é possível, pois, um código escrito em Kotlin no final é compilado para um bytecode Java, ou seja, você consegue utilizar Java e Kotlin no mesmo projeto, pois, no final na hora de executar, tudo vai ser convertido para um arquivo bytecode Java. Mas qual a vantagem disso? A vantagem é que você pode fazer a transição de um projeto escrito em Java para Kotlin com pequenos passos, pois, você pode ter um projeto Java e começar a escrever novas funcionalidades em Kotlin e ir transcrevendo as classes antigas escritas em Java para Kotlin. Um recurso legal que você pode usufruir é o Java2Kotlin através de uma funcionalidade da IDE da Jetbrains. Você pode entender melhor nesse [link](https://kotlinlang.org/docs/mixing-java-kotlin-intellij.html#converting-an-existing-java-file-to-kotlin-with-j2k).
- **Suporte a várias bibliotecas**: Pela vantagem falada acima você pode utilizar todas as bibliotecas utilizadas no mundo Java em seu projeto Kotlin, basta instalar a lib no seu projeto e importar no seu arquivo, provavelmente você vai ter que mudar a forma de chamar certas funções, mas a própria IDE da Jebrains te ajuda com isso. Uma dúvida que tive no início era se eu precisava aprender Java antes de aprender Kotlin. E a resposta é NÃO, você ter uma base de pode te ajudar, mas não é um requisito para começar a estudar o Kotlin.
- **Linguagem multiparadigma**: Uma coisa bem legal que o Kotlin te proporciona é você poder utilizar diversos paradigmas de programação em seus projetos. Pois, o Kotlin suporta o paradigma de POO(Programação Orientada a Objetos), paradigma procedural e paradigma Funcional, uma coisa que fiquei admirado quando comecei a estudar Kotlin é que eu poderia declarar uma variável recebendo uma estrutura de decisão (if e else), pois, diferente de outras linguagens no Kotlin uma estrutura de decisão é uma função.
- **Null safety**: Algo queridinho da comunidade do Kotlin é o Null safety se você veio de linguagens como javascript, provavelmente durante o desenvolvimento de alguns sistemas você já se deparou com um 'undefined' ou no Java você, já se deparou com o erro 'NullPointerException' isso ocorre, pois, nessas linguagens você pode declarar uma variável inicialmente sem nenhum valor declarado a ela, no Kotlin isso não é possível, você deve atribuir um valor a uma variável ao declara-la. Existe formas de contornar isso utilizando o operador '?' depois do tipo da variável, por exemplo.

```kotlin
var nome: String? = null;
```

Mas observe que eu atribuo o valor null na variável. Isso não dever ser feito com frequência, pois pode trazer problemas futuros na execução do seu projeto. Mas o importante ressaltar essa funcionalidade do Kotlin é que você tem um código mais seguro. Antes eu programava com Javascript e PHP e essas linguagens não têm esse tipo de suporte, você nem mesmo precisa declarar o tipo da variável e isso de inicio me travava um pouco na hora de desenvolver, mas com o tempo você vai pegando o jeito. Você pode estudar melhor sobre esse assunto olhando na documentação do Kotlin nesse [link](https://kotlinlang.org/docs/null-safety.html).

## Vagas

No inicio eu falei que tinha medo de não achar uma vaga para Kotlin no backend, além de ter várias para o mobile também possuimos várias vagas para Kotlin no backend. Você pode dar uma olhada [nesse](https://github.com/Kotlin-BR/kotlin-no-backend) repo do github sobre empresas que utilizam Kotlin no backend aqui no Brasil. Isso sem contar as vagas que temos fora do Brasil, então temos bastante vagas para você poder trabalhar.

## Como estudar Kotlin?

Bom depois de ler tudo isso sobre Kotlin espero ter despertado em você um interesse em estudar Kotlin :) Mas, como eu posso fazer isso? Bom eu vou passar aqui dicas que eu recebi quando eu estava iniciando, mas isso não quer dizer que só existe essa forma, essa foi apenas a forma que eu aprendi e pode ajudar você também.

- A primeira dica que eu passo é ler a documentação. A documentação do Kotlin é bem detalhada e explica muito bem, você pode acessar a documentação [aqui](https://kotlinlang.org/docs/).

- A segunda coisa que me ajudou bastante no inicio e ajuda até hoje é uma parte especifica da documentação que mostra a sintaxe básica da linguagem, se você é do tipo de pessoa que gosta de aprender uma linguagem nova já colocando a mão na massa você pode iniciar lendo a parte de [base syntax](https://kotlinlang.org/docs/basic-syntax.html). Nela você consegue ver como declarar coisas básicas da linguagem, como por exemplo variáveis, funções, arrays, estruturas de decisão e repetição e etc.

- Se você gosta de cursos eu separei uma lista de cursos gratuitos que você pode fazer, essa lista tá disponibilizada [aqui](https://kotlinautas.dev/cursos/) no site da Kotlinautas.

- Se você gosta de ler indico você seguir a gente da Kotlinautas aqui no dev.to nesse [link](https://dev.to/kotlinautas) você pode achar vários artigos legais sobre Kotlin no geral.
 
- Uma da parte mais importante para aprender uma linguagem de programação nova é praticar escrevendo algoritimos, para isso você pode utilizar a parte de [Kotlin By Examples](https://play.kotlinlang.org/byExample/overview) na documentação do Kotlin.
 
- E por último uma coisa que é legal você saber é sobre a forma "Kotliniana" de se escrever um código. Isso é apenas uma forma que um código escrito em Kotlin deve ser, mas você não deve ficar preso a isso no início, pois isso pode atrapalhar na sua evolução, eu apenas indico você dar uma olhada e saber que existe.
 
- Bom e por último mas não menos importante você pode seguir no twitter o perfil da [Kotlinautas](https://twitter.com/kotlinautas) da [Jetbrains](https://twitter.com/jetbrains) e o da linguagem [Kotlin](https://twitter.com/kotlin) para saber sobre atualizações da linguagem.

Bom espero ter ajudado você nesse início com Kotlin e ter tirado algumas dúvidas sobre essa linguagem que mal conheço mas já considero Pakas. E qualquer dúvida que você tiver pode me chamar lá no Twitter [kastrowalker](https://twitter.com/kastrowalker) que eu vou ter um prazer imenso em ajudar você.

Um grande abraço e até a próxima.