Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines
Instruções Gerais:
- Resolva as atividades em ordem progressiva de maturidade.
- Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
- Consulte o gabarito comentado ao final de cada questão para autoavaliação.
🎯 Nível 1: Fundamentos
Problema 06.1 — Null Safety e Expressões Idiomáticas em Kotlin
Contexto: Null Safety e Expressões Idiomáticas em Kotlin no contexto de Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines.
Requisitos de Execução:
- Declarar variáveis anuláveis e processar com operador Elvis
?:e Safe Call?..
Resultado Esperado
Operações seguras sem risco de NullPointerException.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_1_SeuNome - Envie na tarefa:
Atividade Cap 06 - Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines
🔑 Gabarito de Código & Solução Comentada
fun formatarUsuario(nome: String?): String {
return nome?.trim()?.uppercase() ?: "USUARIO_PADRAO"
}
fun main() {
println(formatarUsuario("Ricardo"))
println(formatarUsuario(null))
}
🔍 Nível 2: Prática
Problema 06.2 — Extension Functions e Data Classes Imutáveis
Contexto: Extension Functions e Data Classes Imutáveis no contexto de Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines.
Requisitos de Execução:
- Criar data class
Produto(val id: Int, val preco: Double)e extensãoDouble.paraReais().
Resultado Esperado
Extensão customizada enriquecendo classes existentes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_2_SeuNome - Envie na tarefa:
Atividade Cap 06 - Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines
🔑 Gabarito de Código & Solução Comentada
data class Produto(val id: Int, val nome: String, val preco: Double)
fun Double.paraReais(): String = "R$ %.2f".format(this)
fun main() {
val p = Produto(1, "Monitor 4K", 2899.90)
println("Produto: ${p.nome} custa ${p.preco.paraReais()}")
}
⚡ Nível 3: Integração
Problema 06.3 — Concorrência com Kotlin Coroutines (launch, async e await)
Contexto: Concorrência com Kotlin Coroutines (launch, async e await) no contexto de Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines.
Requisitos de Execução:
- Executar chamadas paralelas assíncronas utilizando
coroutineScopeeasync.
Resultado Esperado
Chamadas assíncronas paralelas consolidadas sem travar threads.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_3_SeuNome - Envie na tarefa:
Atividade Cap 06 - Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines
🔑 Gabarito de Código & Solução Comentada
import kotlinx.coroutines.*
suspend fun buscarPreco(): Double { delay(50); return 150.0 }
suspend fun buscarFrete(): Double { delay(50); return 20.0 }
fun main() = runBlocking {
val preco = async { buscarPreco() }
val frete = async { buscarFrete() }
val total = preco.await() + frete.await()
println("Total calculado assincronamente: R$ $total")
}
🏆 Nível 4: Desafio Corporativo
Problema 06.4 — Processamento Reativo com Kotlin Flow (cold streams)
Contexto: Processamento Reativo com Kotlin Flow (cold streams) no contexto de Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines.
Requisitos de Execução:
- Emitir sequência reativa com operador
flow,filtere coletar comcollect.
Resultado Esperado
Fluxo de eventos reativo com alta performance.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_06_4_SeuNome - Envie na tarefa:
Atividade Cap 06 - Linguagem Kotlin: Sintaxe Moderna, Null Safety e Coroutines
🔑 Gabarito de Código & Solução Comentada
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun gerarNumeros(): Flow<Int> = flow {
for (i in 1..5) { emit(i) }
}
fun main() = runBlocking {
gerarNumeros()
.filter { it % 2 != 0 }
.collect { print("$it ") }
println("
Fluxo reativo concluido.")
}