Desvendando Kotlin: um guia amigável para iniciantes

Rocketseat

Rocketseat

5 min de leitura
Kotlin
A programação é uma jornada fascinante e cheia de possibilidades, especialmente quando encontramos ferramentas que tornam o processo mais eficiente e prazeroso. O Kotlin, uma linguagem de programação moderna e concisa, se destaca nesse cenário, sendo cada vez mais utilizada no desenvolvimento de aplicações Android, backend e até mesmo para projetos multiplataforma. Hoje, vamos explorar os fundamentos do Kotlin, abordando conceitos essenciais como mutabilidade e imutabilidade, tipos de dados, classes e operadores matemáticos e lógicos. Este guia foi criado especialmente para você, iniciante, que quer começar a programar com confiança.
📄
No artigo Kotlin: revolucione sua carreira na programação, exploramos como essa linguagem poderosa está mudando o jogo, trazendo exemplos práticos e casos de sucesso que vão te inspirar. Descubra por que grandes empresas como Google, AWS e Atlassian já abraçaram o Kotlin e como ele pode se tornar seu próximo grande diferencial no mercado de trabalho.
Agora que você já conhece o potencial transformador do Kotlin no mercado e em projetos reais, é hora de mergulhar nos seus fundamentos. Antes de sair criando aplicativos incríveis, é essencial construir uma base sólida, entendendo como lidar com dados, estruturas e operações no Kotlin.
E, para começar, vamos explorar um dos pilares que tornam essa linguagem tão poderosa e segura: a mutabilidade. Saber quando e como um dado pode ser alterado no seu código é o primeiro passo para escrever programas mais organizados e fáceis de manter. Pronto para descobrir como o Kotlin oferece controle absoluto sobre suas variáveis? Bora codar?
Um gato real, de pelagem clara, que inicialmente coloca óculos escuros e aparece um texto dizendo: “Estou pronto!”.
Um gato real, de pelagem clara, que inicialmente coloca óculos escuros e aparece um texto dizendo: “Estou pronto!”.

Mutabilidade: o poder da escolha

Na programação, entender quando algo pode ou não mudar é fundamental para escrever códigos eficientes, seguros e previsíveis. No Kotlin, esse conceito é representado pelas palavras-chave val e var, que definem se um dado será imutável ou mutável.

O que é mutabilidade?

Pense na mutabilidade como a diferença entre uma foto impressa e um quadro branco:
  • Imutável (val): uma vez impressa, a foto não pode ser alterada. O mesmo acontece com um valor declarado como val – ele é fixo após sua definição.
  • Mutável (var): já o quadro branco permite apagar e reescrever quantas vezes quiser. É assim que funciona uma variável declarada como var.
👉
val vem de value (valor, em inglês) e indica que a variável é imutável, ou seja, seu valor, uma vez atribuído, não pode ser modificado. Já var vem de variable (variável, em inglês) e indica que a variável é mutável, permitindo que seu valor seja alterado ao longo do tempo.
Esse controle na mutabilidade não só melhora a legibilidade do código, mas também ajuda a prevenir erros que podem surgir ao modificar valores inesperadamente.
Exemplo prático: val (imutável)
Vamos imaginar que você está desenvolvendo um aplicativo para gerenciar mentorias na Rocketseat. O nome do mentor, uma vez definido, não será alterado:
val mentor = "Mayk Brito" println(mentor) // Output: Mayk Brito mentor = "Diego Fernandes" // Erro: não é possível alterar um valor imutável
Quando tentamos alterar o valor de uma variável declarada como val, o compilador do Kotlin exibe um erro como este:
Val cannot be reassigned
Esse erro ocorre porque variáveis declaradas como val são imutáveis, ou seja, não permitem reatribuição de valor após serem inicializadas. Essa característica é crucial para evitar modificações acidentais e garantir a previsibilidade do código.
Por que isso é importante?
Exemplo prático: var (mutável)
Agora, suponha que você está acompanhando o progresso de um aluno em uma trilha de aprendizado. A pontuação do aluno pode mudar conforme ele conclui mais desafios:
var pontos = 150 println("Pontuação inicial: $pontos") // Output: Pontuação inicial: 150 pontos += 50 // O aluno completou um desafio println("Pontuação atual: $pontos") // Output: Pontuação atual: 200
Nesse caso, usar var faz sentido, pois o valor precisa ser atualizado ao longo do tempo.
Dica da Rocketseat: Se você não precisa alterar o valor de uma variável, opte por val. Isso deixa seu código mais previsível e reduz o risco de bugs inesperados.
Antes de mergulharmos em outro fundamento essencial do Kotlin, os tipos de dados, que tal colocar em prática o que acabamos de aprender?
A prática é a chave para fixar esses conceitos e entender como o Kotlin protege seu código de reatribuições indesejadas. Bora codar e transformar teoria em aprendizado real? Abra o Playground do Kotlin diretamente no seu navegador e teste os exemplos!

Tipos de dados: classificando as informações

Se programar é como construir algo do zero, os tipos de dados são as peças fundamentais dessa construção. No Kotlin, cada dado que você utiliza – seja um número, texto ou valor lógico – precisa estar dentro de uma "caixa" específica, chamada tipo de dado. Essa organização ajuda o compilador a entender exatamente como tratar a informação e evita erros que poderiam acontecer se tentássemos usar os dados de forma errada. Vamos conhecer os principais tipos de dados no Kotlin!

1. Números inteiros

Números inteiros são aqueles sem casas decimais, perfeitos para contar itens, armazenar IDs ou controlar loops.
  • Tipos principais: Byte, Short, Int, Long.
  • Quando usar cada um?
    • Byte: economiza memória, armazenando valores de -128 a 127.
    • Int: o mais usado para números inteiros, com um intervalo de -2 bilhões a 2 bilhões.
    • Long: para números maiores ou identificadores únicos (como IDs).
Exemplo prático:
val diasSemana: Int = 7 val populacaoMundial: Long = 8000000000L println("Dias na semana: $diasSemana") println("População mundial: $populacaoMundial")
Imagine usar isso para calcular quantas inscrições foram feitas em um evento da Rocketseat ou controlar o número de dias restantes em um cronograma.

2. Números de ponto flutuante

Se os números inteiros são para contagem, os números de ponto flutuante são para medições – valores que precisam de casas decimais.
  • Tipos principais: Float, Double.
  • Diferença entre eles?
    • Float: menos preciso, mas usa menos memória. Ideal para jogos ou animações.
    • Double: mais preciso, perfeito para cálculos financeiros ou científicos.
Exemplo prático:
Imagine que você está programando um sistema para calcular a pontuação média de um aluno em desafios de uma trilha de estudos. Os pontos podem variar em números com casas decimais, dependendo da dificuldade dos desafios:
val pontosFacil: Float = 8.5f val pontosIntermediario: Float = 15.75f val pontosAvancado: Double = 20.123 // Soma e cálculo da média val totalPontos: Double = pontosFacil + pontosIntermediario + pontosAvancado val mediaPontos: Double = totalPontos / 3 println("Pontuação total: $totalPontos") println("Média de pontos por desafio: $mediaPontos")
Percebeu o sufixo f?

3. Texto

Texto é essencial para criar mensagens, nomes de usuários e interações nos programas.
  • Tipos principais: Char, String.
    • Char: representa um único caractere.
    • String: representa uma sequência de caracteres, como frases ou nomes.
Exemplo prático com String:
val mensagem: String = "Bem-vindo ao curso de Kotlin!" val inicial: Char = mensagem[0] println("Mensagem: $mensagem") // Output: Bem-vindo ao curso de Kotlin! println("Primeira letra: $inicial") // Output: B
Você poderia usar uma String para exibir uma mensagem personalizada de boas-vindas ao usuário de um aplicativo Rocketseat.

4. Booleanos

Os booleanos são usados para representar verdadeiro ou falso. Eles são a base para lógica condicional, ajudando o programa a tomar decisões.
  • Exemplo prático:
val isInscrito: Boolean = true val temAcesso: Boolean = false if (isInscrito) { println("Bem-vindo! Você está inscrito.") } else { println("Inscreva-se para acessar este conteúdo.") }
Você poderia usar Boolean para verificar se o usuário está inscrito em um curso ou tem acesso a um evento.

Explorando na prática

Agora é com você! Abra o Playground do Kotlin e experimente criar suas próprias variáveis com diferentes tipos de dados. Tente usar Int, Double, String e Boolean para representar informações do seu dia a dia ou de projetos como os cursos e desafios da Rocketseat.
Desafio extra: crie um pequeno programa que calcula o preço final de uma formação com desconto, verifica se o usuário está inscrito e exibe uma mensagem personalizada de boas-vindas.
A prática vai te ajudar a internalizar os conceitos e mostrar como o Kotlin torna tudo mais fácil e intuitivo. Você aceita o desafio?
Dica da Rocketseat: ao concluir o desafio, compartilhe seu sucesso na nossa comunidade! Se encontrar dificuldades, não se preocupe – peça ajuda por lá. É uma oportunidade incrível para aprender com outros devs e, de quebra, iniciar um networking valioso. Afinal, a jornada é mais divertida quando trilhamos juntos!

Classes: uma relação poderosa com os tipos de dados

No Kotlin, os tipos de dados são representados como classes, o que significa que cada dado possui métodos e propriedades que você pode usar para manipulá-lo diretamente. Essa característica torna o Kotlin uma linguagem poderosa e intuitiva, permitindo que você escreva menos código para realizar tarefas complexas.

O que são métodos?

Métodos são como "ações" que você pode realizar em um objeto. No Kotlin, números, strings e outros tipos possuem métodos pré-definidos que tornam o código mais fluido. Imagine que, em vez de usar fórmulas ou criar funções, você pode simplesmente "pedir" ao número ou texto que execute uma tarefa por conta própria.

Exemplo: manipulando números inteiros

Vamos imaginar um cenário no qual você está criando um aplicativo para acompanhar o progresso de aprendizado em uma trilha da Rocketseat. Você pode armazenar a idade do usuário como um número inteiro e manipulá-la para diferentes propósitos:
var idade: Int = 30 // Converter para Double val idadeEmDouble = idade.toDouble() println("Idade em Double: $idadeEmDouble") // Output: Idade em Double: 30.0 // Incrementar a idade (simulando anos de experiência acumulados) idade += 5 println("Idade após 5 anos: $idade") // Output: Idade após 5 anos: 35
Aqui, usamos o método .toDouble() para converter um número inteiro em um número decimal. Isso é útil em cálculos que exigem maior precisão.

Exemplo: trabalhando com strings

Strings, ou textos, também são objetos poderosos no Kotlin, com métodos que facilitam a manipulação de informações. Vamos imaginar que você está criando um sistema para gerar mensagens personalizadas para alunos da Rocketseat:
val nome = "Fernanda" // Transformar o nome em letras maiúsculas println("Nome em maiúsculas: ${nome.uppercase()}") // Output: Nome em maiúsculas: FERNANDA // Transformar o nome em letras minúsculas println("Nome em minúsculas: ${nome.lowercase()}") // Output: Nome em minúsculas: fernanda // Adicionar um emoji ao final da mensagem val saudacao = "Bem-vinda ao curso, $nome! 🚀" println(saudacao) // Output: Bem-vinda ao curso, Fernanda! 🚀
Esses métodos simplificam tarefas comuns, como padronizar entradas de texto, criar mensagens dinâmicas e até adicionar toques personalizados para engajar os usuários.

Explorando mais possibilidades

Os métodos de números e strings são apenas a ponta do iceberg. Aqui estão algumas outras possibilidades interessantes que você pode explorar no Kotlin:
  • Arredondamentos:
    • val salarioSenior = 11234.567 println("Arredondado: ${salarioSenior.toInt()}") // Output: Arredondado: 11234
  • Operações matemáticas: o Kotlin permite o uso de funções da biblioteca Math para cálculos mais complexos.
    • Substituições:
      • Particionamento:
        Não fique apenas na teoria! Teste esses exemplos no Playground do Kotlin e veja como o uso de métodos facilita o desenvolvimento. Experimente criar seus próprios cenários: transforme textos, manipule números e combine métodos para resolver problemas do dia a dia.

        Operadores: fazendo a mágica acontecer

        Os operadores são o coração da lógica e dos cálculos em qualquer linguagem de programação, e no Kotlin não é diferente. Eles permitem realizar desde operações matemáticas simples até verificações lógicas complexas. Vamos explorar como esses operadores tornam o Kotlin poderoso e intuitivo.

        Operadores matemáticos

        Os operadores matemáticos no Kotlin são usados para realizar cálculos básicos e avançados. Aqui estão os mais comuns:
        • Adição: +
        • Subtração: -
        • Multiplicação: *
        • Divisão: /
        • Módulo (resto da divisão): %
        Exemplo prático:
        Imagine que você está desenvolvendo um sistema para calcular o progresso de um aluno em uma trilha de aprendizado. Suponha que ele tenha concluído alguns módulos e você queira calcular o total de pontos obtidos:
        val pontosModulo1 = 25 val pontosModulo2 = 30 val pontosModulo3 = 45 val totalPontos = pontosModulo1 + pontosModulo2 + pontosModulo3 println("Total de pontos: $totalPontos") // Output: Total de pontos: 100 // Divisão e módulo val divisao = totalPontos / 4 val resto = totalPontos % 4 println("Divisão total por 4: $divisao, Resto: $resto") // Output: Divisão total por 4: 25, Resto: 0
        O operador de módulo (%) é muito útil, por exemplo, para verificar números pares ou ímpares.

        Operadores de atribuição composta

        Além dos operadores básicos, o Kotlin oferece operadores compostos, que combinam operações matemáticas com atribuições:
        • +=: Soma e atribui.
        • -=: Subtrai e atribui.
        • *=: Multiplica e atribui.
        • /=: Divide e atribui.
        • %=: Aplica módulo e atribui.
        Exemplo prático:

        Conheça o Rocketseat Para Empresas

        Oferecemos soluções personalizadas para empresas de todos os portes.

        Rocketseat

        Rocketseat

        Ecossistema de educação contínua referência em programação e Inteligência Artificial.

        Artigos_

        Explore conteúdos relacionados

        Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

        Imagem contendo uma carta e um símbolo de check
        NewsletterReceba conteúdos inéditos e novidades gratuitamente