Clean Code in Kotlin: Prinzipien und Beispiele für sauberen Code

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 Kotlin: Prinzipien und Beispiele für sauberen Code



Sauberer Code ist nicht nur ein modischer Begriff, sondern eine grundlegende Fähigkeit eines professionellen Entwicklers. Wenn Sie in Kotlin, einer modernen und ausdrucksstarken Sprache, schreiben, werden die Prinzipien von Clean Code noch relevanter. Code, der leicht zu lesen, zu ändern und zu warten ist, spart Stunden beim Debugging und erleichtert dem gesamten Team die Arbeit. In diesem Artikel analysieren wir die wichtigsten Prinzipien von Clean Code auf Kotlin mit konkreten Beispielen, die Ihnen helfen, eleganten und zuverlässigen Code zu schreiben.



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



Die richtige Benennung ist die Grundlage von sauberem Code. Namen von Variablen, Funktionen und Klassen sollten sofort die Fragen "Was ist das?" und "Wozu dient es?" beantworten. Vermeiden Sie einbuchstabige Abkürzungen und abstrakte Bezeichnungen wie data oder temp.



Schlechtes Beispiel:

val d = mutableListOf<String>()fun prc(u: User) {    d.add(u.name)    if (u.age > 18) println(u.name)}


Gutes Beispiel:

val registeredUserNames = mutableListOf<String>()

fun printAdultUserName(user: User) { registeredUserNames.add(user.name) if (user.isAdult()) { println(user.name) }}


Im guten Beispiel ist sofort klar, was die Funktion tut und welche Daten in der Liste gespeichert sind. Verwenden Sie Substantive für Klassen (UserRepository), Verben für Funktionen (processOrder) und boolesche Prädikate (isActive, hasPermission).



2. Funktionen: Klein, einzelaufgabenorientiert und ohne Seiteneffekte



Eine der Hauptideen von Clean Code ist, dass eine Funktion nur eine Sache tun sollte. Wenn eine Funktion 15-20 Zeilen überschreitet, muss sie höchstwahrscheinlich aufgeteilt werden. Kotlin mit seinen Erweiterungsfunktionen und Lambdas eignet sich hervorragend dafür.



Beispiel: Aufteilen einer komplexen Funktion



Angenommen, wir haben eine Funktion zur Verarbeitung einer Bestellung:



fun processOrder(order: Order) {    // Validierung    if (order.items.isEmpty()) throw IllegalArgumentException("Order must have items")    if (order.totalPrice < 0.0) throw IllegalArgumentException("Invalid price")        // Rabattberechnung    var finalPrice = order.totalPrice    if (order.user.isPremium) {        finalPrice *= 0.9    }        // Benachrichtigung senden    emailService.send(order.user.email, "Your order is confirmed")    smsService.send(order.user.phone, "Order #${order.id} confirmed")}


Refactoring nach den Prinzipien von Clean Code:



fun processOrder(order: Order) {    validateOrder(order)    val finalPrice = calculateFinalPrice(order)    sendOrderConfirmation(order, finalPrice)}

private fun validateOrder(order: Order) { require(order.items.isNotEmpty()) { "Order must have items" } require(order.totalPrice >= 0.0) { "Invalid price" }}

private fun calculateFinalPrice(order: Order): Double { return if (order.user.isPremium) order.totalPrice * 0.9 else order.totalPrice}

private fun sendOrderConfirmation(order: Order, finalPrice: Double) { val message = "Order #${order.id} confirmed. Total: $finalPrice" notificationService.notifyUser(order.user, message)}


Jetzt ist jede Funktion für eine einzelne Aufgabe verantwortlich, sie sind leicht zu testen und wiederzuverwenden.



3. Null Safety: Nutzen Sie die Möglichkeiten von Kotlin



Eine der Hauptfunktionen von Kotlin ist die Null Safety. Clean Code auf Kotlin bedeutet die vollständige Vermeidung von null, wo immer möglich. Vermeiden Sie die Verwendung von !! (not-null assertion) – dies ist fast immer ein Zeichen für schlechtes Design.



Schlechtes Beispiel:

fun getUserName(userId: String): String {    val user = userRepository.findById(userId)!!    return user.name!!}


Gutes Beispiel:

fun getUserName(userId: String): String? {    val user = userReposi                

Blogs

Buchempfehlungen