Clean Code em Swift: princípios e exemplos para iOS/macOS

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 in Portuguese (Português), with all HTML tags preserved and only the text content translated. ```html

Clean Code em Swift: por que isso é importante para um desenvolvedor iOS



Todo desenvolvedor já passou pela situação em que o código antigo se transforma em "espaguete" depois de um mês. No mundo do Swift, onde os projetos crescem rapidamente, manter a limpeza do código se torna crítico. Clean Code não é apenas estética, mas uma ferramenta que economiza horas de depuração e simplifica a adição de novos recursos. Neste artigo, vamos analisar os princípios-chave do Clean Code aplicados ao Swift, com exemplos reais para iOS e macOS.



1. Nomenclatura: legibilidade em primeiro lugar



A nomenclatura correta é a base do código limpo. No Swift, onde as APIs são frequentemente autodocumentadas, nomes ruins são a principal fonte de confusão.



Exemplo ruim:

class DataManager {    func getData() -> [String: Any] {        // ...    }}


Exemplo bom:

class UserProfileFetcher {    func fetchUserProfile(for userID: String) -> Result<UserProfile, NetworkError> {        // ...    }}


  • Use verbos para métodos (fetch, update, delete).
  • Evite abreviações — vc, btn, str — isso é coisa do passado.
  • Variáveis booleanas devem ser lidas como afirmações: isLoggedIn, hasNetworkConnection.


2. Funções: pequenas e com um único propósito



No Swift, onde closures e programação funcional são populares, é fácil se empolgar e escrever uma função monolítica. O princípio da responsabilidade única (Single Responsibility) funciona 100% aqui.



Exemplo ruim:

func processUserData(user: User) {    // Validação    if user.email.isEmpty { return }    // Salvar no CoreData    CoreDataStack.shared.save(user)    // Enviar para o servidor    APIClient.shared.send(user)    // Atualizar UI    DispatchQueue.main.async {        self.tableView.reloadData()    }}


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

func processUserData(user: User) {    guard validateUser(user) else { return }    saveUserLocally(user)    sendUserToServer(user)    updateUI()}

private func validateUser(_ user: User) -> Bool { return !user.email.isEmpty}

private func saveUserLocally(_ user: User) { CoreDataStack.shared.save(user)}

private func sendUserToServer(_ user: User) { APIClient.shared.send(user)}

private func updateUI() { DispatchQueue.main.async { self.tableView.reloadData() }}


Regra das 20 linhas: se a função não couber na tela — divida. Cada função deve fazer apenas uma ação.



3. SOLID em Swift: exemplos práticos



Os princípios SOLID não são abstração, mas ferramentas de trabalho. Vamos analisar dois essenciais para iOS.



Princípio Aberto/Fechado (Open/Closed)

As classes devem estar abertas para extensão, mas fechadas para modificação. Em vez de alterar uma classe pronta, use protocolos.



protocol PaymentProcessor {    func process(amount: Double, currency: String) -> Bool}

class ApplePayProcessor: PaymentProcessor { func process(amount: Double, currency: String) -> Bool { // Lógica do Apple Pay return true }}

class StripeProcessor: PaymentProcessor { func process(amount: Double, currency: String) -> Bool { // Lógica do Stripe return true }}

// Agora adicionar uma nova forma de pagamento é simples: criar uma nova classe, sem mexer nas antigas.


Princípio da Substituição de Liskov (Liskov Substitution)

As subclasses não devem quebrar a lógica da classe pai. Um erro típico é sobrescrever um método alterando o contrato.



class Vehicle {    func startEngine() {        print("Engine started")    }}

class ElectricCar: Vehicle { override func startEngine() { // Violação: elétric ```

Blogs

Book Recommendations