Como praticar Kotlin?
Aprender a teoria e importante, mas a pratica e o que transforma conhecimento em habilidade real. Se voce quer realmente dominar Kotlin, precisa colocar a mao no codigo todos os dias. Neste guia, vou mostrar as melhores formas de praticar, desde exercicios para iniciantes ate estrategias avancadas para quem ja tem alguma experiencia.
1. Kotlin Playground e REPL
O jeito mais rapido de comecar a praticar e usando o Kotlin Playground no navegador. Nao precisa instalar nada, basta abrir e comecar a digitar codigo.
Para pratica local, voce pode usar o REPL (Read-Eval-Print Loop) do Kotlin:
// Abra o terminal e digite: kotlinc
// Isso abre o REPL interativo onde voce pode testar codigo rapidamente
// Experimente no Playground ou REPL:
fun inverterPalavras(frase: String): String =
frase.split(" ").reversed().joinToString(" ")
fun contarVogais(texto: String): Int =
texto.lowercase().count { it in "aeiou" }
fun main() {
println(inverterPalavras("Kotlin e incrivel"))
// Saida: "incrivel e Kotlin"
println(contarVogais("Desenvolvimento de software"))
// Saida: 11
}
2. Kotlin Koans
Os Kotlin Koans sao exercicios interativos oficiais criados pela JetBrains. Eles cobrem os principais recursos da linguagem de forma progressiva e sao excelentes para quem esta comecando.
Os Koans cobrem topicos como:
- Introducao a sintaxe
- Convencoes e operadores
- Colecoes e transformacoes
- Propriedades e delegacao
- Builders e DSLs
- Generics
3. Plataformas de desafios de programacao
Resolver desafios em plataformas online e uma forma excelente de praticar logica e sintaxe simultaneamente.
Plataformas recomendadas:
- HackerRank: tem secao especifica para Kotlin com problemas categorizados por dificuldade
- LeetCode: aceita solucoes em Kotlin e e otimo para preparacao de entrevistas
- Exercism: oferece trilha de Kotlin com mentoria voluntaria
- CodeWars: desafios em formato de “katas” com dificuldade progressiva
// Exemplo de desafio tipico: encontrar o segundo maior numero
fun segundoMaior(numeros: List<Int>): Int? {
if (numeros.size < 2) return null
return numeros.distinct().sortedDescending().getOrNull(1)
}
// Desafio: verificar se uma string e palindromo
fun ePalindromo(texto: String): Boolean {
val limpo = texto.lowercase().filter { it.isLetterOrDigit() }
return limpo == limpo.reversed()
}
// Desafio: FizzBuzz funcional
fun fizzBuzz(n: Int): List<String> =
(1..n).map { numero ->
when {
numero % 15 == 0 -> "FizzBuzz"
numero % 3 == 0 -> "Fizz"
numero % 5 == 0 -> "Buzz"
else -> numero.toString()
}
}
fun main() {
println(segundoMaior(listOf(5, 3, 8, 1, 9, 2))) // 8
println(ePalindromo("A man a plan a canal Panama")) // true
println(fizzBuzz(15))
}
4. Projetos pessoais progressivos
A melhor pratica vem de construir algo real. Aqui esta uma progressao recomendada de projetos:
Nivel iniciante:
- Calculadora de linha de comando
- Lista de tarefas (to-do list) no terminal
- Conversor de unidades (temperatura, moedas, medidas)
- Jogo de adivinhacao de numeros
Nivel intermediario:
- API REST com Ktor ou Spring Boot
- App Android simples com Jetpack Compose (lista de notas, calculadora de gorjeta)
- Leitor de RSS que consome feeds da internet
- Sistema de gerenciamento de biblioteca (CRUD completo)
Nivel avancado:
- App multiplataforma com KMP
- Clone simplificado de um app popular (lista de compras, previsao do tempo)
- Contribuicao em projetos open source
- Ferramenta CLI com kotlinx-cli
// Projeto pratico: calculadora de IMC
fun calcularIMC(peso: Double, altura: Double): Double =
peso / (altura * altura)
fun classificarIMC(imc: Double): String = when {
imc < 18.5 -> "Abaixo do peso"
imc < 25.0 -> "Peso normal"
imc < 30.0 -> "Sobrepeso"
imc < 35.0 -> "Obesidade grau I"
imc < 40.0 -> "Obesidade grau II"
else -> "Obesidade grau III"
}
fun main() {
print("Digite seu peso (kg): ")
val peso = readLine()?.toDoubleOrNull() ?: return
print("Digite sua altura (m): ")
val altura = readLine()?.toDoubleOrNull() ?: return
val imc = calcularIMC(peso, altura)
val classificacao = classificarIMC(imc)
println("Seu IMC: ${"%.1f".format(imc)}")
println("Classificacao: $classificacao")
}
5. Contribuicao em projetos open source
Contribuir em projetos open source e uma das melhores formas de praticar Kotlin em um contexto profissional. Voce aprende padroes de codigo real, passa por code review e interage com outros desenvolvedores.
Como comecar:
- Procure projetos Kotlin no GitHub com a tag “good first issue”
- Leia o codigo existente para entender os padroes
- Comece com contribuicoes pequenas (correcao de bugs, melhoria de documentacao)
- Evolua para contribuicoes maiores conforme ganha confianca
Projetos brasileiros de Kotlin para contribuir:
- Bibliotecas e ferramentas da comunidade
- Projetos de aprendizado colaborativo
- Aplicativos open source em Kotlin
6. Estudo de codigo alheio
Ler codigo escrito por outros desenvolvedores experientes e uma forma poderosa de aprendizado. Analise projetos open source populares em Kotlin e tente entender:
- Como eles organizam o codigo
- Quais padroes de projeto utilizam
- Como lidam com tratamento de erros
- Como escrevem testes
7. Testes automatizados como pratica
Escrever testes e uma habilidade fundamental e tambem uma otima forma de praticar:
// Praticando com testes unitarios
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
class CalculadoraTest {
private val calc = Calculadora()
@Test
fun `soma de dois numeros positivos`() {
assertEquals(5, calc.somar(2, 3))
}
@Test
fun `divisao por zero lanca excecao`() {
assertThrows(ArithmeticException::class.java) {
calc.dividir(10, 0)
}
}
@Test
fun `lista filtrada corretamente`() {
val numeros = listOf(1, 2, 3, 4, 5, 6)
val pares = numeros.filter { it % 2 == 0 }
assertEquals(listOf(2, 4, 6), pares)
}
}
8. Habitos diarios que aceleram o aprendizado
- 30 minutos por dia: a consistencia vale mais que sessoes longas esporadicas
- Caderno de anotacoes: anote conceitos novos, erros cometidos e solucoes encontradas
- Ensine alguem: explicar um conceito para outra pessoa consolida seu proprio entendimento
- Revise codigo antigo: volte a projetos anteriores e melhore-os com o que aprendeu
- Participe de comunidades: tire duvidas, responda perguntas de outros e troque experiencias
Pros e contras de cada metodo de pratica
Plataformas de desafios:
- Pro: exercicios variados e com dificuldade progressiva
- Pro: preparacao para entrevistas tecnicas
- Contra: problemas abstratos que nem sempre refletem o trabalho real
Projetos pessoais:
- Pro: motivacao pessoal e resultado tangivel
- Pro: experiencia proxima ao trabalho profissional
- Contra: pode ser dificil manter a disciplina sozinho
Contribuicao open source:
- Pro: experiencia real com code review e colaboracao
- Pro: networking com outros desenvolvedores
- Contra: curva de aprendizado inicial para entender projetos grandes
O mais importante
Nao existe uma unica forma certa de praticar. O segredo e combinar diferentes abordagens e manter a constancia. Comece com o que for mais confortavel para voce e va expandindo conforme ganha confianca. O mais importante e escrever codigo todos os dias, mesmo que seja pouco.