Clean Code em Kotlin: princípios e exemplos para código limpo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
Here is the translated HTML content from Russian to Portuguese (Português), with all HTML tags preserved and only the text content translated. ```html

Clean Code em Kotlin: princípios e exemplos para código limpo



Código limpo não é apenas um termo da moda, mas uma habilidade fundamental para um desenvolvedor profissional. Quando você escreve em Kotlin, uma linguagem moderna e expressiva, os princípios do Clean Code se tornam ainda mais relevantes. Código que é fácil de ler, modificar e manter economiza horas de depuração e facilita a vida de toda a equipe. Neste artigo, vamos explorar os principais princípios do Clean Code em Kotlin com exemplos concretos que ajudarão você a escrever código elegante e confiável.



1. Nomenclatura: fale a linguagem do domínio



A nomenclatura correta é a base do código limpo. Nomes de variáveis, funções e classes devem responder imediatamente às perguntas "o que é isso?" e "para que serve?". Evite abreviações de uma letra e nomes abstratos como data ou temp.



Exemplo ruim:

val d = mutableListOf<String>()fun prc(u: User) {    d.add(u.name)    if (u.age > 18) println(u.name)}


Exemplo bom:

val registeredUserNames = mutableListOf<String>()

fun printAdultUserName(user: User) { registeredUserNames.add(user.name) if (user.isAdult()) { println(user.name) }}


No exemplo bom, fica imediatamente claro o que a função faz e quais dados estão armazenados na lista. Use substantivos para classes (UserRepository), verbos para funções (processOrder) e predicados booleanos (isActive, hasPermission).



2. Funções: pequenas, de tarefa única e sem efeitos colaterais



Uma das principais ideias do Clean Code é que uma função deve fazer apenas uma coisa. Se uma função exceder 15-20 linhas, provavelmente precisa ser dividida. Kotlin, com suas funções de extensão e lambdas, é excelente para isso.



Exemplo: dividindo uma função complexa



Suponha que temos uma função para processar um pedido:



fun processOrder(order: Order) {    // Validação    if (order.items.isEmpty()) throw IllegalArgumentException("Order must have items")    if (order.totalPrice < 0.0) throw IllegalArgumentException("Invalid price")        // Cálculo de desconto    var finalPrice = order.totalPrice    if (order.user.isPremium) {        finalPrice *= 0.9    }        // Envio de notificação    emailService.send(order.user.email, "Your order is confirmed")    smsService.send(order.user.phone, "Order #${order.id} confirmed")}


Refatoração seguindo os princípios do Clean Code:



fun processOrder(order: Order) {    validateOrder(order)    val finalPrice = calculateFinalPrice(order)    sendOrderConfirmation(order, finalPrice)}

private fun validateOrder(order: Order) { require(order.items.isNotEmpty()) { "Order must have items" } require(order.totalPrice >= 0.0) { "Invalid price" }}

private fun calculateFinalPrice(order: Order): Double { return if (order.user.isPremium) order.totalPrice * 0.9 else order.totalPrice}

private fun sendOrderConfirmation(order: Order, finalPrice: Double) { val message = "Order #${order.id} confirmed. Total: $finalPrice" notificationService.notifyUser(order.user, message)}


Agora cada função é responsável por uma única tarefa, são fáceis de testar e reutilizar.



3. Null Safety: use os recursos do Kotlin



Um dos principais destaques do Kotlin é a null safety. Clean Code em Kotlin implica eliminar completamente o null sempre que possível. Evite o uso de !! (not-null assertion) — isso é quase sempre um sinal de design ruim.



Exemplo ruim:

fun getUserName(userId: String): String {    val user = userRepository.findById(userId)!!    return user.name!!}


Exemplo bom:

fun getUserName(userId: String): String? {    val user = userRepository.findById(userId)    return user?.name}


No exemplo bom, usamos operadores seguros (?.) e tipos anuláveis de forma explícita, tornando o código mais seguro e legível.

```

Blogs

Book Recommendations