Criando o primeiro APP Android Kotlin
Recentemente, o Google adicionou o Kotlin em sua lista de linguagens de programação suportadas para o desenvolvimento de Android. Até então, apenas as poderosas Java e C++ faziam parte dessa lista. O Kotlin foi escolhido por ser uma linguagem concisa, expressiva e projetada como type-safe e null safe, além do fato de tornar o desenvolvimento mais ágil.
Mais informações sobre a linguagem Kotlin podem ser conferidas no artigo do Jonatan Rafael Zanella: Kotlin: explorando uma nova linguagem . Que aborda um pouco da história da linguagem, suas vantagens em relação ao Java etc.
Pensando nisso, o objetivo deste artigo é auxiliar quem está começando com a linguagem Kotlin e o desenvolvimento para Android, através da demonstração de como utilizar a linguagem em um exemplo prático. A partir deste material, serão desenvolvidos diversos artigos abordando mais sobre esta nova linguagem.
Foi desenvolvido um aplicativo básico para o controle de pontos de um jogo de basquete, por meio do qual será possível inserir os pontos do jogo, sendo: 3 pontos, 2 pontos ou 1 ponto, além do botão para reiniciar a partida. Durante a utilização da linguagem e a demanda por novos comandos, será explicado as características do código utilizado.
Neste artigo não será levado em consideração o tratamento de rotação de telas e layout, dado que este não é o foco atual, sendo o objetivo, portanto, aprender a linguagem.
Para o artigo foi utilizado o Android Studio 3.1. Para começar, siga os passos abaixo:
- Abra o Android Studio e clique em “Start a new Android Studio Project”. Abrirá uma tela para que você escolha o nome do aplicativo, nome da companhia e a localização do projeto. Informe os nomes de sua preferência. Neste exemplo foi utilizado o nome “PartidaBasqueteKotlin”.
- Marque a caixa “Include Kotlin support” para que o seu projeto possa usar a linguagem Kotlin. Confira como ficou na imagem abaixo.
- Após efetuar as configurações, clique em “Next”. Nesta janela, deixe marcado o item “Phone and Tablet” e selecionando a versão “API 15 Android 4.0.3”, escolha da API 15 para que seu app possa rodar em aproximadamente 100% dos devices com Android como é informado pelo Android Studio "By targeting API 15 and later, your app will run on approximately 100% of devices". Conforme imagem abaixo:
- Com isso, informamos que nossa aplicação será executada apenas em smartphones e tablets, clique em “Next” novamente. Na próxima tela, você deverá selecionar “Empty Activity” e então clicar em “Next”.
- Na próxima tela, você pode deixar MainActivity ou escolher o nome que preferir para a atividade principal. Clique em “Finish” e aguarde enquanto o Android Studio carrega todas as bibliotecas necessárias para seu App.
Pronto! Nosso App está criado!
O arquivo MainActivity contém a extensão .kt do Kotlin.
Todo o código será feito na MainActivity e em nosso arquivo activity_mail.xml que está localizado em: res -> layout. Deixar todo o código na MainActivity não é uma boa prática, mas como este não é o objetivo deste post será mais fácil assim.
Primeiro, vamos ao layout.
- Copie o código abaixo e cole em seu arquivo activity_main.xml no lugar do conteúdo existente.
- Está será visualização na prévia do seu layout:
Para cada time foi criado um TextView para visualizar o placar atual. Na linha 29, o placarTimeA, e na linha 83, o placarTimeB. Foram criados também 3 botões para cada time, sendo: um para adicionar 3 pontos (tresPontosA e tresPontosB), um para adicionar 2 pontos (doisPontosA e doisPontosB) e um para adicionar 1 ponto ou tiro livre (tiroLivreA e tiroLivreB). Na linha 117, foi criado um botão para reiniciar a partida e zerar os placares.
Não será utilizado o novo Layout do Android — o Constraint layout.
O layout ficou bem simples 🙂.
- Abra o arquivo MainActivity.kt e na frente do código AppCompatActivity() { — de um "Enter" — e insira o código abaixo.
- O código está sendo inserido dentro da classe e fora de qualquer método, assim estará disponível para ser utilizado em qualquer método da classe. Caso você não entenda esta disposição aconselho a estudar mais sobre Programação Orientada a Objetos — POO.
- No código acima foram declaradas as variáveis pontuacaoTimeA e pontuacaoTimeB e inicializadas com o valor 0, de maneira que elas possam armazenar os pontos acumulados de cada time. Em Kotlin, toda variável precisa ser inicializada em sua declaração. Isto é uma das diferenças quanto ao Java. O mesmo código em Java ficaria da seguinte maneira:
Pode-se notar que, em Kotlin não é necessário inserir o ponto e vírgula. Outra diferença é a existência e obrigatoriedade do uso na declaração da variável utilizando var ou val.
O var é utilizado para declarar uma variável comum que pode ser alterada posteriormente, sendo esse tipo de variável denominada variável mutável. O val é semelhante a uma "final" em java, ou seja, é uma variável que não pode ser alterada durante o resto do código, sendo um tipo de variável imutável. Próximas linhas de Kotlin:
Aqui, declaramos duas variáveis pTimeA e pTimeB do tipo TextView, que armazenarão o recebimento do resultado do placar e os exibirão na tela.faz
No código acima, foi atribuído o TextView para o placar do layout, cuja variável foi criada para cada placar. Foi feito o uso do lateinit para declara-las. Assim ela só será inicializada quando o onCreate passar por essas 2 linhas e precisar delas e ela será inicializada com o valor do atributo do layout: placarTimeA para o time A, e placarTimeB para o placar do time B.
Foi declarada a variável bTresPontosTimeA do tipo Button e inicializada com o botão do layout tresPontosA (esse botão representa os 3 pontos). Faça o mesmo para o botão de três pontos do time B e para os botões de 2 e tiro livre de cada time, além do botão "reiniciar partida", deixando assim:
Perceba que as variáveis que irão receber os botões foram declaradas como val e não mais como var, deste modo elas não receberão outro valor que não seja o botão.
Configuração do onClick dos botões.
No bloco acima, é chamada a função “clique” de cada botão. Na execução do clique, uma função é chamada passando os parâmetros. As chamadas para as funções ficarão na cor vermelha pois as funções não foram criadas ainda.
Após a função OnCreate, será criado a função adicionarPontos que receberá dois parâmetros: a quantidade de pontos que será adicionada e o time para qual os pontos serão somados. Assim, temos:
Na linha 1, é declarada a função (fun) com seu nome, adicionarPontos, e os parâmetros que em Kotlin são declarados assim: nome: tipo. Temos, então, os pontos do tipo inteiro e time do tipo string. A linha 2 faz a comparação se o time passado por parâmetro é igual a A. No Java essa comparação seria feita utilizando a função .equals() mas em Kotlin o sinal de ==, como fazemos com tipos primitivos em Java, tem o mesmo efeito. Se for igual a A, então a variável pontuacaoTimeA que foi criada fora do método onCreate para ficar disponível em todo o código e que armazena a soma de pontos, receberá o seu valor somado ao valor da variável. Para ficar mais curto foi escrito dessa maneira, mas poderia ser escrito assim:
O resultado é o mesmo. Caso o time não seja A, então só pode ser time B. Assim, é feito a soma para o time B em sua variável pontuacaoTimeB. Ainda falta criar a função reiniciarPartida e atualizaPlacar que estão em vermelho no código.
Logo abaixo da função adicionarPontos, foi criado a função atualizaPlacar que atualizará o placar na tela do dispositivo.
A função atualizaPlacar é declarada usando a palavra fun seguida de seu nome “atualizaPlacar” e o parâmetro time que é do tipo string. Então é realizado a comparação para ver para qual time o placar deve ser atualizado. Se time == “A” então é atribuído ao campo pTimeA, que é o id do TextView do placar do time A, passando para a variável que armazena o placar atualizado pontuacaoTimeA.toString(), o toString() é para converter para string, pois o TextView só aceita texto.
Criando a função que está faltando: reiniciarPartida.
Na linha 1, a função é criada sem nenhum parâmetro, na linha 2 é atribuído 0 a variável que guarda os pontos do time A. Na linha 3, o campo TextView é atribuído a variável pontuação que acabou de ser zerada na linha 2. Nas linhas 4 e 5, é feito a mesma coisa para a variável e o campo do time B. E na linha 6, uma notificação Toast é exibida na tela informando que o placar foi reiniciado. Para isso será necessário realizar o import da biblioteca android.widget.Toast Para exibição do Toast foi utilizado Toast.makeText que requer como parâmetros o contexto this, o texto para ser exibido “Placar Reiniciado” e o tempo de duração Toast.LENGTH_SHORT. Logo após a função show() é chamada para que a mensagem seja exibida na tela.
Feito isso, basta clicar no botão PLAY, escolher o dispositivo virtual e rodar o App.
Pronto! O aplicativo desenvolvido com a linguagem Kotlin está rodando!
Para o exemplo ficar mais curto, as funções foram otimizadas utilizando parâmetros e uma única função para adicionar os pontos, mas poderia ser utilizado uma função para cada tarefa.
Foi desenvolvido o mesmo aplicativo utilizando a linguagem Java e sem a customização dos métodos. O aplicativo encontra-se em meu github como nome Partida baskete Java.
Todo o código provido neste post está disponível neste repositório.
Este é um pequeno exemplo de utilização da linguagem Kotlin. Mas espero que tenham gostado do artigo e que ele ajude quem esta começando ou pretende começar a desenvolver aplicativos Android com a linguagem.
Um abraço e até a próxima!
Referências para esta publicação:
https://medium.com/android-dev-br/kotlin-primeiros-passos-b9035259e63a
https://kotlinlang.org/docs/reference/
http://tutorialwing.com/tutorials/kotlin/
https://medium.com/android-dev-br/kotlin-primeiros-passos-b9035259e63a