Code-Review in Swift: Was man prüfen und wie man Feedback geben sollte
Code-Review ist nicht nur eine formelle Überprüfung des Codes vor dem Merge. Es ist eines der effektivsten Werkzeuge zur Verbesserung der Codequalität, zur Verbreitung von Wissen im Team und zur Vermeidung von Fehlern. Für angehende iOS/macOS-Entwickler wirkt der Review-Prozess oft einschüchternd: "Was, wenn ich einen kritischen Fehler übersehe?" oder "Wie schreibe ich einen Kommentar, ohne einen Kollegen zu verletzen?". In diesem Artikel gehen wir darauf ein, worauf man bei der Überprüfung von Swift-Code konkret achten sollte und wie man Feedback gibt, das nützlich und motivierend ist.
Was man in Swift-Code prüfen sollte: Eine Checkliste für den Reviewer
Damit das Review strukturiert und effektiv ist, unterteilen Sie die Überprüfung in mehrere logische Blöcke. Beginnen Sie mit dem allgemeinen Verständnis der Aufgabe und gehen Sie dann zu den Details über.
1. Architektur und Logik
Der erste und wichtigste Punkt: Löst der Code die gestellte Aufgabe? Vertiefen Sie sich nicht in den Stil, bevor Sie sicher sind, dass die Logik korrekt ist.
- Erfüllung der Anforderungen: Überprüfen Sie, ob der Code genau das tut, was in der Aufgabe oder im Ticket beschrieben ist.
- Richtigkeit der Algorithmen: Gibt es logische Fehler? Zum Beispiel, ob Bedingungen in
ifoderguardvertauscht wurden. - Behandlung von Randfällen: Was passiert, wenn das Array leer ist oder die Netzwerkanfrage
nilzurückgibt? Der Code sollte robust sein.
// ❌ Schlecht: Der Fall eines leeren Arrays wird nicht berücksichtigtfunc firstElement(_ array: [Int]) -> Int { return array[0] // Crash!}
// ✅ Gut: Sicheres Extrahierenfunc firstElement(_ array: [Int]) -> Int? { return array.first}2. Typsicherheit und Umgang mit Optionals
Swift ist eine streng typisierte Sprache, und ihre Stärke ist die Sicherheit. Stellen Sie sicher, dass der Autor des Codes Force Unwrapping nicht missbraucht.
- Force Unwrap (!): Nur in Fällen zulässig, in denen Sie zu 100% sicher sind, dass der Wert nicht
nilist (z. B.IBOutlet). - Verwendung von Optional Binding:
if letoderguard letist der Standard- und sichere Weg. - IUO (Implicitly Unwrapped Optional): Vermeiden Sie diese nach Möglichkeit, verwenden Sie normale Optionals.
// ❌ Schlecht: Force Unwrap ohne Prüfunglet url = URL(string: "https://example.com")!// Wenn die Zeichenkette ungültig ist, stürzt die App ab
// ✅ Gut: Sichere Initialisierungguard let url = URL(string: "https://example.com") else { print("Ungültige URL") return}3. Benennung und Lesbarkeit des Codes
Code wird viel häufiger gelesen als geschrieben. Gute Namen für Variablen, Funktionen und Typen sind der Schlüssel zur Wartbarkeit eines Projekts.
- Swift-Konventionen: Verwenden Sie
camelCasefür Variablen/Funktionen undPascalCasefür Typen (struct, class, enum). - Aussagekräftigkeit des Namens: Der Name sollte den Zweck beschreiben.
vist schlecht,userNameist gut. - Boolesche Eigenschaften: Sollten mit
is,has,canbeginnen (z. B.isEnabled).
// ❌ Schlechtlet a = fetchData()
// ✅ Gutlet userProfile = fetchCurrentUserProfile()4. Leistung und Speicherverwaltung
Für iOS/macOS-Anwendungen ist es entscheidend, Speicherlecks und unnötige Berechnungen zu vermeiden.
- Starke Referenzzyklen (Retain cycles): Überprüfen Sie Closures – erfassen sie
selfohne[weak self]oder[unowned self]. - Arbeit mit Threads: Alle UI-Updates müssen im Hauptthread erfolgen. Überprüfen Sie, ob
DispatchQueue.main.asyncverwendet wird. - Aus