1. Antes de começar
Observe nos apps que você usa no smartphone que algumas partes permanecem iguais, enquanto outras mudam (ou são variáveis).
Por exemplo, os nomes das categorias no app Configurações continuam os mesmos: Rede e Internet, Dispositivos conectados e Apps, entre outros.
Por outro lado, em um app de notícias, os artigos mudam com frequência. O nome, a fonte, a hora da postagem e as imagens do artigo mudam.
Como você pode escrever o código para que o conteúdo mude com o passar do tempo? Não é possível reescrever o código do app sempre que novos artigos forem postados, o que acontece todos os dias, a cada hora e a cada minuto.
Neste codelab, você vai aprender a escrever um código que usa variáveis para que determinadas partes do programa possam mudar sem que seja necessário escrever um novo conjunto de instruções. Vamos usar o Playground Kotlin, como no codelab anterior.
O que você vai criar
- Programas curtos em Kotlin que usam variáveis.
O que você vai aprender
- Como definir uma variável e atualizar o valor dela.
- Como selecionar um tipo de dado adequado para uma variável entre os tipos de dados básicos de Kotlin.
- Como adicionar comentários ao código.
O que é necessário
- Um computador com acesso à Internet e um navegador da Web.
2. Variáveis e tipos de dados
Na programação de computadores, existe o conceito de variável, que é um contêiner para um único dado. Você pode o imaginar como uma caixa que contém um valor. A caixa tem um rótulo, que é o nome da variável. Ao fazer referência à caixa pelo nome, você tem acesso ao valor dela.
Por que armazenar o valor em uma caixa e se referir a ela pelo nome quando você pode usar o valor diretamente? O problema é que, quando o código usa valores diretamente em todas as instruções, o programa só funciona nesse caso específico.
Confira uma analogia que pode ajudar você a entender por que as variáveis são úteis. Confira abaixo uma carta para alguém que você conheceu recentemente.
Olá, Laura.
A nossa conversa hoje no escritório foi ótima. Espero ver você novamente na sexta-feira.
Tenha um bom dia!
Essa carta é boa, mas só funciona para a situação específica com Laura. E se você precisasse escrever a mesma carta muitas vezes, mas com pequenas variações para pessoas diferentes? Seria mais eficiente criar um modelo de carta, deixando espaços em branco para as partes que podem mudar.
Olá, ____.
A nossa conversa hoje _____ foi ótima. Espero ver você novamente ____.
Tenha um bom dia!
Também é possível especificar o tipo de informação que é colocado em cada espaço em branco. Isso garante que o modelo de carta seja usado conforme esperado.
Olá, { nome } .
A nossa conversa hoje { no local } foi ótima. Espero ver você novamente { na data } .
Tenha um bom dia!
Conceitualmente, a criação de um app é semelhante. Você tem marcadores de posição para alguns dados, enquanto outras partes do app continuam iguais.
Na ilustração acima de um app de notícias, o texto de "Welcome", o título "Latest news for you" e o texto do botão "View more articles" permanecem os mesmos. Por outro lado, o nome do usuário e o conteúdo de cada artigo mudam. Essa seria uma ótima oportunidade de usar variáveis para armazenar cada informação.
Não faz sentido escrever um código (ou instruções) de app de notícias que funcione apenas para um usuário chamado Alex ou para uma matéria que tenha sempre o mesmo título e a mesma data de publicação. Em vez disso, é necessário ter um app mais flexível. Por isso, escreva o código referenciando nomes de variáveis, como name
, article1Name
, article1Date
e assim por diante. Dessa forma, o código se torna geral o suficiente para funcionar em muitos casos de uso diferentes em que o nome do usuário e os detalhes do artigo podem ser diferentes.
App de exemplo com variáveis
Vamos analisar um app de exemplo para ver onde ele pode usar variáveis.
Em um app de mapas, você pode encontrar uma tela de detalhes para cada local, como um restaurante ou uma empresa. A captura de tela acima do app Google Maps mostra os detalhes da sede do Google, chamada de Googleplex. Quais dados você acha que são armazenados como variáveis no app?
- Nome do local
- Nota do local
- Número de avaliações recebidas
- Indicação de que o usuário salvou (ou adicionou aos favoritos) esse local
- Endereço do local
Quando você muda os dados armazenados nessas variáveis, o app de mapas fica flexível o suficiente para mostrar os detalhes de outros locais também.
Tipos de dados
Ao decidir quais aspectos do app podem ser variáveis, é importante especificar quais tipos de dados podem ser armazenados nessas variáveis. Em Kotlin, há alguns tipos de dados básicos comuns. A tabela abaixo mostra um tipo de dado diferente em cada linha. Para cada tipo, há uma descrição de quais dados ele pode conter e exemplos de valores.
Tipo de dado de Kotlin | Qual dado pode conter | Exemplos de valores literais |
| Texto |
|
| Número inteiro |
|
| Número decimal |
|
| Número decimal, que é menos preciso que um |
|
|
|
|
Agora que você conhece alguns tipos de dados comuns do Kotlin, qual deles seria apropriado para cada uma das variáveis identificadas na página de detalhes do local que vimos antes?
- O nome do local é um texto. Portanto, pode ser armazenado em uma variável com o tipo de dado
String
. - A nota do local é um número decimal (como 4,2 estrelas) e pode ser armazenada como
Double
. - O número de avaliações do local é um número inteiro, então precisa ser armazenado como um
Int
. - A informação de se o usuário salvou esse local tem apenas dois valores possíveis (salvou ou não). Por isso, ele é armazenado como um
Boolean
, em quetrue
efalse
podem representar cada um desses estados. - O endereço do local é um texto, portanto, precisa ser uma
String
.
Pratique nos outros dois cenários abaixo. Identifique o uso de variáveis e dos tipos de dados nos apps abaixo.
- Em um app para assistir vídeos, como o YouTube, há uma tela com detalhes do vídeo. Onde as variáveis provavelmente são usadas? Qual é o tipo de dado dessas variáveis?
Não há somente uma resposta correta, mas em um app de exibição de vídeo, os dados abaixo podem ser armazenados nestas variáveis:
- Nome do vídeo (
String
) - Nome do canal (
String
) - Número de visualizações do vídeo (
Int
) - Número de marcações "Gostei" no vídeo (
Int
) - Número de comentários no vídeo (
Int
)
- Em um app como Mensagens, a tela lista as mensagens de texto mais recentes recebidas. Onde as variáveis provavelmente são usadas? Qual é o tipo de dado dessas variáveis?
Novamente, não há uma única resposta correta. Em um app de mensagens de texto, as variáveis podem ser usadas para os seguintes dados:
- Número de telefone do remetente (
String
) - Carimbo de data/hora da mensagem (
String
) - Visualização do conteúdo da mensagem (
String
) - Se a mensagem de texto aparece como não lida (
Boolean
)
Testar
- Abra seu app favorito no smartphone.
- Identifique onde você acha que são usadas variáveis em uma tela específica do app.
- Qual é o tipo de dado dessas variáveis?
- Compartilhe suas respostas em mídias sociais com uma captura de tela do app, uma explicação de onde você acha que as variáveis são usadas e a hashtag #AndroidBasics.
Você fez um bom trabalho neste codelab até agora. Vá até a próxima seção para saber mais sobre como as variáveis e os tipos de dados são usados no código.
3. Definir e usar variáveis
Definir ou usar uma variável
Antes de usar uma variável no código, é preciso a definir. Isso é parecido com o que você aprendeu no codelab anterior: como definir funções antes de chamá-las.
Quando você define uma variável, atribui um nome de identificação único a ela. Também é possível decidir o tipo de dado que ela pode conter. Por fim, você pode fornecer um valor inicial que vai ser armazenado na variável, mas isso é opcional.
Depois de definir, você vai poder usar a variável no programa. Para isso, digite o nome dela no código. Isso informa ao compilador Kotlin que você quer usar o valor da variável nesse ponto do código.
Por exemplo, defina uma variável para o número de mensagens não lidas na caixa de entrada de um usuário. A variável pode ter o nome count
. Armazene um valor, como o número 2
, na variável. Ele indica que há 2
mensagens não lidas na caixa de entrada do usuário. É possível escolher um número diferente para ser armazenado na variável. No entanto, para esse exemplo, use o número 2
.
Sempre que o código precisar acessar o número de mensagens não lidas, digite count
no código. Ao executar as instruções, o compilador Kotlin vê o nome da variável no código e usa o valor dela.
Tecnicamente, há um vocabulário mais específico para descrever esse processo:
Uma expressão é uma pequena unidade de código que é interpretada como um valor. Uma expressão pode ser composta por variáveis e chamadas de função, entre outros itens. No caso abaixo, a expressão é composta de uma variável: a count
. Essa expressão é interpretada como 2
.
Interpretar significa determinar o valor de uma expressão. Nesse caso, a expressão é interpretada como 2
. O compilador interpreta as expressões do código e usa esses valores ao executar as instruções no programa.
Para observar esse comportamento no Playground Kotlin, execute o programa na próxima seção.
Exemplo
- Abra o Playground Kotlin em um navegador da Web.
- Substitua o código no Playground Kotlin pelo programa abaixo.
Este programa cria uma variável com o nome count
com um valor inicial de 2
e a usa mostrando o valor da variável count
na saída. Não se preocupe se você ainda não entender todos os aspectos da sintaxe do código. Isso vai ser explicado em mais detalhes nas próximas seções.
fun main() {
val count: Int = 2
println(count)
}
- Execute o programa. A saída vai ser:
2
Declaração de variável
No programa executado, a segunda linha de código é:
val count: Int = 2
Essa instrução cria uma variável de número inteiro com o nome count
que contém o número 2
.
Pode levar algum tempo para se familiarizar com a leitura da sintaxe (ou o formato) para declarar uma variável em Kotlin. O diagrama abaixo mostra onde cada detalhe sobre a variável precisa ficar, além da localização de espaços e símbolos.
No contexto da variável de exemplo count
, é possível ver que a declaração da variável começa com a palavra val
. O nome da variável é count
. O tipo de dado é Int
, e o valor inicial é 2
.
Cada parte da declaração da variável é explicada em mais detalhes abaixo.
Palavra-chave para definir uma nova variável
Para definir uma nova variável, comece com a palavra-chave val
do Kotlin, que significa valor. Isso informa ao compilador Kotlin que há uma declaração de variável na instrução.
Nome da variável
Assim como você nomeia uma função, também precisa dar um nome a uma variável. Na declaração da variável, o nome dela vem depois da palavra-chave val
.
Você pode escolher qualquer nome para a variável, mas não é permitido usar palavras-chave (link em inglês) do Kotlin.
Recomendamos escolher um nome que descreva os dados que a variável armazena para facilitar a leitura do código.
Os nomes das variáveis precisam seguir a convenção de concatenação, como você aprendeu com os nomes de funções. A primeira palavra do nome da variável começa com letra minúscula. Se houver várias palavras no nome, não pode haver espaço entre elas e todas as outras palavras precisam começar com letra maiúscula.
Exemplos de nomes de variáveis:
numberOfEmails
cityName
bookPublicationDate
No exemplo de código mostrado anteriormente, count
é o nome da variável.
val count: Int = 2
Tipo de dado da variável
Após o nome da variável, você adiciona dois-pontos, um espaço e o tipo de dado da variável. Como mencionado anteriormente, String
, Int
, Double
, Float,
e Boolean
são alguns dos tipos de dados básicos do Kotlin. Você vai aprender sobre outros tipos de dados mais adiante neste curso. Escreva os tipos de dados exatamente como aparecem e comece com uma letra maiúscula.
Para o exemplo da variável count
, Int
é o tipo de dado da variável.
val count: Int = 2
Operador de atribuição
Na declaração da variável, o sinal de igual (=
) vem após o tipo de dado. O sinal de igual é chamado de operador de atribuição. O operador de atribuição atribui um valor à variável. Em outras palavras, o valor ao lado direito do sinal de igual é armazenado na variável que está à esquerda do sinal.
Valor inicial da variável
O valor da variável são os dados armazenados nela.
Para o exemplo de variável count
, o número 2
é o valor inicial dela.
val count: Int = 2
Talvez você também ouça a frase: "a variável count
é inicializada como 2
". Isso significa que 2
é o primeiro valor armazenado na variável quando ela é declarada.
O valor inicial vai ser diferente dependendo do tipo de dado declarado para a variável.
Consulte a tabela abaixo, que você pode reconhecer porque já apareceu antes no codelab. A terceira coluna mostra exemplos de valores que podem ser armazenados em uma variável de cada tipo correspondente. Esses valores são chamados de literais porque são fixos ou constantes (em que os valores são constantemente os mesmos). Como exemplo, o número inteiro 32 sempre vai ter o valor de 32. Por outro lado, uma variável não é um literal, porque o valor dela pode mudar. Você pode ouvir esses valores literais sendo chamados com base no tipo: literal de string, literal de inteiro, literal booleano etc.
Tipo de dado de Kotlin | Qual dado pode conter | Exemplos de valores literais |
| Texto |
|
| Número inteiro |
|
| Número decimal |
|
| Número decimal, que é menos preciso que um |
|
|
|
|
É importante fornecer um valor apropriado e válido de acordo com o tipo de dado da variável. Por exemplo, não é possível armazenar um literal de string, como "Hello"
, em uma variável do tipo Int
porque o compilador Kotlin vai gerar um erro.
Usar uma variável
Veja abaixo o programa original que você executou no Playground Kotlin. Até agora, você aprendeu que a segunda linha de código cria uma nova variável de número inteiro com o nome count
e o valor 2
.
fun main() {
val count: Int = 2
println(count)
}
Agora, observe a terceira linha de código. Você está exibindo a variável count
na saída:
println(count)
Não há aspas ao redor da palavra count
. Esse é um nome de variável, não um literal de string. Haveria aspas ao redor da palavra se ela fosse um literal de string. Quando você executa o programa, o compilador Kotlin interpreta a expressão dentro dos parênteses, que é count
, para a instrução println()
. Como a expressão é interpretada como 2
, o método println()
é chamado com 2
como entrada: println(2)
.
Portanto, a saída do programa é:
2
Só o número na saída não é muito útil. Seria mais útil ter uma mensagem mais detalhada na saída para explicar o que o 2
representa.
Modelo de string
Uma mensagem mais útil para mostrar na saída é:
You have 2 unread messages.
Siga estas etapas para que o programa gere uma mensagem mais útil.
- Atualize o programa no Playground Kotlin com o código abaixo. Para a chamada
println()
, transmita um literal de string que contenha o nome da variávelcount
. Coloque o texto entre aspas. Isso ainda não vai fornecer os resultados esperados. Você vai corrigir esse problema em uma etapa futura.
fun main() {
val count: Int = 2
println("You have count unread messages.")
}
- Execute o programa, e a saída vai ser:
You have count unread messages.
Essa frase não faz sentido! Você quer que o valor da variável count
seja mostrado na mensagem, e não o nome dela.
- Para corrigir a saída, você precisa de um modelo de string. Este é um modelo de string porque ele contém uma expressão de modelo, que é um cifrão (
$
) seguido do nome de uma variável. Uma expressão de modelo é avaliada e o valor dela é substituído na string.
Adicione um cifrão $
antes da variável count
. Nesse caso, a expressão de modelo $count
é interpretada como 2
, e o número 2
é substituído na string em que a expressão estava.
fun main() {
val count: Int = 2
println("You have $count unread messages.")
}
- Ao executar o programa, a saída vai ser o esperado:
You have 2 unread messages.
Essa frase faz muito mais sentido para o usuário.
- Agora, mude o valor inicial da variável
count
para outro literal de inteiro. Por exemplo, você pode escolher o número10
. Não mude o restante do código no programa.
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
- Execute o programa. Observe que a saída mudou de forma adequada e que você não precisou mudar a instrução
println()
no programa.
You have 10 unread messages.
Agora, você consegue ver a utilidade de um modelo de string. Você só escreveu o modelo de string uma vez no código ("You have $count unread messages."
). Se você mudar o valor inicial da variável count
, a instrução println()
vai continuar funcionando. O código está mais flexível agora.
Para enfatizar ainda mais esse ponto, compare os dois programas abaixo. O primeiro usa um literal de string, com o número exato de mensagens não lidas diretamente na string. Ele só funciona quando o usuário tem 10 mensagens não lidas.
fun main() {
println("You have 10 unread messages.")
}
Ao usar uma variável e um modelo de string neste segundo programa, o código pode se adaptar a mais situações. O segundo programa é mais flexível.
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
Inferência de tipo
Veja uma dica para escrever menos código ao declarar variáveis.
Inferência de tipo é quando o compilador Kotlin pode inferir (ou determinar) qual tipo de dado uma variável precisa ser, sem que o tipo esteja escrito explicitamente no código. Isso significa que você pode omitir o tipo de dado em uma declaração de variável se fornecer um valor inicial a ela. O compilador Kotlin analisa o tipo de dado do valor inicial e supõe que você quer que a variável contenha dados desse tipo.
A sintaxe abaixo é de uma declaração de variável que usa a inferência de tipo:
Voltando ao exemplo de count
, o programa inicialmente continha esta linha de código:
val count: Int = 2
No entanto, essa linha de código também pode ser escrita da maneira abaixo. O símbolo de dois-pontos (:
) e o tipo de dados Int
são omitidos. Você precisa digitar menos palavras na sintaxe atualizada e alcança o mesmo resultado da criação de uma variável Int
com o nome count
e o valor 2
.
val count = 2
O compilador Kotlin sabe que você quer armazenar 2
(um número inteiro) na variável count
. Então, ele pode inferir que a variável count
é do tipo Int
. Bem útil, não é? Esse é um exemplo de como criar código Kotlin é mais conciso.
Mesmo que o exemplo seja apenas sobre uma variável do tipo Int
, o conceito de inferência de tipo se aplica a todos os tipos de dados no Kotlin.
Operações matemáticas básicas com números inteiros
Qual é a diferença entre uma variável Int
com o valor 2
e uma variável String
com o valor "2"
? Quando ambas são mostradas na saída, elas parecem iguais.
A vantagem de armazenar números inteiros como um valor Int
(e não como uma String
) é que você pode executar operações matemáticas com variáveis Int
, como adição, subtração, divisão e multiplicação (veja outros operadores). Por exemplo, duas variáveis de número inteiro podem ser adicionadas para se chegar à soma delas. Em alguns casos, é razoável ter números inteiros armazenados como strings, mas o objetivo desta seção é mostrar o que é possível fazer com as variáveis Int
.
- Volte ao Playground Kotlin e remova tudo que estiver escrito no editor de código.
- Crie um novo programa em que você define uma variável de número inteiro para o número de e-mails não lidos em uma caixa de entrada e a inicialize com um valor como
5
. Você pode escolher outro número, se quiser. Defina uma segunda variável de número inteiro para o número de e-mails lidos em uma caixa de entrada. Comece com um valor como100
. Você pode escolher outro número, se quiser. Mostre o número total de mensagens na caixa de entrada somando os dois números inteiros.
fun main() {
val unreadCount = 5
val readCount = 100
println("You have ${unreadCount + readCount} total messages in your inbox.")
}
- Execute o programa. Ele vai mostrar o número total de mensagens na caixa de entrada:
You have 105 total messages in your inbox.
Para um modelo de string, você aprendeu que pode colocar o símbolo $
antes de um nome de variável. No entanto, se você tiver uma expressão mais complexa, vai precisar colocar a expressão entre chaves, com o símbolo $
antes delas: ${unreadCount + readCount}
. A expressão entre chaves, unreadCount + readCount
, é interpretada como 105
. Em seguida, o valor 105
é substituído no literal de string.
- Para ver mais detalhes sobre esse assunto, crie variáveis com diferentes nomes e valores iniciais e use expressões de modelo para mostrar mensagens na saída.
Por exemplo, modifique o programa para que mostre isto:
100 photos 10 photos deleted 90 photos left
Veja uma forma de criar o programa, embora existam outras maneiras que também funcionam.
fun main() {
val numberOfPhotos = 100
val photosDeleted = 10
println("$numberOfPhotos photos")
println("$photosDeleted photos deleted")
println("${numberOfPhotos - photosDeleted} photos left")
}
4. Atualizar variáveis
Quando um app está em execução, pode ser necessário atualizar o valor de uma variável. Por exemplo, em um app de compras, à medida que o usuário adiciona itens ao carrinho de compras, o valor total aumenta.
Vamos simplificar o caso de uso de compras em um programa simples. A lógica está escrita abaixo com linguagem humana, não em Kotlin. Isso é chamado de pseudocódigo, porque descreve os pontos principais de como o código vai ser criado, mas não contém todos os detalhes.
Na função principal de um programa:
- Crie uma variável
cartTotal
(total no carrinho) de número inteiro que comece com o valor0
. - O usuário adiciona um moletom que custa R$ 20 ao carrinho de compras.
- Atualize a variável
cartTotal
para20
, que é o custo atual dos itens no carrinho de compras. - Exiba o custo total dos itens no carrinho, que é a variável
cartTotal
, na saída.
Para simplificar ainda mais, não é necessário criar um código para quando o usuário adicionar itens ao carrinho de compras. Você ainda não aprendeu como um programa pode responder à entrada do usuário. Isso vai ser abordado em uma unidade futura. Portanto, concentre-se nas partes em que você cria, atualiza e mostra a variável cartTotal
.
- Substitua o código existente no Playground Kotlin pelo programa abaixo. Na linha 2, você inicializa a variável
cartTotal
como o valor0
. Como o valor inicial é indicado, não é necessário especificar o tipo de dadoInt
devido à inferência de tipo. Na linha 3 do programa, você tenta atualizar a variávelcartTotal
para20
com o operador de atribuição (=
). Na linha 4, você exibe a variávelcartTotal
usando um modelo de string.
fun main() {
val cartTotal = 0
cartTotal = 20
println("Total: $cartTotal")
}
- Execute o programa. Você vai ver um erro de compilação.
- O erro diz que não é possível reatribuir a
val
. O erro está na terceira linha do programa, que tenta mudar o valor da variávelcartTotal
para20.
Aval
cartTotal
não pode ser reatribuída a outro valor (20
) depois de receber um valor inicial (0
).
Val cannot be reassigned
Se você precisar atualizar o valor, declare a variável com a palavra-chave do Kotlin var
, em vez de val
.
- Palavra-chave
val
: use quando o valor da variável não muda. - Palavra-chave
var
: use quando o valor da variável pode mudar.
Com val
, a variável é somente leitura, o que significa que você só pode ler ou acessar o valor dela. Depois que o valor é definido, não é possível o editar ou modificar. Com var
, a variável é mutável, o que significa que o valor pode mudar ou ser modificado. O valor pode ser transformado.
Para se lembrar da diferença, considere val
um valor fixo e var
uma variável. Em Kotlin, é recomendável usar a palavra-chave val
em vez de var
sempre que possível.
- Atualize a declaração da variável
cartTotal
na segunda linha do programa para que usevar
em vez deval
. O código vai ficar assim:
fun main() {
var cartTotal = 0
cartTotal = 20
println("Total: $cartTotal")
}
- Observe a sintaxe do código na terceira linha do programa que atualiza a variável.
cartTotal = 20
Use o operador de atribuição (=
) para atribuir um novo valor (20
) à variável existente (cartTotal
). Não é necessário usar a palavra-chave var
de novo, porque a variável já está definida.
Usando a analogia da caixa, imagine o valor 20
sendo armazenado na caixa cartTotal
.
Veja um diagrama da sintaxe geral para atualizar uma variável que já foi declarada em uma linha de código anterior. Inicie a instrução com o nome da variável que você quer atualizar. Adicione um espaço, o sinal de igual e outro espaço. Em seguida, escreva o valor atualizado da variável.
- Execute o programa. O código será compilado corretamente. A saída vai ficar assim:
Total: 20
- Para ver como o valor da variável muda durante a execução do programa, mostre a variável
cartTotal
na saída depois de declarar a variável no início. Veja as mudanças no código abaixo. A terceira linha tem uma nova instruçãoprintln()
. Há também uma linha em branco que foi adicionada à quarta linha do código. As linhas em branco não afetam a forma como o compilador entende o código. Adicione uma linha em branco para facilitar a leitura do código, separando os blocos relacionados.
fun main() {
var cartTotal = 0
println("Total: $cartTotal")
cartTotal = 20
println("Total: $cartTotal")
}
- Execute o programa novamente. A saída vai ser:
Total: 0
Total: 20
É possível ver que, inicialmente, o total do carrinho de compras é 0
. Em seguida, ele é atualizado para 20
. A variável foi atualizada. Isso foi possível porque você mudou o cartTotal
, que era uma variável somente leitura (val
), para uma variável mutável (var
).
Lembre-se de usar var
apenas para declarar uma variável cujo valor muda. Caso contrário, use val
para declarar variáveis cujo valor não muda. Essa prática torna o código mais seguro. O uso de val
garante que as variáveis não vão ser atualizadas no programa se você não quiser que isso aconteça. Depois que uma val
recebe um valor, ela continua sempre com esse valor.
Operadores de incremento e decremento
Agora você sabe que uma variável precisa ser declarada como var
para poder atualizar o valor dela. Aplique esse conhecimento ao exemplo de mensagem de e-mail abaixo, que já deve reconhecer.
- Substitua o código no Playground Kotlin por este programa:
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
- Execute o programa. A saída vai ser:
You have 10 unread messages.
- Substitua a palavra-chave
val
pelavar
para tornar a variávelcount
mutável. Não vai haver nenhuma mudança na saída quando você executar o programa.
fun main() {
var count: Int = 10
println("You have $count unread messages.")
}
- No entanto, agora você pode atualizar a variável
count
para outro valor. Por exemplo, quando um novo e-mail chegar à caixa de entrada do usuário, você vai poder aumentar acount
em 1. Não é preciso criar um código para a chegada de um e-mail. O recebimento de dados da Internet é um tópico mais avançado, que vai ser abordado em uma unidade futura. Por enquanto, concentre-se na variávelcount
e a aumente em1
com esta linha de código:
count = count + 1
A expressão à direita do sinal de igual é count + 1
e é interpretada como 11
. Isso ocorre porque o valor atual de count
é 10
(que está definido na segunda linha do programa) e 10 + 1
é igual a 11
. Em seguida, com o operador de atribuição, o valor 11
é atribuído ou armazenado na variável count
.
Adicione esta linha de código ao programa na parte de baixo da função main()
. O código vai ficar assim:
fun main() {
var count = 10
println("You have $count unread messages.")
count = count + 1
}
Se você executar o programa agora, a saída vai ser a mesma de antes, porque você não adicionou nenhum código para usar a variável count
depois de a atualizar.
- Adicione outra instrução para mostrar o número de mensagens não lidas depois que a variável for atualizada.
fun main() {
var count = 10
println("You have $count unread messages.")
count = count + 1
println("You have $count unread messages.")
}
- Execute o programa. A segunda mensagem vai mostrar a
count
atualizada de11
mensagens.
You have 10 unread messages. You have 11 unread messages.
- Uma forma encurtada de aumentar uma variável em
1
é usar o operador de incremento (++
), composto por dois símbolos de adição. Ao usar esses símbolos diretamente após o nome de uma variável, você informa ao compilador que quer adicionar 1 ao valor atual da variável e depois armazenar o novo valor nela. As duas linhas de código abaixo são equivalentes, mas o uso do operador de incremento++
exige menos digitação.
count = count + 1
count++
Faça esta modificação no código e execute o programa. Não pode haver espaços entre o nome da variável e o operador de incremento.
fun main() {
var count = 10
println("You have $count unread messages.")
count++
println("You have $count unread messages.")
}
- Execute o programa. A saída é a mesma, mas agora você aprendeu sobre um novo operador.
You have 10 unread messages. You have 11 unread messages.
- Agora, modifique a linha 4 do programa para usar o operador de decremento (
--
) após o nome da variávelcount
. O operador de decremento é composto por dois símbolos de subtração. Ao colocar o operador de decremento após o nome da variável, você informa ao compilador que quer diminuir o valor da variável em1
e armazenar o novo valor nela.
fun main() {
var count = 10
println("You have $count unread messages.")
count--
println("You have $count unread messages.")
}
- Execute o programa. A saída vai ficar assim:
You have 10 unread messages. You have 9 unread messages.
Nesta seção, você aprendeu a atualizar uma variável mutável usando o operador de incremento (++
) e o de decremento (--
). Mais especificamente, count++
é o mesmo que count = count + 1
e count--
é o mesmo que count = count - 1
.
5. Outros tipos de dados
Anteriormente no codelab, apresentamos alguns tipos de dados básicos comuns: String
, Int
, Double
e Boolean
. Você acabou de usar o tipo de dado Int
. Agora vamos abordar os outros tipos.
Tipo de dado de Kotlin | Qual dado pode conter |
| Texto |
| Número inteiro |
| Número decimal |
|
|
Teste os programas abaixo no Playground Kotlin para ver a saída.
Double
Quando precisar de uma variável com um valor decimal, use o tipo Double
. Para conferir o intervalo válido dessa variável, consulte esta tabela (link em inglês) e os exemplos dos dígitos decimais que ela pode armazenar.
Imagine que você está indo a algum lugar e que a viagem é dividida em três partes, porque é preciso fazer paradas ao longo do caminho. Este programa mostra a distância total que falta para chegar ao destino.
- Digite o código abaixo no Playground Kotlin. Você entende o que está acontecendo em cada linha de código?
fun main() {
val trip1: Double = 3.20
val trip2: Double = 4.10
val trip3: Double = 1.72
val totalTripLength: Double = 0.0
println("$totalTripLength miles left to destination")
}
Três variáveis com os nomes trip1
, trip2
e trip3
são declaradas para representar a distância de cada parte da viagem. Todas elas são variáveis Double
, porque armazenam valores decimais. Use val
para declarar cada variável, porque os valores delas não mudam ao longo do programa. O programa também cria uma quarta variável, com o nome totalTripLength
(tempo total da viagem), cujo valor inicial agora é 0.0
. A última linha do programa mostra uma mensagem com o valor da variável totalTripLength
.
- Corrija o código para que a variável
totalTripLength
seja a soma das três durações da viagem.
val totalTripLength: Double = trip1 + trip2 + trip3
A expressão à direita do sinal de igual é interpretada como 9.02
porque 3.20 + 4.10 + 1.72
é igual a 9.02
. O valor 9.02
é armazenado na variável totalTripLength
.
O programa vai ficar parecido com o código abaixo:
fun main() {
val trip1: Double = 3.20
val trip2: Double = 4.10
val trip3: Double = 1.72
val totalTripLength: Double = trip1 + trip2 + trip3
println("$totalTripLength miles left to destination")
}
- Execute o programa. O resultado vai ser:
9.02 miles left to destination
- Atualize o código para remover o tipo de dado
Double
das declarações da variável, porque ele é desnecessário devido à inferência de tipo. O compilador Kotlin pode inferir que essas variáveis são do tipo de dadoDouble
com base nos números decimais fornecidos como valores iniciais.
fun main() {
val trip1 = 3.20
val trip2 = 4.10
val trip3 = 1.72
val totalTripLength = trip1 + trip2 + trip3
println("$totalTripLength miles left to destination")
}
- Execute o código novamente para conferir se ele ainda é compilado. A saída vai ser a mesma, mas agora o código está mais simples.
String
Quando você precisar de uma variável que armazene texto, use uma String
. Coloque aspas em torno dos valores literais da string, como em "Hello Kotlin"
. Não é preciso colocar os valores literais das variáveis Int
e Double
entre aspas.
- Copie e cole este programa no Playground Kotlin.
fun main() {
val nextMeeting = "Next meeting:"
val date = "January 1"
val reminder = nextMeeting + date
println(reminder)
}
Há duas variáveis String
declaradas, uma nextMeeting
(próxima reunião) e a outra date
(data). Em seguida, uma terceira variável String
é declarada com o nome reminder
(lembrete). Ela é definida como sendo igual à variável nextMeeting
mais a date
.
Com o símbolo "+", você pode juntar duas strings, o que é chamado de concatenação. As duas strings são combinadas, uma após a outra. O resultado da expressão nextMeeting + date
é "Next meeting:January 1"
(A próxima reunião é em: 1º de janeiro), como mostrado no diagrama abaixo.
O valor "Next meeting:January 1"
é armazenado na variável reminder
usando o operador de atribuição da linha 4 do programa.
- Execute o programa. O resultado vai ser:
Next meeting:January 1
Quando você concatena duas strings, não são adicionados espaços entre elas. Se você quiser que haja um espaço após os dois-pontos na string resultante, é preciso adicionar o espaço a uma das strings.
- Atualize a variável
nextMeeting
para que tenha um espaço a mais no fim da string, antes das aspas de fechamento. Como alternativa, também é possível adicionar um espaço ao início da variáveldate
. O programa vai ficar assim:
fun main() {
val nextMeeting = "Next meeting: "
val date = "January 1"
val reminder = nextMeeting + date
println(reminder)
}
- Execute o programa novamente. Agora haverá um espaço após os dois-pontos na mensagem de saída.
Next meeting: January 1
- Modifique o código para concatenar ou adicionar outro texto à expressão, que é armazenada na variável
reminder
.
Use o símbolo +
para adicionar o literal de string " at work"
(no trabalho) ao final da string reminder
.
- Execute o programa.
A saída vai ficar assim:
Next meeting: January 1 at work
O código abaixo mostra uma maneira de implementar o comportamento.
fun main() {
val nextMeeting = "Next meeting: "
val date = "January 1"
val reminder = nextMeeting + date + " at work"
println(reminder)
}
Não há aspas entre nextMeeting
e date
porque esses são nomes de variáveis de string existentes em que os respectivos valores são texto entre aspas. Por outro lado, o literal " at work"
não foi definido anteriormente em nenhuma variável. Portanto, use aspas ao redor desse texto para que o compilador saiba que essa é uma string que precisa ser concatenada com as outras.
Tecnicamente, é possível conseguir a mesma saída declarando uma variável String
com todo o texto, em vez de usar variáveis separadas. No entanto, o objetivo deste exercício é demonstrar como declarar e manipular variáveis String
e principalmente como concatenar strings separadas.
- Ao ler códigos que contêm strings, você pode encontrar sequências de escape. Elas são caracteres precedidos por um símbolo de barra invertida (
\
), também chamado de barra invertida de escape.
Veja o exemplo \"
em um literal de string, como mostrado abaixo. Copie e cole este código no Playground Kotlin.
fun main() {
println("Say \"hello\"")
}
Você aprendeu anteriormente a usar uma string literal entre aspas duplas. Mas e se você quiser usar o símbolo "
na string? Para isso, é necessário adicionar o símbolo de barra invertida antes das aspas duplas na string, desta forma: \"
. Não se esqueça que a string inteira ainda precisa estar entre aspas duplas.
- Execute o programa para conferir a saída. Ela vai ser:
Say "hello"
Na saída, hello
está entre aspas porque adicionamos \"
antes e depois de hello
na instrução println()
.
Para conferir outras sequências de escape com suporte no Kotlin, consulte a página de documentação sobre sequências de escape (link em inglês). Por exemplo, se você quiser uma nova linha na string, use o símbolo \
antes do caractere n, como em \n
.
Você aprendeu sobre concatenação de strings e também sobre sequências de escape em strings. Vamos ver o último tipo de dado abordado neste codelab.
Booleano
O tipo de dado Boolean
é útil quando a variável tem apenas dois valores possíveis, representados por true
ou false
.
Um exemplo é uma variável que representa se o modo avião de um dispositivo está ativado ou desativado ou se as notificações de um app estão ativadas ou não.
- Digite o código abaixo no Playground Kotlin. Na linha 2 do programa, declare uma variável
Boolean
com o nomenotificationsEnabled
(notificações ativadas) e dê a ela o valor inicial detrue
. Tecnicamente, é possível omitir: Boolean
na declaração. Você pode o remover, se quiser. A terceira linha do programa mostra o valor da variávelnotificationsEnabled
.
fun main() {
val notificationsEnabled: Boolean = true
println(notificationsEnabled)
}
Execute o programa. A saída vai ser assim:
true
- Mude o valor inicial da variável
Boolean
para "false" na segunda linha do programa.
fun main() {
val notificationsEnabled: Boolean = false
println(notificationsEnabled)
}
Execute o programa. A saída vai ser assim:
false
- Outros tipos de dados podem ser concatenados em
Strings
. Por exemplo, você pode concatenar valoresBooleans
comStrings
. Use o símbolo+
para concatenar (ou anexar) o valor da variável booleananotificationsEnabled
ao final da string"Are notifications enabled? "
(as notificações estão ativadas?).
fun main() {
val notificationsEnabled: Boolean = false
println("Are notifications enabled? " + notificationsEnabled)
}
Execute o programa para ver o resultado da concatenação. A saída do programa vai ser esta:
Are notifications enabled? false
Observe que é possível definir a variável Boolean
como um valor true
ou false
. Com as variáveis Boolean
, você pode codificar cenários mais interessantes, em que um conjunto de instruções é executado quando uma variável Boolean
tiver o valor true
. Ou seja, se a variável Boolean
tiver um valor "false", as instruções vão ser ignoradas. Você vai aprender mais sobre variáveis Booleans
em um próximo codelab.
6. Convenções de programação
No codelab anterior, apresentamos o guia de estilo do Kotlin para criar códigos Android de maneira consistente, conforme recomendado pelo Google e seguido por outros desenvolvedores profissionais.
Veja algumas outras convenções de formatação e programação que você pode seguir, com base nos novos tópicos que aprendeu:
- Os nomes das variáveis precisam seguir as regras de letras concatenadas e começar com uma letra minúscula.
- Em uma declaração de variável, precisa haver um espaço após os dois-pontos ao especificar o tipo de dado.
- Precisa haver um espaço antes e depois de um operador, como o de atribuição (
=
), adição (+
), subtração (-
), multiplicação (*
) e divisão (/
), entre outros.
- Conforme você cria programas mais complexos, há um limite recomendado de 100 caracteres por linha. Isso garante que você possa ler todo o código de um programa na tela do computador com facilidade, sem precisar rolar a página horizontalmente.
7. Comentários no código
Ao programar, outra boa prática é adicionar comentários que descrevam o que o código pretende fazer. Os comentários podem ajudar as pessoas que lerem o código a segui-lo com mais facilidade. Dois símbolos de barras, ou //
, indicam que o texto depois delas no restante da linha é considerado um comentário. Por isso, ele não é interpretado como código. É comum adicionar um espaço após os dois símbolos de barras.
// This is a comment.
Um comentário também pode começar no meio de uma linha de código. No exemplo abaixo, height = 1
é uma instrução de programação normal. // Assume the height is 1 to start with
é interpretado como um comentário e não é considerado parte do código.
height = 1 // Assume the height is 1 to start with
Se você quiser descrever o código com mais detalhes e o comentário ultrapassar 100 caracteres em uma linha, use um comentário de várias linhas. Inicie o comentário de várias linhas com uma barra (/
) e um símbolo de asterisco (*
), como /*
. Adicione um asterisco ao início de cada nova linha do comentário. Por fim, termine o comentário com um asterisco e um símbolo de barra */
.
/*
* This is a very long comment that can
* take up multiple lines.
*/
Este programa contém comentários de uma e de várias linhas que descrevem o que está acontecendo:
/*
* This program displays the number of messages
* in the user's inbox.
*/
fun main() {
// Create a variable for the number of unread messages.
var count = 10
println("You have $count unread messages.")
// Decrease the number of messages by 1.
count--
println("You have $count unread messages.")
}
Como mencionado anteriormente, é possível adicionar linhas vazias em branco ao código para agrupar instruções relacionadas e facilitar a leitura do código.
- Adicione alguns comentários a um snippet de código anterior que você usou.
- Execute o programa para garantir que o comportamento não mudou, porque os comentários não devem afetar a saída.
8. Conclusão
Ótimo trabalho! Você aprendeu sobre as variáveis em Kotlin, por que elas são úteis na programação e como as criar, atualizar e usar. Você testou diferentes tipos de dados básicos em Kotlin, incluindo os tipos Int
, Double
, String
e Boolean
. Também aprendeu sobre a diferença entre as palavras-chave val
e var
.
Todos esses conceitos são fundamentais na sua jornada para se tornar desenvolvedor.
Esperamos você no próximo codelab.
Resumo
- Uma variável é um contêiner de um único dado.
- É necessário declarar uma variável antes de a usar.
- Use a palavra-chave
val
para definir uma variável somente leitura em que o valor não pode mudar depois de ser atribuído. - Use a palavra-chave
var
para definir uma variável que é mutável, ou seja, pode mudar. - Em Kotlin, é preferível usar
val
em vez devar
sempre que possível. - Para declarar uma variável, comece com a palavra-chave
val
ouvar
. Em seguida, especifique o nome da variável, o tipo de dado e o valor inicial. Por exemplo:val count: Int = 2
. - Com a inferência de tipo, você pode omitir o tipo de dado na declaração da variável caso um valor inicial seja fornecido.
- Alguns tipos de dados básicos do Kotlin comuns são:
Int
,String
,Boolean
,Float
eDouble
. - Use o operador de atribuição (
=
) para atribuir um valor a uma variável durante a declaração dela ou ao atualizar a variável. - Só é possível atualizar uma variável que foi declarada como mutável (com
var
). - Use o operador de incremento (
++
) ou decremento (--
) para aumentar ou diminuir o valor de uma variável de número inteiro em 1, respectivamente. - Use o símbolo
+
para concatenar strings. Também é possível concatenar variáveis de outros tipos de dados, por exemplo,Int
eBoolean
, comoStrings
.
Saiba mais
- Variáveis (link em inglês)
- Tipos básicos (link em inglês)
- Modelos de string (link em inglês)
- Palavras-chave e operadores (link em inglês)
- Sintaxe básica (link em inglês)