Clean Code em Kotlin: princípios e exemplos para iniciantes

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

Clean Code em Kotlin: princípios e exemplos para iniciantes



Código limpo (Clean Code) não é apenas um termo da moda, mas uma habilidade fundamental de qualquer desenvolvedor. Na linguagem Kotlin, que combina concisão e poder, escrever código legível e sustentável torna-se especialmente importante. Neste artigo, vamos analisar os principais princípios do Clean Code aplicados ao Kotlin, fornecer exemplos práticos e mostrar como evitar erros típicos. O material é voltado para desenvolvedores iniciantes que desejam escrever código profissional desde o primeiro dia.



1. Nomenclatura de variáveis, funções e classes



A nomenclatura correta é a base do código limpo. O nome deve responder às perguntas: "O que é isso?" e "Para que serve?". Em Kotlin, adota-se camelCase para variáveis e funções, e PascalCase para classes e objetos.



Exemplo ruim:

val x = 5fun calc(a: Int, b: Int): Int {    return a * b + 10}


Exemplo bom:

val maxRetryCount = 5fun calculateTotalPrice(basePrice: Int, tax: Int): Int {    return basePrice + tax}


Regras principais:

  • Evite abreviações — usr é melhor substituir por user, e calc por calculate.
  • Use verbos para funções — getUser(), sendEmail(), validateInput().
  • Variáveis booleanas nomeie com os prefixos is, has, can — isActive, hasPermission.
  • Evite informações excessivas — userList é melhor que listOfUsersFromDatabase.


2. Princípios SOLID em Kotlin



SOLID são cinco princípios da programação orientada a objetos que ajudam a criar sistemas flexíveis e facilmente sustentáveis. Vamos analisá-los com exemplos em Kotlin.



Single Responsibility (responsabilidade única)

Uma classe deve ter apenas um motivo para mudar. Separe a lógica em classes pequenas e especializadas.



Exemplo ruim:

class UserManager {    fun saveUser(user: User) { /* salvar no BD */ }    fun sendEmail(user: User) { /* enviar e-mail */ }    fun printReport(user: User) { /* imprimir relatório */ }}


Exemplo bom:

class UserRepository {    fun save(user: User) { /* salvar no BD */ }}

class EmailService { fun send(user: User) { /* enviar e-mail */ }}

class ReportPrinter { fun print(user: User) { /* imprimir relatório */ }}


Open/Closed (aberto/fechado)

As classes devem estar abertas para extensão, mas fechadas para modificação. Use interfaces e herança.



interface Shape {    fun area(): Double}

class Circle(val radius: Double) : Shape { override fun area() = Math.PI * radius * radius}

class Rectangle(val width: Double, val height: Double) : Shape { override fun area() = width * height}

// Agora é possível adicionar novas formas sem alterar o código existente


Liskov Substitution (substituição de Liskov)

Objetos de subclasses devem substituir objetos da classe base sem violar a lógica. Em Kotlin, isso é especialmente relevante ao trabalhar com coleções e herança.



open class Bird {    open fun fly() = "Está voando"}

class Penguin : Bird() { override fun fly() = throw UnsupportedOperationException("Pinguins não voam")}// Isso viola o princípio — é melhor colocar a "capacidade de voar" em uma interface separada


3. Trabalhando com funções: concisão e clareza



Kotlin oferece ferramentas poderosas para escrever funções limpas. Regras principais: