Como passar em uma entrevista de Kotlin: principais perguntas
Kotlin solidificou seu lugar como a principal linguagem para desenvolvimento Android e é ativamente usado no backend (Ktor, Spring Boot). Uma entrevista para uma vaga de desenvolvedor Kotlin é uma verificação não apenas da sintaxe, mas também da compreensão da filosofia da linguagem: null safety, corrotinas, abordagem funcional. Neste artigo, analisamos as perguntas mais frequentes feitas em entrevistas, com exemplos de código e explicações.
1. Null Safety: como o Kotlin lida com NullPointerException
Uma das principais vantagens do Kotlin é a proteção embutida contra null. Ao contrário do Java, onde qualquer referência pode ser null, no Kotlin os tipos são divididos em nullable e non-null.
Pergunta: qual a diferença entre ? e !!?
? é o operador de chamada segura. Se o objeto for null, a chamada ao método ou propriedade simplesmente retorna null sem exceção.
val name: String? = nullval length = name?.length // null, sem erro!! é a afirmação non-null. Você garante que o valor não é null. Se for null — lança NullPointerException.
val length = name!!.length // NPE quando name == nullPergunta: o que é o operador elvis ?:?
Permite definir um valor padrão se o lado esquerdo for null.
val name: String? = nullval display = name ?: "Convidado"Pergunta: como funciona o let com tipos nullable?
let é executado apenas se o objeto não for null. Esta é uma forma idiomática de lidar com nullable.
name?.let { println("Nome: $it")}2. Corrotinas: assincronia sem dor
Corrotinas são threads leves que permitem escrever código assíncrono em estilo imperativo. Em entrevistas, verificam a compreensão de escopos, dispatchers e funções suspend.
Pergunta: qual a diferença entre launch e async?
launch— inicia uma corrotina, retorna um Job. Não retorna resultado.async— inicia uma corrotina, retorna um Deferred (análogo ao Future). O resultado é obtido através de.await().
coroutineScope { val job = launch { delay(100) } val deferred = async { 42 } val result = deferred.await() // 42}Pergunta: o que é CoroutineContext e dispatchers?
CoroutineContext é um conjunto de elementos que definem o comportamento da corrotina (dispatcher, Job, nome). Os principais dispatchers são:
Dispatchers.Main— para UI (Android).Dispatchers.IO— para entrada/saída (rede, arquivos).Dispatchers.Default— para tarefas intensivas de CPU.
Pergunta: o que é withContext?
Permite mudar o dispatcher dentro de uma corrotina sem alterar o escopo.
suspend fun loadData(): String = withContext(Dispatchers.IO) { // operação longa "Dados"}3. Classes e objetos: sealed, data, companion
Kotlin oferece vários tipos especiais de classes que simplificam padrões típicos.
Pergunta: o que é uma sealed class e quando usá-la?
Sealed class é uma classe abstrata com um conjunto limitado de subclasses. Todos os herdeiros são conhecidos em tempo de compilação. É ideal para representar estados (UI State) ou resultados de operações.
sealed class Result { data class Success(val data: String) : Result() data class Error(val message: String) : Result() object Loading : Result()}
fun handleResult(result: Result) { when (result) { is Result.Success -> println(result.data) is Result.Error -> println(result.message) Result.Loading -> println("Carregando...") }}O ramo else não é necessário — o compilador conhece todas as variantes.