Sauberer Code in Swift: Prinzipien und praktische Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Clean Code auf Swift: Prinzipien und Beispiele



Clean Code ist nicht nur ein modischer Begriff, sondern eine Entwicklungsphilosophie, die sich direkt auf die Geschwindigkeit der Feature-Entwicklung, die Anzahl der Fehler und die Freude an der Arbeit auswirkt. Für Swift-Entwickler, die an iOS- und macOS-Apps arbeiten, ist es besonders wichtig, Code zu schreiben, der leicht zu lesen und zu warten ist, da Projekte jahrelang bestehen und sich Teams verändern. In diesem Artikel werden wir die grundlegenden Prinzipien von Clean Code in Bezug auf Swift erläutern und konkrete Beispiele betrachten.



1. Benennung: Sprechen Sie die Sprache der Fachdomäne



Richtige Benennung ist die Grundlage für lesbaren Code. Namen von Variablen, Funktionen und Klassen sollten die Fragen "Was?" und "Warum?" beantworten. Vermeiden Sie Abkürzungen und einbuchstabige Namen (außer i in kurzen Schleifen).



Schlechtes Beispiel:

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


Gutes Beispiel:

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


Für boolesche Variablen verwenden Sie die Präfixe is, has, should:

var isUserLoggedIn: Bool = falsevar hasCompletedOnboarding: Bool = true


Klassennamen sollten Substantive sein ( UserManager, NetworkService ), und Funktionen sollten Verben oder Verbphrasen sein ( fetchData(), validateEmail() ).



2. Funktionen: Klein und mit einer einzigen Verantwortung



Jede Funktion sollte genau eine Sache tun und diese gut machen. Die ideale Länge einer Funktion beträgt 10-20 Zeilen. Wenn eine Funktion mehr als 30 Zeilen hat, teilen Sie sie in kleinere auf.



Schlechtes Beispiel: Eine Funktion, die validiert, speichert und eine Benachrichtigung sendet.

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


Gutes Beispiel: Aufteilung in drei separate Funktionen.

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)}


Vermeiden Sie auch eine große Anzahl von Parametern. Wenn es mehr als drei sind, fassen Sie sie in einer Struktur zusammen.



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

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


3. SOLID in Swift: Praktische Beispiele



Die SOLID-Prinzipien sind ein Eckpfeiler von Clean Code in objektorientierten Sprachen. Betrachten wir zwei Schlüsselprinzipien anhand von Swift-Beispielen.



Single-Responsibility-Prinzip (SRP)

Eine Klasse sollte nur einen Grund für Änderungen haben. Vermischen Sie nicht Netzwerklogik und UI.



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

// Korrekturclass 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

Buchempfehlungen