Como passar em uma entrevista de Kotlin: análise das principais perguntas com exemplos
Kotlin solidificou seu nicho como uma linguagem moderna para desenvolvimento Android e backend na JVM. Se você está se preparando para uma entrevista técnica, é importante não apenas conhecer a sintaxe, mas também entender a filosofia da linguagem: segurança, concisão e compatibilidade com Java. Neste artigo, analisaremos as principais perguntas mais frequentes em entrevistas de Kotlin, com exemplos reais de código.
1. Null Safety: como Kotlin resolve o problema do null
Um dos principais trunfos do Kotlin é a proteção embutida contra NullPointerException. Na entrevista, certamente perguntarão sobre tipos nullable e non-null.
Pergunta: Qual a diferença entre String? e String? Como trabalhar com nullable de forma segura?
Resposta: O tipo String garante que a variável nunca será null. String? permite null. Para acesso seguro, são usados os operadores ?., ?: (Elvis) e !! (apenas se tiver 100% de certeza).
fun main() { val name: String? = null // Chamada segura println(name?.length) // null // Valor padrão val length = name?.length ?: 0 println(length) // 0 // Extração forçada (risco de NPE) // println(name!!.length) // Erro!}Pergunta adicional: O que são lateinit e lazy?
lateinit— para variáveis que são inicializadas depois (apenasvar).lazy— para inicialização delegada (apenasval).
class User { lateinit var email: String val config by lazy { loadConfig() } fun init() { email = "test@example.com" }}2. Coroutines: assincronicidade sem dor
Coroutines são itens obrigatórios para o Kotlin moderno. Os entrevistadores verificam a compreensão de suspend, launch, async e dispatchers.
Pergunta: Qual a diferença entre launch e async?
Resposta: launch inicia uma coroutine e retorna um Job (sem resultado). async retorna um Deferred, do qual é possível obter o resultado através de await().
suspend fun fetchData(): String { delay(1000) return "Dados carregados"}
fun main() = runBlocking { // launch: sem resultado val job = launch { println("Tarefa 1 concluída") } // async: com resultado val deferred = async { fetchData() } println(deferred.await()) // "Dados carregados" job.join()}Pergunta: Quais dispatchers (Dispatchers) você conhece?
Dispatchers.Main— para UI (Android).Dispatchers.IO— para entrada/saída, rede.Dispatchers.Default— para tarefas intensivas de CPU.Dispatchers.Unconfined— não vinculado a uma thread específica (usado raramente).
3. Extension functions e Sealed class: expandindo possibilidades
Kotlin permite adicionar novas funções a classes existentes sem herança. Isso é frequentemente perguntado no contexto de arquitetura.
Pergunta: O que são extension functions? Dê um exemplo.
Resposta: São funções que são declaradas fora da classe, mas são chamadas como seus métodos. Elas não modificam a classe, apenas adicionam açúcar sintático.
// Extension function para Stringfun String.isEmail(): Boolean { return this.contains("@") && this.contains(".")}
fun main() { val email = "user@example.com" println(email.
```