Revue de code en Swift : quoi vérifier et comment donner un retour
La revue de code n'est pas seulement une vérification formelle du code avant la fusion. C'est l'un des outils les plus efficaces pour améliorer la qualité du code, diffuser les connaissances au sein de l'équipe et prévenir les bogues. Pour les développeurs iOS/macOS débutants, le processus de révision semble souvent intimidant : "Et si je rate une erreur critique ?" ou "Comment rédiger une remarque sans offenser un collègue ?". Dans cet article, nous allons détailler sur quoi se concentrer lors de la vérification du code Swift et comment donner un retour qui soit utile et motivant.
Que vérifier dans le code Swift : une liste de contrôle pour le relecteur
Pour que la révision soit structurée et efficace, divisez la vérification en plusieurs blocs logiques. Commencez par une compréhension générale de la tâche, puis passez aux détails.
1. Architecture et logique
Le premier point et le plus important : le code résout-il la tâche assignée ? Ne vous attardez pas sur le style tant que vous n'êtes pas sûr que la logique est correcte.
- Conformité aux exigences : Vérifiez que le code fait exactement ce qui est décrit dans la tâche ou le ticket.
- Exactitude des algorithmes : Y a-t-il des erreurs logiques ? Par exemple, les conditions dans
ifouguardne sont-elles pas inversées ? - Traitement des cas limites : Que se passe-t-il si le tableau est vide et que la requête réseau renvoie
nil? Le code doit être robuste.
// ❌ Mauvais : le cas où le tableau est vide n'est pas pris en comptefunc firstElement(_ array: [Int]) -> Int { return array[0] // Crash !}
// ✅ Bon : extraction sécuriséefunc firstElement(_ array: [Int]) -> Int? { return array.first}2. Sécurité des types et gestion des optionnels
Swift est un langage à typage strict, et sa force réside dans la sécurité. Assurez-vous que l'auteur du code n'abuse pas du déballage forcé.
- Déballage forcé (!) : Autorisé uniquement dans les cas où vous êtes sûr à 100 % que la valeur n'est pas
nil(par exemple,IBOutlet). - Utilisation de la liaison optionnelle :
if letouguard let— la méthode standard et sécurisée. - IUO (Optionnel implicitement déballé) : Essayez de les éviter, utilisez des optionnels normaux.
// ❌ Mauvais : déballage forcé sans vérificationlet url = URL(string: "https://example.com")!// Si la chaîne est invalide, l'application plantera
// ✅ Bon : initialisation sécuriséeguard let url = URL(string: "https://example.com") else { print("URL invalide") return}3. Nommage et lisibilité du code
Le code est lu bien plus souvent qu'il n'est écrit. De bons noms pour les variables, fonctions et types sont la clé de la maintenabilité du projet.
- Conventions Swift : Utilisez
camelCasepour les variables/fonctions etPascalCasepour les types (struct, class, enum). - Clarté du nom : Le nom doit décrire la fonction.
vest mauvais,userNameest bon. - Propriétés booléennes : Doivent commencer par
is,has,can(par exemple,isEnabled).
// ❌ Mauvaislet a = fetchData()
// ✅ Bonlet userProfile = fetchCurrentUserProfile()4. Performances et gestion de la mémoire
Pour les applications iOS/macOS, il est crucial d'éviter les fuites mémoire et les calculs inutiles.
- Cycles de références fortes (Retain cycles) : Vérifiez les fermetures (closures) — ne capturent-elles pas
selfsans[weak self]ou[unowned self]. - Gestion des threads : Toutes les mises à jour de l'interface utilisateur doivent se faire sur le thread principal. Vérifiez si
DispatchQueue.main.asyncest utilisé. - Év