Clean Code em Swift: 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 Swift: princípios e exemplos para iniciantes



Todo desenvolvedor iOS ou macOS, mais cedo ou mais tarde, enfrenta o problema: o código que funcionava perfeitamente ontem, hoje se torna ilegível. Isso não é culpa da linguagem Swift — é o resultado de negligenciar os princípios do Clean Code. Código limpo não é apenas estética. É a base da manutenibilidade do projeto, da redução do tempo de depuração e do trabalho confortável em equipe. Neste artigo, vamos analisar os princípios-chave do Clean Code com exemplos em Swift que ajudarão você a escrever código compreensível não apenas para o computador, mas também para as pessoas.



1. Nomenclatura: variáveis, constantes e funções



O primeiro e mais importante princípio — o nome deve responder à pergunta "Por quê?", e não "Como?". Em Swift, graças à tipagem forte, você pode omitir o tipo no nome, mas não a intenção.



Exemplo ruim:

var d: Double = 3.14var arr = [String]()func calc(a: Double, b: Double) -> Double {    return a * b}


Exemplo bom (Clean Code):

let piValue: Double = 3.14159var userNames: [String] = []func calculateRectangleArea(width: Double, height: Double) -> Double {    return width * height}


Regras de nomenclatura em Swift:

  • Use camelCase para variáveis e funções.
  • Evite abreviações ( btn → submitButton ).
  • Para variáveis booleanas, use os prefixos is, has, should (por exemplo, isUserLoggedIn).
  • Nomes de funções devem começar com um verbo: fetchData(), saveToCache().


2. Funções: uma tarefa — uma função



O princípio da responsabilidade única (Single Responsibility) se aplica não apenas a classes, mas também a funções. Se uma função faz mais de uma coisa — ela precisa ser dividida.



Exemplo ruim: a função faz tudo de uma vez

func processUserData(user: User) {    // Validação    guard user.email.contains("@") else { return }    // Salvamento no banco de dados    Database.shared.save(user)    // Envio de notificação    NotificationCenter.default.post(name: .userDidRegister, object: nil)    // Atualização da UI    DispatchQueue.main.async {        self.label.text = "Bem-vindo, \\(user.name)"    }}


Exemplo bom: divisão em funções pequenas

func registerUser(_ user: User) {    guard validateUser(user) else { return }    saveUserToDatabase(user)    postRegistrationNotification()    updateUI(for: user)}

private func validateUser(_ user: User) -> Bool { return user.email.contains("@") && !user.name.isEmpty}

private func saveUserToDatabase(_ user: User) { Database.shared.save(user)}

private func postRegistrationNotification() { NotificationCenter.default.post(name: .userDidRegister, object: nil)}

private func updateUI(for user: User) { DispatchQueue.main.async { self.welcomeLabel.text = "Bem-vindo, \\(user.name)" }}


Dica: Se você não consegue pensar em um nome curto para a função, provavelmente ela está fazendo demais.



3. Comentários: menos é melhor, mas com precisão



No Clean Code, comentários são um sinal de código mal escrito. Um bom código deve se documentar por si só. No entanto, existem exceções: lógica de negócios complexa, trabalho com legado ou APIs públicas.



Comentário redundante (ruim):

// Incrementa o contador em 1counter += 1


Comentário útil (bom):

// Usamos Decimal para evitar erros de arredondamento ao trabalhar com moedalet price = Decimal(string: "19.99") ?? .zero


Regras para trabalhar com comentários:

  • Não escreva o óbvio — o código se lê por si só.
  • Use // MARK: - para

Blogs

Book Recommendations