Code propre en Swift : principes et exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Clean Code sur Swift : principes et exemples



Le Clean Code n'est pas simplement un terme à la mode, mais une philosophie de développement qui impacte directement la vitesse de création de fonctionnalités, le nombre de bugs et le plaisir de travailler. Pour les développeurs Swift travaillant sur des applications iOS et macOS, il est particulièrement important d'écrire un code facile à lire et à maintenir, car les projets vivent des années et les équipes changent. Dans cet article, nous allons analyser les principes fondamentaux du Clean Code appliqués à Swift et examiner des exemples concrets.



1. Nommage : parlez le langage du domaine métier



Un bon nommage est la base d'un code lisible. Les noms des variables, fonctions et classes doivent répondre aux questions "quoi ?" et "pourquoi ?". Évitez les abréviations et les noms à une seule lettre (sauf i dans les courtes boucles).



Mauvais exemple :

func calc(a: Int, b: Int) -> Int {    return a * b + 10}


Bon exemple :

func calculateTotalPriceWithShipping(itemPrice: Int, shippingCost: Int) -> Int {    return itemPrice + shippingCost}


Pour les variables booléennes, utilisez les préfixes is, has, should :

var isUserLoggedIn: Bool = falsevar hasCompletedOnboarding: Bool = true


Les noms de classes doivent être des noms communs ( UserManager, NetworkService ), et les fonctions des verbes ou des phrases verbales ( fetchData(), validateEmail() ).



2. Fonctions : petites et avec une seule responsabilité



Chaque fonction doit faire exactement une chose et la faire bien. La longueur idéale d'une fonction est de 10 à 20 lignes. Si une fonction dépasse 30 lignes, découpez-la en plus petites.



Mauvais exemple : une fonction qui valide, sauvegarde et envoie une notification.

func processUser(_ user: User) {    // Validation    guard !user.name.isEmpty else { return }    guard user.age > 18 else { return }        // Sauvegarde    CoreDataManager.shared.save(user)        // Notification    NotificationCenter.default.post(name: .userDidRegister, object: nil)}


Bon exemple : division en trois fonctions distinctes.

func processUser(_ user: User) {    guard isValid(user) else { return }    saveUser(user)    notifyUserRegistration()}

private func isValid(_ user: User) -> Bool { return !user.name.isEmpty && user.age > 18}

private func saveUser(_ user: User) { CoreDataManager.shared.save(user)}

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


Évitez également un grand nombre de paramètres. S'il y en a plus de trois, regroupez-les dans une structure.



struct SearchConfig {    let query: String    let category: String?    let page: Int    let pageSize: Int}

func search(with config: SearchConfig) -> [Result] { ... }


3. SOLID en Swift : exemples pratiques



Les principes SOLID sont la pierre angulaire du Clean Code dans les langages orientés objet. Examinons deux principes clés avec des exemples Swift.



Principe de responsabilité unique (SRP)

Une classe ne doit avoir qu'une seule raison de changer. Ne mélangez pas la logique réseau et l'interface utilisateur.



// Violation du SRPclass UserViewController: UIViewController {    func fetchUser() {        URLSession.shared.dataTask(with: URL(string: "...")!) { ... }    }    func updateUI() { ... }}

// Correctionclass UserNetworkService { func fetchUser(completion: (User) -> Void) { ... }}

class UserViewController: UIViewController { let networkService = UserNetworkService() func loadUser() { networkService.fetchUser { [weak self] user in DispatchQueue.main.async { self?.updateU

Blogs

Book Recommendations