Buscar

Desenvolvimento de Aplicativos para Dispositivos Móveis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 270 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 270 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 270 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

E d i t o r a
SÃO PAULO/ SP
Desenvolvimento 
de Aplicativos para 
Dispositivos Móveis
RAFAEL MUNHOZ ALMEIDA DA SILVA
Editora:
E d i t o r a
1º EDIÇÃO - 2021 | SÃO PAULO/ SP
RAFAEL MUNHOZ ALMEIDA DA SILVA
DESENVOLVIMENTO DE 
APLICATIVOS PARA 
DISPOSITIVOS MÓVEIS
DESENVOLVIMENTO DE APLICATIVOS 
PARA DISPOSITIVOS MÓVEIS
EXPEDIENTE
COORDENAÇÃO GERAL
Nelson Boni
COORDENAÇÃO DE 
REVISÃO ORTOGRÁFICA
Esthela Malacrida
AUTOR(ES)
Rafael Munhoz Almeida da 
Silva
COORDENAÇÃO, 
PROJETO GRÁFICO E CAPA
João Guedes
1º EDIÇÃO - 2021 | SÃO PAULO/ SP
Ficha Catalográfica/ ISBN
CATALOGAÇÃO ELABORADA POR GLAUCY DOS SANTOS SILVA - CRB8/6353
E d i t o r a
4
Apresentação
Prezado Aluno,
V ivemos na era dos aplicativos para dispositivos mó-veis, hoje em dia os dispositivos móveis são muito acessíveis economicamente e a maioria da popula-
ção possui pelo menos um destes dispositivos, o que gera 
uma demanda muito alta do mercado por profissionais com 
a habilidade de desenvolver este tipo de software. 
Neste livro você vai entrar em contato com o desenvolvi-
mento de aplicativos para dispositivos móveis utilizando a 
plataforma Android. Você verá como instalar o ambiente de 
desenvolvimento oficial do Android que é o Android Studio. 
Terá uma introdução sobre a nova linguagem oficial de 
programação chamada Kotlin, aprenderá a usar o editor 
de layout para construir interfaces gráficas e ao longo do 
material irá desenvolver dois aplicativos.
Portanto desejo a você estudante, uma ótima leitura, e 
que você se divirta ao conhecer um pedacinho deste enorme 
mundo que é o de desenvolvimento de aplicativos para dis-
positivos móveis.
Bons Estudos!
	� SUMÁRIO:
UNIDADE 1: 
PROGRAMANDO PARA O ANDROID ���������������������������������1-1
CAPÍTULO 1: 
INTRODUÇÃO AO ANDROID ��������������������������������������������� 1-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 1-10
CAPÍTULO 2: 
INTRODUÇÃO AO ANDROID STUDIO ������������������������������������ 2-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 2-11
UNIDADE 2: 
INTRODUÇÃO A LINGUAGEM KOTLIN �������������������������������3-1
CAPÍTULO 3: 
VARIÁVEIS, TIPOS E OPERADORES ������������������������������������ 3-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 3-21
CAPÍTULO 4: 
CONTROLE DE FLUXO���������������������������������������������������� 4-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 4-12
UNIDADE 3: 
APROFUNDANDO NA LINGUAGEM KOTLIN �������������������������5-1
CAPÍTULO 5: 
LISTAS E FUNÇÕES ������������������������������������������������������ 5-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 5-13
CAPÍTULO 6: 
CLASSES ������������������������������������������������������������������ 6-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 6-17
UNIDADE 4: 
PRIMEIRO APLICATIVO: ÁLCOOL OU GASOLINA �������������������7-1
CAPÍTULO 7: 
DEFININDO O LAYOUT ��������������������������������������������������� 7-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 7-13
CAPÍTULO 8: 
CODIFICANDO A ACTIVITY ���������������������������������������������� 8-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 8-15
UNIDADE 5: 
SEGUNDO APLICATIVO: LISTA DE COMPRAS ����������������������9-1
CAPÍTULO 9: 
RECYCLERVIEW E RECYCLERADAPTER ������������������������������� 9-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������� 9-31
CAPÍTULO 10: 
VISUALIZANDO E ADICIONANDO ITENS ������������������������������ 10-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������ 10-26
UNIDADE 6: 
PERSISTÊNCIA NO APLICATIVO LISTA DE COMPRAS ����������� 11-1
CAPÍTULO 11: 
CRIANDO A CAMADA DE PERSISTÊNCIA ���������������������������� 11-2
EXERCÍCIOS PROPOSTOS ������������������������������������������������ 11-12
CAPÍTULO 12: 
INTEGRANDO A CAMADA DE PERSISTÊNCIA ����������������������� 12-1
EXERCÍCIOS PROPOSTOS ������������������������������������������������ 12-17
REFERÊNCIAS ��������������������������������������������������������� 13-1
GABARITO ������������������������������������������������������������� 14-1
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
UNIDADE 1: 
PROGRAMANDO PARA O ANDROID
Caro(a) Aluno(a)
Seja bem-vindo(a)!
Nesta primeira unidade iremos dar início aos estudos, vere-
mos uma breve visão histórica do sistema operacional Android. 
Nesta unidade também veremos de maneira geral a arquitetura 
da plataforma.
Ótimos estudos!
Conteúdos da Unidade:
Evolução do sistema operacional Android, Visão geral da ar-
quitetura, Instalação do ambiente de desenvolvimento oficial, 
Desenvolvimento do projeto Hello World.
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
CAPÍTULO 1: 
INTRODUÇÃO AO ANDROID
1-3
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
1�1 O sistema operacional Android
No início dos anos 2000, os celulares estavam começando a 
se popularizar, o tamanho dos aparelhos estava diminuindo, ou-
tras funcionalidades estavam sendo embarcadas nos aparelhos, 
tais como agendas eletrônicas e até mesmo jogos.
Com o aumento da produção o custo dos aparelhos começou 
a diminuir tornando o celular um dispositivo acessível a uma boa 
parte da população.
Porém cada fabricante possuía o seu próprio sistema embar-
cado, ou seja, um aplicativo desenvolvido para um celular de um 
determinado fabricante não seria compatível com outro dispositi-
vo de outro fabricante. 
Ou seja, para que um aplicativo funcionasse em vários dispo-
sitivos ele teria que ser reescrito e recompilado, gerando custo de 
desenvolvimento e manutenção.
Já prevendo que o smartphone nasceria em breve o primeiro 
sistema operacional comum foi criado. Este sistema é o Symbian, 
que possuía código fechado, os aplicativos escritos para ele deve-
riam usar a linguagem C++.
Alguns anos mais tarde nasce o Android, que é um sistema 
operacional aberto, ou seja, os fabricantes poderiam customizá-lo, 
diferente do Symbian que era fechado.
Os aplicativos para o sistema operacional Android podem ser 
escritos em C++ e Java. 
Existem várias teorias que descrevem o sucesso do Android 
sobre o Symbiam, algumas dizem que o Android foi mais aceito 
pois era mais fácil de desenvolver aplicativos, pois o framework, 
1-4
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
que são as ferramentas que usamos para fazer campos de texto, 
tablets etc, eram mais fáceis de entender.
E na época a linguagem Java tinha uma curva de aprendiza-
do bem menor que a linguagem C++.
Algumas teorias afirmam que o Android, por ser um sistema 
operacional de código fonte aberto, ou seja, por poder ser custo-
mizado pelos fabricantes foi mais bem aceito e se espalhou pela 
maioria deles.
Quando o Android foi lançado para uso público, ele já pos-
suía todo um ecossistema para a distribuição dos aplicativos, ou 
seja, era muito mais fácil encontrar e instalar aplicativos para os 
dispositivos baseados em Android do que para os dispositivos 
Symbian, alguns analistas dizem que esse foi o principal fator que 
fez do Android o sistema operacional mais popular para dispositi-
vos móveis.
1.1.1 Evolução do sistema Android
O sistema android já possui aproximadamente 13 anos, du-
rante este tempo várias versões foram lançadas e cada uma delas 
possui um apelido, baseado no nome de um doce. Veja na tabela 
abaixo o resumo com todas as versões lançadas:
Tabela 1-1: Evolução das versões do Android
Versão Apelido Lançamento API
11 Android 11 (R) 8 de setembro de 2020[231] 30
10 Android 10 (Q) 3 de setembro de 2019 29
9 Pie 6 de agosto de 2018 28
1-5
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
Versão ApelidoLançamento API
8.1
Oreo
15 de dezembro de 2017 27
8.0 21 de agosto de 2017 26
7.1.x
Nougat
5 de dezembro de 2016 25
7.0.x 22 de agosto de 2016 24
6.0.-6.0.1 Marshmallow 05 de Outubro de 2015 23
5.1-5.1.1
Lollipop
10 de março de 2015 22
5.0-5.0.2 12 de novembro de 2014 21
4.4-4.4.4 KitKat 31 de outubro de 2013 19
4.3.x
Jelly Bean
24 de julho de 2013 18
4.2.x 13 de novembro de 2012 17
4.1.x 9 de julho de 2012 16
4.0.3–4.0.4 Ice Cream Sandwich 16 de dezembro de 2011 15
2.3.3–2.3.7 Gingerbread 9 de fevereiro de 2011 10
2.2-2.2.3 Froyo 20 de maio de 2010 8
2.0-2.1 Eclair 26 de outubro de 2009 5
1.6 Donut 15 de setembro de 2009 4
1.5 Cupcake 27 de abril de 2009 2
1.0-1.1 Petit Four ou Beta 23 de setembro de 2008 1
Fonte: https://pt.wikipedia.org/wiki/Android
1�2 Arquitetura da plataforma Android
Podemos dividir a plataforma Android em várias camadas 
com diferentes níveis de abstração, veja abaixo a figura com essas 
camadas, começando do nível de abstração maior para o menor:
1-6
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
Figura 1-1: Android Studio
1-7
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
1.2.1 System Apps
Nesta camada encontraremos os aplicativos tais como o 
Dialer (Aplicativo de telefone), aplicativo de e-mail, 
aplicativo de calendário entre outros.
Como o Android possui o código fonte aberto, podemos 
modificar estes aplicativos para satisfazer as necessidades de um 
determinado fabricante, como por exemplo podemos modificar o 
aplicativo de telefone para que ele recuse chamadas de números 
considerados indesejáveis.
1.2.2 Java API Framework
Quando criamos um aplicativo Android usando tanto a lin-
guagem Java quanto a linguagem Kotlin não precisamos nos pre-
ocupar com elementos básicos de visualização, como campos de 
texto, listas entre outros elementos tais como as bibliotecas de no-
tificação localização e até mesmo as classes do tipo Activity que 
representam cada tela da aplicação Android.
Mais adiante no material você vai aprender mais sobre o que 
são classes e o mais importante o que é uma classe do tipo Activity. 
Durante o desenvolvimento dos projetos deste livro você 
criará e usará muito as classes do tipo Activity.
1.2.3 Native C/C++ Libraries / Android Runtime
É nessa camada que estão as bibliotecas implementadas em 
C/C++, temos por exemplo nesta camada, a biblioteca OpenGL 
ES, muito utilizada em computação gráfica. 
1-8
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
A biblioteca Webkit utilizada no processamento de páginas 
html, código javascript entre outras funcionalidades de um 
browser de internet.
As bibliotecas desta camada também podem ser acessadas 
por meio da linguagem Java, na camada Java API Framework.
A Android Runtime (ART) é a máquina virtual que processa 
o bytecode do Java/Kotlin. Quando um aplicativo é compi-
lado para a plataforma Android, tanto na linguagem Java quanto 
na linguagem Kotlin, teremos como produto um arquivo do tipo 
.DEX é neste arquivo que teremos o bytecode do código que será 
lido pela ART.
Podemos também desenvolver aplicativos nativos para esta 
camada utilizando o Android NDK, ou seja, podemos escrever di-
retamente código C++ que será compilado pelo NDK.
1.2.4 Hardware Abstraction Layer (HAL)
Aqui encontramos as abstrações dos dispositivos do sistema 
tais como sensores, câmera de vídeo, bluetooth entre outros. Cada 
um destes dispositivos vai prover nesta camada uma interface para 
que ele possa ser acessado por código Java ou Kotlin.
Um exemplo é quando queremos abrir a câmera em nosso 
aplicativo, usaremos a linguagem Kotlin ou Java para manipular a 
interface deste hardware que é fornecida pela camada HAL.
1.2.5 Linux Kernel
Como última camada da arquitetura temos o kernel do linux, 
que fornece a todas as camadas acima, funcionalidades de sistema 
1-9
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
1< / >
operacional como gerenciamento de memória, controle de proces-
sos entre outras.
É nesta camada que os fabricantes também desenvolvem 
os drivers específicos para o hardware dos dispositivos. Como 
por exemplo um fabricante desenvolve um telefone novo, com um 
novo controlador de rede, é na camada do kernel que ele vai imple-
mentar o novo driver para este novo hardware.
1-10
	� EXERCÍCIOS PROPOSTOS
1) Escolha a alternativa correta sobre o sistema operacional Android:
( ) -a) Este sistema operacional Android não possui código aberto.
( ) -b) Não podemos usar a linguagem C++ para escrever aplicati-
vos para o sistema operacional Android.
( ) -c) Um aplicativo escrito para um dispositivo em Android deve-
rá ser reescrito para outro dispositivo de hardware diferente 
e mesma versão do Android.
( ) -d) O Android é um sistema operacional de código aberto e pode 
ser customizado por qualquer fabricante de celulares.
( ) -e) A linguagem Java não pode ser mais utilizada no desenvolvi-
mento de aplicativos Android.
2) Escolha a alternativa correta sobre a API 30 do Android
( ) -a) A API 30 ainda não foi lançada.
( ) -b) A API 30 é da versão 8.1
( ) -c) A API 30 foi lançada em 21 de agosto de 2017
( ) -d) A API 30 foi lançada em 8 de setembro de 2020
( ) -e) N.d.a.
3) Escolha a alternativa correta que afirma por que o sistema operacional 
Android superou o sistema operacional Symbian:
( ) -a) O sistema operacional Android superou o Symbian pois o 
Android era um sistema de código fechado e não poderia ser 
customizado pelos fabricantes, tornando ele muito mais ro-
busto pois seu código fonte não poderia ser modificado.
( ) -b) Segundo os desenvolvedores, apesar do framework de de-
senvolvimento do Android ser mais complicado pois não 
possui elementos já prontos como caixas de texto e botões, 
1-11
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
o Android superou o Symbian pois seus aplicativos eram es-
critos em java.
( ) -c) O Android superou o Symbian por possuir um framework 
completo com muitos elementos gráficos e outras bibliote-
cas como conexão de rede, acesso ao sistema de arquivos, 
além de ser de código aberto e de possuir um ecossistema 
completo para o download de aplicativos.
( ) -d) O Android superou o Symbian apenas por possibilitar o de-
senvolvimento dos aplicativos usando a linguagem Java.
( ) -e) Nda.
4) Qual é o nível de software que fornece para as outras camadas gerencia-
mento de memória e controle de processos:
( ) -a) É a camada do Kernel do Linux.
( ) -b) É a camada chamada HAL.
( ) -c) É a System Apps.
( ) -d) É a Java API Framework.
( ) -e) É a Android Runtime.
5) Escolha a afirmativa correta sobre o arquivo DEX
( ) -a) É neste arquivo que escrevemos o código fonte do nosso 
aplicativo em Kotlin ou em Java.
( ) -b) É neste arquivo que o compilador escreve o bytecode origi-
nário do código Kotlin ou Java que foi escrito, este arquivo 
será processado diretamente no Kernel do Linux.
( ) -c) É neste arquivo que o compilador escreve o bytecode origi-
nário do código Kotlin ou Java que foi escrito, este arquivo 
será processado pela Android Runtime que está no nível das 
bibliotecas de código nativo C/C++.
( ) -d) Arquivos DEX não estão disponíveis na plataforma Android.
( ) -e) N.d.a.
1-12
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
6) Quando criamos um aplicativo de lista de compra, para a plataforma 
Android escrito nas linguagens Java ou Kotlin, em qual camada este apli-
cativo pode ser classificado:
( ) -a) Na camada Java API Framework, pois o código Java e o có-
digo Kotlin serão executados pela ART.
( ) -b) Será classificado como a camada Android Runtime, pois este 
código será executado pela máquina virtual implementada 
neste nível.
( ) -c) Este aplicativo de lista de compras será classificado na ca-
mada chamada System Apps.
( ) -d) O aplicativo deverá ser classificado nacamada Native C/C++ 
pois o código Kotlin ou Java vai virar código C/C++ depois 
de compilado.
( ) -e) O aplicativo será considerado como sendo da camada HAL 
pois precisará acessar a tela e portanto terá que fazer uma 
abstração de hardware.
7) Digamos que um fabricante vai lançar um novo hardware que mede a 
temperatura do ambiente pelo celular, considere esta situação e escolha 
abaixo a afirmativa correta
( ) -a) O Fabricante deverá apenas criar um aplicativo na camada 
System Apps para mostrar a temperatura.
( ) -b) O Fabricante deverá modificar o Android Runtime, para que 
o arquivo .DEX que possua o código deste novo sensor de 
temperatura possa ser interpretado.
( ) -c) O Fabricante deverá apenas criar uma abstração no nível 
HAL e os desenvolvedores poderão acessar este novo sensor 
em seus aplicativos.
( ) -d) O Fabricante deverá incluir o código do driver no nível do 
kernel do Linux e criar uma abstração na camada HAL. Com 
isso já será suficiente para que um desenvolvedor crie um 
aplicativo escrito em Java ou Kotlin para mostrar de forma 
gráfica a temperatura do ambiente.
( ) -e) O Fabricante deverá esperar o Google implementar o driver 
do novo sensor de temperatura, pois o código do Android é 
fechado.
1-13
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
8) Sobre a Android Runtime (ART) escolha a alternativa verdadeira. 
( ) -a) A Android Runtime fica na camada JAVA API Framework 
pois é a máquina virtual que executa os aplicativos compila-
dos em Java ou Kotlin.
( ) -b) A Android Runtime fica no mesmo nível da camada Native 
C/C++ e é responsável por executar o código compilado dos 
aplicativos escritos em Java ou Kotlin.
( ) -c) A Android Runtime executa apenas código compilado que 
foi escrito na linguagem C/C++
( ) -d) A Android Runtime não acessa as bibliotecas escritas em C/
C++
( ) -e) A Android Runtime não processa arquivos do tipo .DEX
9) Sobre a Java API Framework, escolha a alternativa verdadeira
( ) -a) Quando precisamos de um elemento gráfico, como por 
exemplo um campo texto, utilizamos a Java API Framework.
( ) -b) A Java API Framework é responsável pelo controle de me-
mória de baixo nível.
( ) -c) A Android Runtime fica na camada da Java API Framework.
( ) -d) Um aplicativo escrito em Kotlin não pode usar as classes da 
Java API Framework.
( ) -e) É na Java API Framework onde estão implementados os dri-
vers de controle do hardware.
10) Qual camada fornece uma abstração para o acesso do hardware que con-
trola a câmera de um dispositivo.
( ) -a) A camada do Linux Kernel, pois é nela que os drivers estão 
escritos.
( ) -b) É na Java API Framework, pois a abstração está escrita em 
Java.
( ) -c) É na camada Hardware Abstraction Layer.
( ) -d) As classes de abstração para o acesso ao hardware estão es-
critas na camada de System Apps.
( ) -e) N.d.a.
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
CAPÍTULO 2: 
INTRODUÇÃO AO ANDROID STUDIO
2-2
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
2�1 Instalando e utilizando o Android Studio
No início a plataforma Android não possuia uma IDE (In-
tegrated Development Environment), ou seja, cabia ao de-
senvolvedor baixar todas as ferramentas necessárias, tais como o 
Java, o SDK do Android, o Emulador do Android, e alguma outra 
ferramenta que integrava todas essas, geralmente era utilizado o 
Eclipse com um plugin para o desenvolvimento Android.
Isso tudo mudou quando o Android Studio foi criado, basea-
do no IntelliJ, o Android Studio baixa automaticamente todas 
as ferramentas necessárias para o desenvolvimento de aplicati-
vos Android.
O Android Studio pode ser instalado nos sistemas operacio-
nais Windows, Mac OS e Linux, para isso acesse o link https://
developer.android.com/studio e baixe o executável de instalação 
do sistema operacional que você está utilizando e siga os passos 
da instalação.
Quando a instalação terminar, execute o aplicativo do An-
droid Studio, você deverá ver algo similar a figura abaixo no mo-
mento da execução:
2-3
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
Figura 2-1: Android Studio
2.1.1 Primeiro projeto Android
Agora que temos o Android Studio instalado e rodando, te-
mos tudo o que precisamos para criar o nosso primeiro projeto, 
este projeto será bem simples pois apenas mostrará na tela do dis-
positivo móvel o texto: “Olá Mundo”.
Para isso, clique no botão New Project, escolha a opção 
Phone and Tablet e em seguida a opção Empty Activity, 
com as duas opções selecionadas clique no botão Next, como 
mostrado na figura abaixo:
2-4
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
Figura 2-2: Criando novo projeto
Na próxima tela você deverá dar um nome ao seu aplicativo, 
vamos chamá-lo de OlaMundo, este texto vai no campo Name.
O próximo campo chamado Package Name, é o nome do 
pacote básico do seu projeto, o texto que vai aqui é geralmente o in-
verso de um domínio, que pode ser o domínio de uma página do seu 
aplicativo, no meu caso eu vou colocar um possível domínio inver-
tido para o meu aplicativo, que vai ser com.munhra.olamundo.
Vamos deixar o campo Save Location, do jeito que ele 
está, certamente o do projeto que você criou é bem diferente do 
valor da imagem, mas não se preocupe, não precisa modificar esse 
campo, a não ser que você deseje colocar o aplicativo em outro local.
O campo Language é importante, no capítulo anterior disse-
mos que os aplicativos escritos para a plataforma Android podem 
2-5
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
ser escritos em C++ e Java, porém desde 2017 a linguagem Kotlin 
foi anunciada como sendo a linguagem oficial do Android, por isso 
vamos deixar o campo Language com o valor Kotlin. Falaremos 
muito mais sobre a linguagem Kotlin nos próximos capítulos.
Por fim, vamos usar como SDK mínimo a API 21, portanto 
basta deixar o campo Minimum SDK com esse valor ou modificá-lo 
caso este não seja o seu valor.
Depois de revisarmos todas estas informações podemos cli-
car no botão Finish, para que o Android Studio crie o esqueleto 
da nossa primeira aplicação.
Figura 2-3: Configurando o novo projeto
2-6
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
2.1.2 Conhecendo o Android Studio
Quando clicamos no botão Finish, o Android Studio nos 
leva para tela de projeto, perceba que basicamente esta tela é divi-
dida em duas grandes partes, do lado esquerdo temos o navegador 
de projeto, por meio dessa interface podemos navegar pelos arqui-
vos do projeto.
Do lado direito será mostrado o conteúdo de um arquivo que 
foi selecionado do lado esquerdo. A figura abaixo mostra a tela do 
Android Studio.
Figura 2-4: Tela principal do Android Studio.
No canto superior esquerdo temos a perspectiva do projeto 
configurada para a opção Android, vamos manter essa opção pois 
é a melhor quando vamos desenvolver aplicativos.
Logo abaixo temos a pasta app, é nesta pasta que estão as in-
formações necessárias para a construção do aplicativo, tais como, 
2-7
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
os arquivos que implementam a sua lógica, os recursos gráficos 
como layout de tela e imagens etc.
Bem no final temos a pasta Gradle Scritps, o Gradle é 
um gerenciador de construção e de bibliotecas utilizado no Android 
Studio e nessa pasta temos os arquivos que fazem a sua configuração.
2.1.3 O arquivo MainActivity
Vamos dar uma atenção especial ao arquivo MainActivi-
ty, este é o arquivo responsável por ler o código do layout da tela 
que está definido no arquivo activity_main.xml e desenhar a 
tela principalbaseado nos componentes deste arquivo. 
Além disso, é o arquivo MainActivity que é responsável 
pelo ciclo de vida do nosso primeiro projeto. Você não vai entender 
tudo o que este arquivo faz, mas vale a pena começarmos aqui uma 
explicação alto nível, considere abaixo o código deste arquivo:
1| package com.munhra.olamundo
2| 
3| import androidx.appcompat.app. 
AppCompatActivity
4| import android.os.Bundle
5| 
6| class MainActivity : AppCompatActivity() {
7| override fun onCreate(savedInstanceS-
tate: Bundle?) {
8| super.onCreate(savedInstanceState)
2-8
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
9| s e t C o n t e n t V i e w ( R . l a y o u t . 
activity_main)
10| }
11| }
Na linha 1 declaramos o package ao qual pertence o arquivo, 
por hora vamos pular a linha 3. Na linha 4 importamos a classe 
Bundle que é usada pela Activity para recuperar seu estado, não 
se preocupe, pois o Android cuida disso automaticamente.
A declaração mais importante deste arquivo acontece na li-
nha 6, pois é nessa linha que é declarada a classe MainActivi-
ty, classe é um conceito de Programação Orientada a Objetos, este 
conceito será introduzido nos capítulos posteriores.
Veja que a classe MainActivity, herda as propriedades e 
métodos da classe AppCompatActivity, essa classe foi importa-
da na linha 3. 
Podemos pensar que a classe AppCompatActivity é uma 
activity porém ela mantém possibilita ao aplicativo, usar recur-
sos novos em versões anteriores da API.
Quando tocamos no ícone da aplicação, o Android, procura 
na MainActivity o método onCreate, e executa ele, por isso na 
linha 7 este método foi sobrescrito.
Toda a vez que sobrescrevemos um método devemos, logo na 
primeira linha fazer uma chamada para o mesmo método da classe 
mãe por isso utilizamos a palavra chave super, para fazer referên-
cia a classe mãe e deste modo chamamos o método onCreate da 
classe mãe, isto foi feito na linha 8.
A linha mais importante da sobrescrição do método onCre-
ate é a linha 9, Veja que chamamos o método setContentView 
2-9
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
da classe MainActivity, este método é responsável por de-
senhar os elementos da tela que estão definidos no parâmetro 
R.layout.activity_main.
Este parâmetro é uma referência para o arquivo activity_
main.xml que está na pasta res/layout. É neste arquivo que os 
elementos gráficos estão definidos, no caso deste primeiro aplicati-
vo temos apenas um componente do tipo TextView, que será res-
ponsável por mostrar o texto “Hello World!” na tela do dispositivo.
2.1.4 Executando o arquivo no emulador
Agora que passamos a principal parte do código, vamos exe-
cutar o aplicativo e ver o que acontece, não é necessário um dispo-
sitivo real, precisamos apenas baixar e instalar uma das versões do 
AVD (Android Virtual Device) para rodar nosso aplicativo.
Figura 2-5: Ícone do AVD.
Feito isto uma tela de gerenciamento dos dispositivos virtu-
ais vai se abrir, clique no botão Create Virtual Device, e siga 
as instruções. Isso pode levar um tempo, pois o Android Studio 
2-10
Desenvolvimento de Aplicativos para Dispositivos Móveis
 I
N
TR
O
D
U
Ç
Ã
O
 A
O
 A
N
D
R
O
ID
 S
TU
D
IO
2< / >
vai fazer o download dos arquivos necessários e depois instalar. 
Quando este processo terminar, vamos finalmente executar o nos-
so primeiro programa, para isso clique no botão indicado na fi-
gura abaixo:
Figura 2-6: Ícone para rodar o aplicativo.
Após clicar no ícone play, o emulador do Android executará 
o aplicativo e poderemos ver na tela o texto “Hello World!” na tela 
do emulador.
2-11
	� EXERCÍCIOS PROPOSTOS
1) Qual é a IDE oficial para o desenvolvimento de software para a plataforma 
Android?
( ) -a) Eclipse
( ) -b) Visual Studio
( ) -c) XCode
( ) -d) Android Studio
( ) -e) Unity
2) Qual é a linguagem oficial para o desenvolvimento de aplicativos para a 
plataforma Android?
( ) -a) Java
( ) -b) Java Script
( ) -c) C/C++
( ) -d) C#
( ) -e) Kotlin
3) Escolha a afirmativa correta sobre o arquivo MainActivity.kt
( ) -a) O arquivo MainActivity é responsável apenas por armazenar 
o layout da tela principal do aplicativo.
( ) -b) Dentro do arquivo MainActivity está escrita a classe de mes-
mo nome que é responsável por controlar o ciclo de vida da 
tela principal deste aplicativo.
( ) -c) Não devemos nunca sobrescrever o método onCreate, utili-
zando a palavra chave override, pois desta maneira estare-
mos quebrando o ciclo de vida da MainActivity.
( ) -d) A classe MainActivity, escrita dentro do arquivo de mesmo 
nome, deverá sempre ser escrita em Java.
2-12
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -e) O arquivo de Layout nunca deverá ser utilizado no código 
sobrescrito do método onCreate.
4) Escolha a afirmativa correta sobre o arquivo activity_main.xml
( ) -a) É neste arquivo que está escrito o código que define o layout 
da tela.
( ) -b) É neste arquivo que escrevemos o código em Java que con-
trola o ciclo de vida da MainActivity do aplicativo.
( ) -c) Arquivos .xml não podem ser usados em projetos de aplica-
tivos Android.
( ) -d) Quando damos o mesmo nome que o arquivo MainActivity 
não precisamos sobrescrever o método onCreate para ins-
tanciar os elementos do layout.
( ) -e) Quando chamamos o método setContentView, devemos pas-
sar uma String, ou seja, um valor entre aspas duplas indican-
do o caminho absoluto para o arquivo activity_main.xml.
5) Considere o código abaixo e escolha a afirmativa correta
6| class MainActivity : AppCompatActivity() {
7| override fun onCreate(savedInstanceS-
tate: Bundle?) {
8| super.onCreate(savedInstanceState)
9| setContentView(R.layout.activity_main)
10| }
11| }
( ) -a) A definição da classe MainActivity está errada pois deve ser 
escrita em Java.
( ) -b) A declaração da classe MainActivity está errada pois 
ela não pode herdar os atributos e métodos da classe 
AppCompatActivity.
( ) -c) A declaração da linha 6 está correta, pois a MainActivity her-
da os atributos e métodos da classe AppCompatActivity.
2-13
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -d) Não podemos sobrescrever o método onCreate, pois ele não 
existe na classe AppCompatActivity.
( ) -e) Não podemos sobrescrever o método onCreate passando 
como parâmetro o tipo Bundle?.
6) Considere o código abaixo e escolha a alternativa incorreta:
7| override fun onCreate(savedInstanceS-
tate: Bundle?) {
8| super.onCreate(savedInstanceState)
9| setContentView(R.layout.activity_main)
10| }
( ) -a) Precisamos sobrescrever o método, pois ele é executado as-
sim que o usuário abre o aplicativo.
( ) -b) Na linha 9 utilizamos o método setContentView, para ins-
tanciar os elementos definidos no arquivo de layout activi-
ty_main.xml
( ) -c) Podemos omitir a palavra-chave override da declaração do 
método onCreate
( ) -d) A referência para o arquivo activity_main fica armazenada 
na constante R.layout.activity_main
( ) -e) O parâmetro savedInstanceState é controlado automatica-
mente pelo Android para restaurar o estado da aplicação.
7) Escolha a afirmativa correta sobre o método onCreate
( ) -a) Não podemos sobrescrever o método onCreate pois ele não 
faz parte da classe MainActivity.
( ) -b) O método onCreate é apenas chamado quando fechamos a 
aplicação
( ) -c) Para sobrescrevemos o método onCreate precisamos de in-
cluir mais um parâmetro além do savedInstanceState
( ) -d) Não podemos chamar o método super.onCreate, pois a classe 
mãe da MainActivity não possui este método implementado.
2-14
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -e) Temos que sobrescrever o método onCreate pois ele é cha-
mado assim que o aplicativo é aberto, e é neste momento 
que iremos criar os elementos de layout.
8) Qual a utilidade do Gradle ?
( ) -a) O Gradle é o compilador do Android.
( ) -b) O Gradle é o gerenciador de construçãoe de bibliotecas do 
projeto Android.
( ) -c) O Gradle gerencia apenas a versão do Android do projeto.
( ) -d) O Gradle precisa ser executado em linha de comando pois 
não pode ser acessado pelo Android Studio.
( ) -e) O Gradle apenas gerencia as bibliotecas do projeto, mas o 
processo de build (construção) do aplicativo é feito interna-
mente pelo Android Studio.
9) Sobre o AVD escolha a afirmativa correta:
( ) -a) O AVD é um gerenciador de versões do sistema operacional 
Android que podem ser carregadas em um dispositivo real.
( ) -b) A sigla AVD significa Android Virtual Device e é o simulador 
da plataforma Android.
( ) -c) A sigla AVD significa Android Virtual Device e é o emulador 
da plataforma Android.
( ) -d) O AVD não pode ser criado pelo Android Studio.
( ) -e) É necessário pagar uma licença para utilizar o AVD.
10) Como podemos executar o projeto Android sem um dispositivo real?
( ) -a) Não é possível executar o aplicativo Android sem um dispo-
sitivo real.
( ) -b) Devemos criar um AVD ou seja um Android Virtual Device, 
utilizando o gerenciador disponibilizado pelo kit de desen-
volvimento que vem junto com o Android Studio. E instalar 
o executável do projeto pela linha de comando.
( ) -c) Podemos usar o simulador do Android.
2-15
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -d) No Android Studio, devemos criar um AVD, e depois clicar 
no botão verde de play.
( ) -e) N.d.a
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
UNIDADE 2: 
INTRODUÇÃO A LINGUAGEM KOTLIN
Caro(a) Aluno(a)
Seja bem-vindo(a)!
Na unidade 2 veremos os conceitos fundamentais da lingua-
gem Kotlin que são necessários para darmos os primeiros passos 
no desenvolvimento de aplicativos móveis para o sistema opera-
cional Android.
Ótimos estudos!
Conteúdos da Unidade:
Declaração de variáveis, Tipos de variáveis, Variáveis imu-
táveis e mutáveis, Operadores aritméticos, Operadores de com-
paração, Expressões condicionais com if e else, Expressões 
condicionais com when, Estruturas de repetição com while, 
Estruturas de repetição com for.
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
CAPÍTULO 3: 
VARIÁVEIS, TIPOS E OPERADORES
3-3
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
3�1 Introdução
Desde 2017 a linguagem oficial para desenvolvimento na 
plataforma Android mudou de Java para Kotlin, mas a linguagem 
Kotlin existe desde 2010.
Ao compararmos a linguagem Kotlin com a linguagem Java, 
podemos dizer que a linguagem Kotlin possui uma sintaxe limpa e 
expressiva, ponto e vírgula não são mais necessários, getters/
setters são opcionais, o que reduz em muito a verbosidade 
do código.
Neste capítulo vamos introduzir os conceitos necessários 
da linguagem Kotlin para que possamos, mais a frente, trabalhar 
com as bibliotecas necessárias para o desenvolvimento de aplica-
tivos Android.
Nos próximos capítulos veremos vários exemplos escri-
tos na linguagem Kotlin, que servirão de apoio na compreensão 
dos conceitos. 
É muito interessante que o leitor possa digitar estes exem-
plos e fazer alguns experimentos, mudar algumas coisas e ver o que 
acontece, para isso não precisamos do Android Studio, podemos 
usar algumas ferramentas online que processam código Kotlin de 
maneira muito rápida.
Uma destas ferramentas é a https://play.kotlinlang.org/, é 
só acessar o site e escrever o código dentro da função main e clicar 
no botão run. A saída do programa irá aparecer na parte inferior 
da tela.
3-4
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
3�2 Declarando variáveis
Durante a programação de um aplicativo é muito comum 
termos que armazenar, por exemplo, os dados que o usuário for-
nece em um campo texto, para que posteriormente algum cálculo 
seja relacionado.
Utilizamos a ferramenta https://play.kotlinlang.org/, e en-
tramos com o código abaixo:
1| fun main() {
2| var quantidade = 3
3| var preco = 2.50
4| var custoTotal = preco * quantidade
5| println(custoTotal)
6| }
Na primeira linha, declaramos a função main, mais adian-
te você aprenderá como escrever funções, mas por hora lembre-se 
apenas que todo o código dentro das chaves, ou seja todo o código 
das linhas 2 até 4 será executado.
Vamos agora para a linha 2, veja que usamos a palavra-chave 
var, é por meio desta palavra chave que definimos uma variável, 
na sequência inserimos um espaço em branco e escrevemos o nome 
dessa variável, neste caso chamamos de variável quantidade.
Logo após o nome da variável utilizamos o operador =, que 
podemos chamar de operador de atribuição, pois estamos indi-
cando que queremos armazenar o valor inteiro 3 na variável cha-
mada quantidade.
3-5
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Note que na definição da variável quantidade, não deixa-
mos explícito o tipo da variável, isso acontece, pois a linguagem 
Kotlin é capaz de fazer inferência de tipo, ou seja, ela é capaz de adi-
vinhar qual o tipo da variável baseando-se no valor de inicialização.
No caso da linha 2 a variável quantidade será do tipo Int, 
pois o Kotlin considera o valor 3 como sendo do tipo Int.
Já na linha 3, novamente utilizamos a palavra-chave var e 
definimos a variável preço, veja que agora, atribuímos a essa va-
riável o valor 2.5, ou seja, um valor não inteiro, neste caso a lin-
guagem Kotlin fará a inferência e o tipo de variável escolhido será 
o Double. Atente para o fato de que, na linguagem Kotlin, casas 
decimais são definidas usando o símbolo ponto, e não a vírgula, 
pois a linguagem segue a notação do inglês.
Chegando na linha 4, definimos mais uma variável chamada 
custoTotal, veja que nesta variável utilizamos o padrão camel-
Case, este é o padrão de escrita de código utilizado na linguagem 
Kotlin, começamos com uma letra minúscula e na posição onde 
teríamos o espaço, colocamos uma letra maiúscula e assim suces-
sivamente, pois não podemos ter espaços em branco no nome de 
uma variável.
A variável custoTotal armazenará o valor da multiplica-
ção das duas variáveis preço e quantidade, para isso utiliza-
mos o operador * que é o operador de multiplicação na linguagem 
Kotlin, mais a frente veremos todos operadores aritméticos defini-
dos nesta linguagem.
Novamente a linguagem Kotlin infere que o tipo da variável 
custoTotal será Double, pois na expressão aritmética temos 
um valor Double, e para que as informações das casas decimais 
não sejam perdidas a inferência de tipo define a nova variável tam-
bém com valor Double.
3-6
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Por fim, utilizamos a função println, para exibir o valor da 
variável custoTotal, a saída deste programa será então 7.5, pois 
3 vezes 2.5 é igual a 7.5
Mas se por algum motivo tivermos que definir o tipo de uma 
variável “manualmente”, isso também é possível, considere o códi-
go abaixo como exemplo.
1| fun main() {
2| var quantidade = 3
3| println(quantidade::class.simpleName)
4| var preco = 2.50
5| println(preco::class.simpleName)
6| var desconto: Int = 1
7| println(desconto::class.simpleName)
8| var custoTotal = preco * quantida-
de - desconto
9| println(custoTotal::class.simpleName)
10| println(custoTotal)
11| }
Este programa faz o mesmo que o anterior, porém agora te-
mos a definição da variável desconto, veja que utilizamos o sím-
bolo dois pontos, e após um espaço definimos o tipo da variável 
como sendo Int, desta maneira estamos deixando explícito que o 
tipo desta variável é Int.
3-7
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Depois na linha 8 apenas subtraímos o valor do desconto, e 
neste caso o resultado doprograma será 6.5 pois 3 vezes 2.5 menos 
1 é igual 6.5.
Neste código também inserimos alguns comandos println, 
veja que usamos como parâmetro na linha 3 a expressão quanti-
dade::class.simpleName, por hora, entenda que código mos-
tra o tipo da classe ou seja o retorno dessa linha será Int, pois a 
linguagem Kotlin inferiu isso na linha 2.
Já na linha 5, a função println, irá mostrar na tela, o tipo 
Double, pois neste caso o valor atribuído foi 2.5, e assim por diante 
para as demais linhas, resultando na seguinte saída do programa.
Int
Double
Int
Double
6.5
3�3 Declarando variáveis imutáveis
Quando sabemos que o valor de uma variável não vai mudar, 
devemos usar a palavra chave val, no lugar de var, isso faz com 
que o Kotlin, otimize memória, pois não será necessário, alocar a 
quantidade máxima para o tipo inferido.
É considerado uma boa prática no desenvolvimento de sof-
tware, sempre que possível, evitarmos o uso de um valor em 
sua forma literal, portanto neste caso utilizamos constantes para 
3-8
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
armazenar esses números. Veja o programa anterior reescrito uti-
lizando variáveis imutáveis:
1| fun main() {
2| val quantidade = 3
3| val preco = 2.50
4| val custoTotal = preco * quantidade
5| println(custoTotal)
6| }
Veja que mudamos a palavra chave var, para a palavra chave 
val, o programa irá rodar como anteriormente a saída será o valor 
7.5, porém agora o programa atende às boas práticas e consome 
menos memória. 
Vamos fazer uma experiência, tentaremos modificar a cons-
tante custoTotal na linha 5, para isso considere o código abaixo:
1| fun main() {
2| val quantidade = 3
3| val preco = 2.50
4| val custoTotal = preco * quantidade
5| custoTotal = custoTotal - 1
6| println(custoTotal)
7| }
3-9
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Quando executamos este programa, um erro que mostrará 
a mensagem: “Val cannot be assigned”, vai acontecer pois esta-
mos tentando, na linha 5, atribuir um novo valor a uma variá-
vel imutável. 
3�4 Tipos numéricos
A linguagem Kotlin, possui os seguintes tipos numéricos
Tabela 3-1: Tipos Numéricos
Tipo Descrição
Byte Armazena inteiros de até 8 bits com sinal, os valores podem ir de 
-128 até 127.
Short Armazena inteiros de até 16 bits com sinal, os valores podem ir de 
-32768 até 32767.
Int Armazena inteiros de até 32 bits com sinal, os valores podem ir de 
-2,147,483,648 (231) até 2,147,483,647 (231- 1).
Long
Armazena inteiros de até 64 bits com sinal os valores pode ir de 
-9,223,372,036,854,775,808(261) até 9,223,372,036,854,775,807 
(261- 1).
Float Ocupa 32 bits e armazena números com casas decimais.
Double Ocupa 64 bits e armazena números com casas decimais.
3-10
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
3�5 O tipo String
O tipo String é muito utilizado e serve para armazenar os 
valores do tipo texto, veja sua utilização no código abaixo:
1| fun main() {
2| val nome = “Roberto”
3| val sobreNome = “Morais”
4| println(“Bem vindo $nome $sobreNome”)
5| }
Na linha 2 definimos a variável nome atribuído como valor a 
literal o texto “Roberto”, na linha 3 definimos a variável sobreNo-
me, atribuindo o valor “Morais”. A linguagem Kotlin entende que o 
texto entre aspas duplas é uma String e por isso infere que o tipo 
de ambas as variáveis nome e sobreNome será String.
Por fim na linha 4 usamos a função println, note que usa-
mos o operador $, para fazer a interpolação com as duas variáveis 
definidas anteriormente, podemos chamar o operador $ de inter-
polador, pois ele irá inserir o conteúdo das strings definidas nos 
lugares marcados no parâmetro da função println.
Quando rodamos este programa teremos como resposta a 
seguinte saída:
Bem vindo Roberto Morais
3-11
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
3�6 O tipo Boolean
É muito comum na programação termos que tratar situações 
que possuem dois estados, como ligado ou desligado, visível ou in-
visível, conectado ou desconectado entre outros, para isso existe o 
tipo Boolean, que define uma variável que pode receber apenas 
dois valores chamados True ou False, respectivamente em por-
tuguês significam verdadeiro ou falso.
O exemplo abaixo mostra a declaração de duas variáveis do 
tipo Boolean:
1| fun main() {
2| val ligado = true
3| val conectado = false
4| println(ligado::class.simpleName)
5| println(ligado)
6| println(conectado)
7| }
Na linha 2 definimos a variável imutável chamada ligado, 
e atribuímos o valor true, isso faz com que a linguagem Kotlin 
infira que o tipo desta variável será Boolean.
Da mesma maneira na linha 3 definimos a variável imutá-
vel chamada conectado, e atribuímos o valor false, o que fará 
com que a linguagem Kotlin defina o tipo desta variável como 
sendo Boolean.
Para confirmar que o tipo da variável ligado é Boolean, usa-
mos o código da linha 4 e o valor mostrado na tela será Boolean, 
3-12
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
na sequência mostramos os valores das variáveis ligado e conecta-
do, ambas serão true e false respectivamente, portanto a saída 
do programa acima será:
Boolean
true
false
3�7 Operadores aritméticos
Os operadores aritméticos da linguagem Kotlin são respon-
sáveis por realizar operações matemáticas básicas com valores lite-
rais ou valores armazenados em variáveis e em variáveis imutáveis, 
a tabela abaixo relaciona os operadores aritméticos da linguagem:
Tabela 3-2: Operadores aritméticos
Símbolo Descrição
+ Operador de soma
- Operador de subtração
* Operador de multiplicação
/ Operador de divisão
% Operador de resto
Veja o código abaixo, que demonstra o uso dos operadores 
descritos na tabela acima:
1| fun main() {
2| 
3-13
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
3| val x = 5
4| val y = 2
5| 
6| val soma = x + y
7| val subtracao = x - y
8| val multiplicacao = x * y
9| val divisaoInteira = x / y
10| val restoDaDivisao = x % y
11| 
12| println(“Soma $soma”)
13| println(“Subtração $subtracao”)
14| println(“Multiplicação $multiplicacao”)
15| println(“Divisão inteira $divisaoInteira”)
16| println(“Resto da divisão $restoDaDivisao”)
17| }
Nas linhas 3 e 4 definimos duas variáveis imutáveis, uma de-
las chamada x e a outra chamada y, na linha 6 utilizamos o opera-
dor de soma e armazenamos na variável soma o valor resultante da 
operação, que será 7.
Na sequência, efetuamos a subtração das duas variáveis, 
utilizando o operador menos, fazendo 5 - 2, o que resultará no 
valor 3, que será armazenado na variável imutável cha-
mada subtração.
3-14
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Logo na linha 8 utilizamos o operador de multiplicação *, 
efetuando a operação 2 vezes 5 resultando no valor 10, que será 
armazenado na variável imutável multiplicação.
Fazemos o mesmo para o operador de divisão, veja que como 
ambas as variáveis x e y são do tipo Int, a divisão será inteira ou 
seja o valor 2 será o resultado da divisão, e será armazenado na 
variável imutável de nome divisaoInteira.
Por fim utilizamos o operador de resto da divisão, para cal-
cular o valor do resto da divisão inteira de 5 por 2, ou seja, este va-
lor será 1. Após a execução do programa teremos a seguinte saída 
na tela:
Soma 7
Subtração 3
Multiplicação 10
Divisão inteira 2
Resto da divisão 1
3�8 Operadores de comparação
Durante o desenvolvimento de um aplicativo, é muito prová-
vel que tenhamos que comparar algumvalor, suponha um aplica-
tivo que dirá se o aluno foi aprovado numa determinada matéria 
onde a média de aprovação é 5, neste caso deveremos comparar se 
a nota do aluno é maior que a média ou não.
Para isso existem os operadores de comparação, atente ao 
fato de que o resultado de uma operação de comparação é um 
valor Booleano, pois uma comparação pode retornar apenas 2 
3-15
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
valores, verdadeiro ou falso. A tabela abaixo relaciona os operado-
res de comparação.
Tabela 3-3: Operadores de comparação
Operador Descrição
==
Este operador compara se o operando da direita é igual ao 
operando da esquerda, retornando true se isso for verdade ou 
false caso contrário.
!=
Este operador verifica se o operando da direita é diferente do 
operando da esquerda, se isso for verdade o resultado da ope-
ração será true, caso contrário será false.
>
Este operador compara se o operando da esquerda é maior 
que o operando da direita, se isso for verdade então a operação 
retorna true, caso contrário retorna false.
<
Este operador compara se o operando da esquerda é menor que 
o operando da direita, se esse for o caso então o valor retorna-
do pela expressão será true, caso contrário será false.
>=
Este operador compara se o operando da esquerda é maior ou 
igual ao operando da direita, se isso for verdade então a opera-
ção retornará o valor true caso contrário retornará false.
<=
Este operador compara se o operando da esquerda é menor ou 
igual operando da direita, se esse for o caso então o resultado 
da operação será o valor true, caso contrário será o valor false.
O código abaixo, mostra o caso de uso de alguns operadores 
descritos na tabela acima:
1| fun main() {
2| var comparacao = 3 == 3
3| println(“3 é igual a 3 ? $comparacao”)
4| comparacao = 3 != 3
3-16
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
5| println(“3 é diferente de 3 ? $comparacao”)
6| comparacao = 3 > 5
7| println(“3 é maior que 5 ? $comparacao”)
8| comparacao = 3 < 8
9| println(“3 é menor que 8 ? $comparacao”)
10| comparacao = 3 >= 3
11| println(“3 é maior ou igual a 3 
? $comparacao”)
12| }
Na linha 2, definimos a variável comparação, e atribuímos 
a ela o valor da expressão 3 == 3, veja que utilizamos o operador 
==, que compara se o valor 3 é igual a 3, neste caso o valor 
armazenado na variável comparação será true, pois 3 é igual a 3.
Na sequência na linha 4 fizemos a comparação oposta, ou 
seja, estamos calculando o resultado da expressão 3 != 3, lem-
brando que o operador != verifica se ambos os operandos são di-
ferentes, então neste caso o valor armazenado na variável compa-
ração será false, pois 3 é igual a 3.
Agora chegou a vez do operador >, maior que, veja que 3 
não é maior que 5 ou seja, o valor armazenado na variável 
comparação na linha 6 será false.
Vamos agora usar o operador <, menor que, neste caso o ope-
rando da esquerda que é o 3 é menor que o operando da 
direita que é o 8, ou seja, o resultado desta expressão é 
true, e isso é armazenado na variável comparação na linha 8.
Por fim utilizamos o operador >=, maior ou igual, neste caso 
o operando da esquerda é o valor 3 e o operando da direita também 
3-17
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
é o valor 3, ou seja, ambos são iguais, como esse operador testa se 
os operandos são maiores ou iguais, o valor retornado pela 
expressão será true, pois 3 é igual a 3.
Ao executarmos o programa, teremos a saída abaixo, confor-
me o que foi descrito:
3 é igual a 3 ? true
3 é diferente de 3 ? false
3 é maior que 5 ? false
3 é menor que 8 ? true
3 é maior ou igual a 3 ? true
3�9 Operadores lógicos
Por meio dos operadores lógicos podemos construir expres-
sões onde os operandos são do tipo Boolean, veja abaixo os ope-
radores e o que cada um realiza numa expressão lógica. Para isso 
vamos utilizar uma ferramenta muito útil que chamamos de ta-
bela verdade.
Por meio da tabela verdade escrevemos todos os possíveis 
resultados entre dois operandos e os operadores lógicos, vamos co-
meçar pelo operador, ou seja, podemos chamar este operador de e.
Tabela 3-4: Tabela verdade operador &&
Operando 1 Operando 2 Resultado
true True true
false True false
3-18
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Operando 1 Operando 2 Resultado
true False false
false False false
Segundo a tabela acima, o operador && apenas retornará o 
valor true quando o valor de ambos operandos forem true, para 
todos os outros casos o valor retornado será false.
Veremos agora a tabela verdade para o operador ||, chama-
mos esse operador de ou:
Tabela 3-5: Tabela verdade operador ||
Operando 1 Operando 2 Resultado
true true true
false true true
true false true
false false false
No caso do operador || ou, o resultado será false apenas 
se ambos os valores dos operandos forem iguais a false, para to-
dos os outros casos o valor retornado pela operação será true.
Por fim vamos para a tabela do operador !, ou seja, o opera-
dor não, este operador tem uma particularidade, podemos chamá-
-lo de operador unário pois ele precisa de apenas um operando:
Tabela 3-6: Tabela verdade operador !
Operando Resultado
true False
false True
Veja o código abaixo, que mostra o uso dos operadores lógicos:
3-19
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
1| fun main() {
2| var senhaValida = false
3| var usuarioValido = false
4| var acessoLiberado = senhaValida 
&& usuarioValido
5| println(“Acesso liberado $acessoLiberado”)
6| senhaValida = true
7| usuarioValido = false
8| acessoLiberado = senhaValida && usuarioValido
9| println(“Acesso liberado $acessoLiberado”)
10| senhaValida = false
11| usuarioValido = true
12| acessoLiberado = senhaValida && usuarioValido
13| println(“Acesso liberado $acessoLiberado”)
14| senhaValida = true
15| usuarioValido = true
16| acessoLiberado = senhaValida && usuarioValido
17| println(“Acesso liberado $acessoLiberado”)
18| }
Vamos considerar o caso a variável acessoLiberado, só 
terá o valor true se ambas as variáveis senhaValida usuario-
Valido possuírem o valor true. Para isso utilizaremos o opera-
dor &&, pois veja que na tabela verdade deste operador o resultado 
retornado apenas será true se ambos os valores dos operandos 
for true.
3-20
Desenvolvimento de Aplicativos para Dispositivos Móveis
 V
A
R
IÁ
V
EI
S
, 
TI
P
O
S
 E
 O
P
ER
A
D
O
R
ES
3< / >
Nas linhas 2 e 3 definimos ambas as variáveis acessoLibe-
rado e senhaValida, com o valor false. Em seguida na linha 
4 efetuamos a operação senhaValida && usuarioValido, 
armazenando na variável acessoLiberado o valor false, pois 
neste caso ambas as variáveis possuem o valor false.
Na sequência mostramos na tela o valor da variável aces-
soLiberado, mostrando que ele é false.
Agora vamos mudar o valor da variável senhaValida, para 
true simulando que o usuário entrou com a senha correta, porém 
o valor da variável usuarioValido, continuará sendo false, 
desta maneira nossa simulação dirá que a variável acessoLibe-
rado ainda possui o valor false. 
Desta vez vamos simular a situação onde o usuário entrou 
com a senha incorreta, ou seja, o valor da variável senhaValida, 
será false, porém neste caso, o usuário entrou com a sua identi-
ficação correta, ou seja, o valor da variável usuarioValido ago-
ra é true.
Ainda sim neste caso a variável acessoLiberado deverá 
possuir valor false, pois uma das informações está errada, e pelo 
operador && é exatamente isso que acontece, pois um dos operan-
dos possui o valor false.
Agora vamos ao caso onde ambas as variáveis possuem o va-lor true, neste caso simulamos a situação onde o usuário entrou 
corretamente com os valores da senha e da sua identificação, neste 
caso a expressão senhaValida && usuarioValido, irá retor-
nar o valor true.
3-21
	� EXERCÍCIOS PROPOSTOS
1) O que é uma variável ?
( ) -a) Um elemento no código que não podemos prever o valor
( ) -b) Um elemento no código que não sabemos qual é o tipo
( ) -c) Um espaço alocado em memória RAM baseado em um tipo 
específico utilizado para armazenar valores que podem 
variar.
( ) -d) Um elemento no código que quando inicializado com um va-
lor específico nunca mais poderá ter esse valor modificado.
( ) -e) Um espaço alocado em memória de disco baseado em um 
tipo específico utilizado para armazenar valores que podem 
variar.
2) Qual a diferença entre val e var ?
( ) -a) Quando definimos uma variável com var sabemos que o seu 
valor vai mudar, quando definimos uma variável com val sa-
bemos que o seu valor não vai mudar, ou seja estamos defi-
nindo uma variável imutável.
( ) -b) Quando definimos uma variável com val sabemos que o seu 
valor vai mudar, quando definimos uma variável com var 
sabemos que o seu valor não vai mudar, ou seja, estamos 
definindo uma variável imutável.
( ) -c) Não existe diferença entre o uso das duas palavras chaves 
val e var.
( ) -d) Quando definimos uma variável com val sabemos que o seu 
tipo vai mudar, quando definimos uma variável com var sa-
bemos que o seu tipo não vai mudar, ou seja estamos defi-
nindo uma variável imutável.
( ) -e) N.d.a.
3-22
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
3) Quando devemos usar o tipo Byte ?
( ) -a) Para armazenar valores monetários que usam apenas duas 
casas decimais.
( ) -b) Para armazenar valores inteiros da ordem de grandeza dos 
milhares.
( ) -c) Para armazenar valores que representam medidas de com-
primento com até 4 casas decimais.
( ) -d) Para armazenar o número de alunos em uma sala de aula, 
suponho que esse número não seja maior que 30.
( ) -e) Para armazenar o número de moléculas em um composto 
orgânico.
4) Quando devemos usar o tipo Double ?
( ) -a) Para armazenar o número de moléculas em um composto 
orgânico.
( ) -b) Para armazenar o valor da constante Pi com o máximo de 
casas decimais que a linguagem Kotlin permite.
( ) -c) Para armazenar os valores de um sensor de temperatura de 
ambiente.
( ) -d) Para armazenar valores inteiros que representam as popu-
lações de países.
( ) -e) N.d.a.
5) Quando devemos usar o tipo String? 
( ) -a) Para representar uma situação onde podemos ter dois esta-
dos, verdadeiro ou falso.
( ) -b) Armazenar os valores numéricos de 1 até 10.
( ) -c) Quando temos que armazenar o nome de um usuário.
( ) -d) Armazenar os valores da constante Pi com o máximo de ca-
sas decimais.
( ) -e) Armazenar valores monetários para realizar o cálculo do im-
posto devido.
3-23
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
6) Quando devemos usar uma variável do tipo Boolean?
( ) -a) Quando temos uma situação onde o resultado será apenas 
0 ou 1.
( ) -b) Quando queremos armazenar o resultado de uma operação 
lógica.
( ) -c) Quando temos uma situação, onde teremos apenas os valo-
res em texto “verdadeiro” ou “falso”.
( ) -d) Quando temos uma situação onde queremos armazenar o 
texto que representa as unidades celsius “°C” ou fahrenheit 
“°F”
( ) -e) N.d.a
7) Considere o código abaixo que utiliza o operador % e escolha a alterna-
tiva correta
1| fun main() {
2| val x = 9
3| val y = 7
4| val resultado = x % y
5| println(“Resultado $resultado”)
6| }
( ) -a) O resultado mostrado na tela será 1, ou seja, o valor da divi-
são inteira do valor 9 pelo valor 7.
( ) -b) O resultado mostrado na tela será o valor de 9% de 7, ou 
seja, 0.63.
( ) -c) O resultado mostrado será o valor da divisão com duas casas 
de decimais de 9 / 7 ou seja 1.28
( ) -d) O resultado será 2 pois o operador % retorna o resto da divi-
são inteira de 9 / 7.
( ) -e) O resultado será 0 pois o resto da divisão entre x e y é 0.
3-24
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
8) Considere o código abaixo que utiliza os operadores de comparação e 
escolha a alternativa correta.
1| fun main() {
2| val resultado1 = 9 <= 7
3| val resultado2 = 5 >= 5
4| val resultado3 = 7 > 7
5| println(“Resultado1 $resultado1”)
6| println(“Resultado2 $resultado2”)
7| println(“Resultado3 $resultado3”)
8| }
( ) -a) O programa vai retornar um erro pois não podemos armaze-
nar o resultado de uma operação relacional.
( ) -b) O programa vai retornar um erro pois as variáveis imutáveis 
definidas nas linhas 2, 3 e 4 não foram definidas com o tipo 
correto.
( ) -c) O tipo das variáveis resultado1, resultado2 e resultado 3 é 
Int.
( ) -d) O programa irá mostrar na tela os valores true, false e true.
( ) -e) O programa irá mostrar na tela os valores false, true e false.
9) Considere o código abaixo que utiliza os operadores lógicos && e || e 
escolha a alternativa correta.
1| fun main() {
2| val x1 = true
3| val x2 = false
4| val x3 = true
5| val x4 = true
6| val resultado1 = (x1 && x2) || (x3 && x4)
7| val resultado2 = x1 || x2 || x3
8| val resultado3 = x1 && x2 && x3 && x4
9| val resultado4 = x1 || x4 || x3 && x2
3-25
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
10| val resultado5 = (x1 && x2 && x3) || 
(x1 || x4)
11| println(“$resultado1, 
12| $resultado2, 
13| $resultado3,
14| $resultado4,
15| $resultado5”)
16| }
( ) -a) False, false, false, false, false
( ) -b) True, true, false, true, true
( ) -c) False, true, false, true, false
( ) -d) True, true, false, false, true
( ) -e) True, true, true, true, true
10) Considere o código abaixo que utiliza os operadores de lógicos e de com-
paração e escolha a alternativa correta.
1| fun main() {
2| val x1 = false
3| val x2 = 10 <= 10
4| val x3 = 1 > 2
5| val x4 = 7 != 7
6| val resultado1 = (x1 && x2) || (x3 && x4)
7| val resultado2 = x1 || x2 || x3
8| val resultado3 = x1 && x2 && x3 && x4
9| val resultado4 = x1 || x4 || x3 && x2
10| val resultado5 = (x1 && x2 && x3) || 
(x1 || x4)
11| println(“$resultado1, 
12| $resultado2, 
13| $resultado3, 
14| $resultado4, 
15| $resultado5”)
16| }
3-26
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -a) False, true, false, false, false
( ) -b) True, true, false, false, true
( ) -c) False, false, false, false, false
( ) -d) True, true, true, true, true
( ) -e) False, false, true, true, false
D I S C I P L I N A :
Desenvolvimento de Aplicativos 
para Dispositivos Móveis
CAPÍTULO 4: 
CONTROLE DE FLUXO
4-2
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
4�1 Introdução
Toda linguagem de programação possui estruturas que con-
trolam o fluxo do programa. As estruturas de repetição são respon-
sáveis por fazer com que um determinado bloco de código se repita 
até que uma condição seja ou satisfeita. 
Fazem parte deste grupo as estruturas declaradas com as 
palavras chaves while e for. É muito comum chamarmos essas 
estruturas de laços de repetição.
A outra categoria de estruturas de controle de fluxo são as 
expressões condicionais, estas estruturas executam um determi-
nado bloco de código se uma condição for satisfeita, fazem parte 
destas estruturas as que são declaradas pelas palavras chaves if, 
else e when.
4�2 Expressões condicionais com if e else
Imagine a situação onde queremos fazer um programa que 
diz ao usuário se ele foi aprovado numa determinada disciplina 
onde a média de aprovação é 5, ou seja, caso a média do usuário 
seja superior ou igual a 5 o programa irá mostrar uma mensagem 
dizendo que o usuário foi aprovado, caso contrário, ou seja a média 
do usuário foi inferior a 5 o programa irá mostrar uma mensagem 
dizendo ao usuário que ele não foi aprovado.
Para construir esse programa precisaremos usar uma expres-
são condicional utilizando a palavra-chave if e a palavra-chave 
else, veja abaixo, de maneira genérica, como construir uma ex-
pressão condicionalna linguagem Kotlin:
1| if (expressão lógica) {
4-3
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
2| bloco de código executado quando o re-
sultado da expressão lógica for true
3| } else {
4| bloco de código executado quando o re-
sultado da expressão lógica for false
5| }
Quando a expressão lógica, entre os parênteses da palavra-
-chave if retornar o valor true, o bloco de código entre as chaves 
será executado.
Caso contrário, se a expressão lógica entre os parênteses da 
palavra-chave if retornar o valor false, o bloco de código das 
chaves do else, será executado.
Usando a forma genérica com guia, vamos construir o pro-
grama que resolve o problema da média exposto no começo 
deste capítulo.
1| fun main() {
2| val media = 3.0
3| if (media >= 5.0) {
4| println(“O aluno foi aprovado na matéria”)
5| } else {
6| println(“O aluno foi reprovado na matéria”)
7| }
8| }
4-4
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
Começamos o programa definindo a variável imutável media 
com valor 3.0, esta variável vai armazenar a média na disciplina 
que o usuário possui.
Na sequência, na linha 3 utilizamos a palavra-chave if, e 
dentro dos parênteses escrevemos a expressão condicional media 
>= 5.0, veja que utilizamos o operador de comparação maior ou 
igual e como operandos a variável media, e o valor 5.0, ou seja, 
sempre que a variável média possuir valor maior que 5.0 está ex-
pressão lógica irá retornar o valor true, caso contrário, se o valor 
da variável média for menor que 5.0 então a expressão lógica irá 
retornar false.
No caso deste programa, sabemos que o valor da variável 
imutável é 3, ou seja 3 é menor que 5, logo o valor da expressão 
media >= 5.0, vai ser false e como dito anteriormente, neste 
caso o bloco de código dentro das chaves após a palavra else vai 
ser executado e a mensagem informando que o usuário foi repro-
vado irá aparecer na tela.
Agora reescreva o código de modo que o valor da variável 
media seja 7.5, neste caso a expressão condicional media >= 
5.0, retornará o valor true, fazendo com que o bloco de código 
das chaves que seguem a expressão condicional seja executado e 
portanto neste caso, uma mensagem informando que o usuário foi 
aprovado, irá ser exibida na tela.
Faça mais alguns experimentos com esse código, mude o va-
lor para 5.0, e para outros valores até que você se familiarize com 
essa estrutura.
Atente para o fato de que a estrutura else é opcional, con-
sidere o programa abaixo que mostra uma mensagem quando o 
número armazenado na variável numeroA for maior que o número 
armazenado na variável numeroB.
4-5
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
1| fun main() {
2| val numeroA = 30
3| val numeroB = 17
4| 
5| if (numeroA > numeroB) {
6| println(“Número $numeroA é maior 
que $numeroB”)
7| }
8| }
Nas linhas 2 e 3 definimos respectivamente as variáveis imu-
táveis numeroA com valor 30 e numeroB com valor 17. Logo na 
linha 5 construímos a estrutura condicional baseada na expressão 
lógica numeroA > numberoB, note que usamos o operador maior 
que, neste caso esta expressão lógica irá retornar o valor true se o 
valor da variável numeroA, for maior que o valor da variável nu-
meroB, e como o valor da variável numeroA é 30 e o valor da variá-
vel numeroB é 17 então a expressão lógica numeroA > numberoB 
retornará o valor true, e o bloco de código definido na linha 6 será 
executado e a mensagem informando que o número 30 é maior que 
o número 17 será exibida na tela.
Veja que como não temos uma implementação para o else, 
então se o valor da variável numeroA for menor que o valor da va-
riável numeroB nada será mostrado na tela.
Podemos também escrever estruturas condicionais usando a 
palavra-chave else if, veja abaixo um exemplo de como pode-
mos fazer isso:
4-6
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
1| fun main() {
2| val tipoCafe = 3
3| if (tipoCafe == 1) {
4| println(“Café Latte”)
5| } else if (tipoCafe == 2) {
6| println(“Expresso”)
7| } else if (tipoCafe == 3) {
8| println(“Café Coado”)
9| } else {
10| println(“Opção não encontrada”)
11| }
12| }
Iniciamos declarando a variável imutável chamada tipo-
Cafe com o valor 3, logo abaixo na linha 3, utilizamos a palavra 
chave if para verificar se o valor da variável tipoCade é igual a 
1, como o resultado desta operação retorna o valor False, a men-
sagem da linha 4 não será mostrada na tela, pois a linha 4 não 
será executada.
O fluxo do programa será então desviado para a linha 5, e 
agora a expressão else if, vai checar se o valor da variável ti-
poCafe é igual a 2, e novamente o resultado da expressão lógica 
será o valor False. Ou seja, a linha 6 não será executada e o fluxo 
do programa será desviado para a linha 7, onde novamente utiliza-
mos a expressão else if, porém agora, como o valor da variável 
tipoCafe é igual a 3 a linha 8 será executada e a mensagem: Café 
Coado vai aparecer na tela.
4-7
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
Note que a linha 10 não será executada pois o fluxo do pro-
grama saiu do bloco condicional pela linha 10. 
Caso o valor da variável tipoCafe, não fosse 1, 2 ou 3 então 
apenas nesse caso a linha 10 seria executada.
4�3 Expressões condicionais com when
Outra maneira de escrevermos expressões condicionais em 
Kotlin é usando a palavra-chave when, considere o código abaixo 
como exemplo:
1| fun main() {
2| 
3| val x = 5
4| 
5| when (x) {
6| 1 -> println(“X possui o valor 1”)
7| 2 -> println(“X possui o valor 2”)
8| 5 -> println(“X possui o valor 5”)
9| else -> {
10| println(“X possui qualquer outro valor”)
11| }
12| }
13| }
4-8
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
Começamos declarando a variável imutável x com valor igual 
a 5, e logo na linha 5 utilizamos a palavra-chave when, para marcar 
a estrutura condicional, note que queremos testar qual é o valor da 
variável x, neste caso ela foi incluída entre os parênteses logo na 
sequência da palavra-chave when.
Após declarada a variável que será testada pela expressão 
condicional when abrimos a chave e na linha 6 verificamos se o 
valor da variável é igual a 1, caso for o código na frente da marca -> 
será executado. 
O mesmo é verdade para as linhas 7 e 8, note que o valor da 
variável x é 5, portanto o código que será executado está na linha 
8, fazendo com que a mensagem informando que x possui o valor 
5 será exibida.
Nessa estrutura podemos também utilizar a palavra-cha-
ve else, com o objetivo de desviar o fluxo do programa para o 
código entre as chaves do else, caso nenhuma condição acima 
seja satisfeita.
Aproveite para mudar o valor da variável x e fazer algumas 
experiências com o código do when, por exemplo mudando seu va-
lor para 10 ou mesmo para 2.
4�4 Estrutura de repetição com while
Imagine que precisamos construir um programa que mostre 
na tela os números e 1 até 1000, será que teremos que escrever 
1000 linhas de código para isso? A resposta é não, pois neste caso 
devemos usar uma estrutura de repetição, veja abaixo a forma ge-
nérica de uma estrutura de repetição utilizando a instrução while.
4-9
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
1| while (expressão lógica) {
2| bloco de código que será repetido enquanto 
a expressão lógica retornar o valor true
3| }
O modelo genérico descrito acima diz que enquanto a ex-
pressão lógica entre os parênteses da palavra-chave while 
retornar o valor true então todo o bloco de código escrito entre 
chaves será executado.
Vamos retomar o problema da contagem até 1000, vamos es-
crever o código que faz isso utilizandoa expressão while.
1| fun main() {
2| var x = 1
3| while (x <= 1000) {
4| println(x)
5| x = x + 1
6| }
7| }
Já na linha 2 declaramos a variável chamada x, veja que usa-
mos a palavra-chave var ao invés da palavra chave val, fizemos 
isso pois o valor da variável x vai ser modificado, na linha 3 escre-
vemos a palavra-chave while e na sequência entre os parênteses 
colocamos a expressão lógica que vai controlar a estrutura de re-
petição, veja que como queremos mostrar na tela os números de 
1 até 1000, construímos uma expressão lógica que verifica se x é 
menor ou igual a 1000, ou seja, quando o valor de x for 1001 o 
4-10
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
fluxo do programa não vai executar o bloco de código definido nas 
linhas 4 e 5.
Como inicializamos a variável chamada x com o valor 1, da 
primeira vez a expressão lógica x <= 1000, retornará o valor 
true, e as linhas 4 e 5 serão executadas, na linha 4 uma mensagem 
será mostrada com valor da variável que neste primeiro caso será 
1 e na linha 5 incrementamos este valor somando 1, ou seja, após a 
execução da linha 5 o valor da variável x mudará para 2.
O valor 2 é menor do que 1000, portanto a expressão lógica 
x <= 1000 retornará o valor true, ou seja, novamente as linhas 
4 e 5 serão executadas, portanto o valor 2 será mostrado na tela e a 
variável x será incrementada em 1, e ao fim da execução da linha 5 
esta variável possuirá o valor 3.
Vamos avançar no tempo, e assumir que a variável x chegou 
ao valor 1000, neste caso a condição x <= 1000, ainda será válida 
e as linhas 4 e 5 serão executadas, portanto o valor 1000 será mos-
trado na tela e na linha 5 o valor da variável x que agora é de 1000, 
será incrementado em 1, ou seja, o valor da variável x agora é 1001.
Veja que agora a expressão x <= 1000, é inválida, pois x é 
igual a 1001 e 1001 é maior que 1000, portanto esta expressão irá 
retornar false e a estrutura de repetição não irá mais executar 
as linhas 4 e 5, consequentemente o programa vai terminar e os 
números de 1 até 1000 foram mostrados na tela como queríamos.
4�5 Estrutura de repetição com for
Além da instrução while podemos usar utilizar a instru-
ção for para construir laços de repetição, veja no exemplo abaixo 
4-11
Desenvolvimento de Aplicativos para Dispositivos Móveis
 C
O
N
TR
O
LE
 D
E 
FL
U
X
O
4< / >
como utilizar a instrução for para fazer o laço de repetição que re-
solve o problema de mostrar todos os números de 1 até 1000 na tela
1| fun main() {
2| for (x in 1..1000) {
3| println(x)
4| }
5| }
Já na linha 2 utilizamos a palavra chave for e dentro dos 
parênteses definimos uma variável chamada x e usamos a palavra 
chave in e o intervalo definido por 1.1000, ou seja, com esta nota-
ção estamos criando uma estrutura de repetição que vai fazer com 
que x possua todos os valores entre 1 e 1000 inclusive.
Esta estrutura de repetição irá executar o código da linha 3, 
1000 vezes, ou seja, os valores de 1 até 1000 serão mostrados na 
tela. A instrução for é indicada quando queremos percorrer itens 
em uma lista, veremos o conceito de lista nos próximos capítulos.
4-12
	� EXERCÍCIOS PROPOSTOS
1) Considere o código abaixo, e escolha a alternativa correta:
1| fun main() {
2| val temperatura = 28
3| if (temperatura > 24) {
4| println(“Baixar Temperatura”)
5| }
6| }
( ) -a) O código acima está errado pois não podemos usar os parên-
teses na linha 3.
( ) -b) O código acima está errado pois a variável temperatura foi 
declarada sem um tipo.
( ) -c) O tipo da variável temperatura é Double.
( ) -d) O código está correto e como resultado mostrará a mensa-
gem: Baixar Temperatura.
( ) -e) O comando if, na linha 3 vai gerar um erro, pois este coman-
do não está definido na linguagem Kotlin.
2) Considere o código abaixo, e escolha a alternativa correta:
1| fun main() {
2| val opcao = 2
3| if (opcao == 1) {
4| println(“Sabor morango”)
5| } else if (opcao == 2) {
6| println(“Sabor chocolate”)
7| } else if (opcao == 3) {
4-13
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
8| println(“Sabor limão”)
9| } else {
10| println(“Sabor não encontrado”)
11| }
12| }
( ) -a) O código acima não compila, pois não podemos escrever a 
instrução else if, apenas else.
( ) -b) Como o valor da variável opcao é igual a 2 já na linha 3 a 
expressão condicional vai retornar o valor False, e o fluxo do 
programa será desviado para a linha 10, portanto será mos-
trado na tela a frase: Sabor não encontrado.
( ) -c) A variável da linha 2 chamada opção foi declarada errada, 
pois o tipo Int não foi especificado.
( ) -d) Aparecerá na tela, depois da execução do programa a frase: 
Sabor limão.
( ) -e) Como o valor da variável opção é 2, a primeira expressão 
condicional da linha 3 vai retornar False, e o fluxo será redi-
recionado para a linha 5, neste caso esta expressão condicio-
nal vai retornar True e portanto a mensagem mostrada na 
tela será: Sabor chocolate
3) Escolha a afirmativa correta sobre a palavra-chave while na linguagem 
Kotlin:
( ) -a) A palavra-chave while, não está definida na linguagem Kotlin.
( ) -b) A palavra-chave while, seguida de uma expressão lógica vai 
executar a próxima linha uma única vez apenas se o valor 
retornado pela expressão lógica for True.
( ) -c) A palavra-chave while, seguida de uma expressão lógica vai 
executar a próxima linha uma única vez apenas se o valor 
retornado pela expressão lógica for False.
( ) -d) A palavra-chave while, seguida de uma expressão lógica vai 
executar o código definido entre chaves enquanto o resulta-
do da expressão lógica for igual a True.
( ) -e) A palavra-chave while, seguida de uma expressão lógica vai 
executar o código definido entre chaves enquanto o resulta-
do da expressão lógica for igual a False.
4-14
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
4) Escolha a afirmativa correta sobre as palavras chave if e else na lingua-
gem Kotlin:
( ) -a) Podemos omitir os parênteses na definição da expressão ló-
gica da palavra-chave if.
( ) -b) Sempre que escrevermos uma expressão com a palavra-cha-
ve if somos obrigados a usar a palavra-chave else.
( ) -c) Se a expressão lógica que segue a palavra-chave if, retornar o 
valor True, então o código que estiver definido entre as cha-
ves logo abaixo da expressão lógica será executado.
( ) -d) Se a expressão lógica que segue a palavra-chave if, retornar o 
valor True, então o código que estiver definido entre as cha-
ves logo abaixo da expressão else será executado.
( ) -e) Todo código definido entre chaves logo abaixo da palavra 
chave else, sempre será executado.
5) Considere o código abaixo, e escolha a alternativa correta:
1| fun main() {
2| var x = 1
3| while ( x < 20 ) {
4| if (x == 10) {
5| println(“Uma dezena”)
6| } else {
7| println(x)
8| }
9| x = x + 1
10| }
11| }
( ) -a) Podemos declarar a variável x na linha 2 como sendo val.
( ) -b) Nada será mostrado na tela pois as linhas 4 até 9 só serão 
executadas se x for maior que 20, porém x é igual a 1.
( ) -c) Todas as linhas de 4 até 9 serão executadas 20 vezes.
( ) -d) O programa vai mostrar na tela os números de 1 até 19.
4-15
EX
ER
C
ÍC
IO
S
 P
R
O
P
O
S
TO
S
( ) -e) O programa vai mostrar na tela os valores de 1 até 19 porém 
no valor 10 será mostrada a mensagem: Uma dezena.
6) Considere o código abaixo, e escolha a alternativa correta:
1| fun main() {
2| var x = 1
3| while ( x <= 5 ) {
4| println(x) 
5| }
6| }
( ) -a) O código acima exibe na tela os números de 1 até 5 e pode-
mos mudar a variável mutável x para ser uma variável imu-
tável utilizando a palavra-chave val, que o resultado será o 
mesmo.
( ) -b) A linha 4 do código acima nunca será executada pois a ex-
pressão lógica que controla a repetição só será válida se x for 
maior que 5, porém como o valor de x é 1 a condição nunca 
irá retornar o valor True.
( ) -c) O código acima vai se repetir infinitas vezes pois o valor

Continue navegando