
Bevor Sie diese Tipps lesen, sollten Sie die Kotlin-Dokumentation lesen und die Sprache selbst unter try.kotlinlang.org
lernen. Da diese Tipps speziell auf die Verwendung von Kotlin im Rahmen der Android-Entwicklung abzielen, sollten Sie auch Erfahrung mit dem Android SDK haben. Es ist auch ratsam, sich mit dem Kotlin-Plugin und der Verwendung von Kotlin mit Android Studio von JetBrains (Entwicklern von Kotlin) vertraut zu machen.
Kotlin Basic Android-Tipps
Lazy Loading
Lazy Loading hat mehrere Vorteile. Zum Beispiel:
- Sie sparen Startzeit, da das Laden einiger Daten verzögert wird, bis sie benötigt werden. Dies gilt insbesondere für Android, da der Benutzer den Inhalt der Anwendung schneller sieht, anstatt lange auf das Starten und Ansehen des Downloads zu warten.
- Sie sparen Speicher, da die Ressource nur auf Anforderung in den Speicher des Geräts geladen wird. Dies ist besonders wichtig für mobile Plattformen, da die Ressourcen von Mobiltelefonen sehr begrenzt sind.
Wenn Sie beispielsweise eine Einkaufsanwendung erstellen, in der Benutzer hauptsächlich von Ihrer Wahl geleitet werden, kann das verzögerte Laden in der eigentlichen Einkaufs-API konfiguriert werden. Beispiel:
val purchasingApi: PurchasingApi by lazy { val retrofit: Retrofit = Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(MoshiConverterFactory.create()) .build() retrofit.create(PurchasingApi::class.java) }
Die Verwendung eines solchen verzögerten Downloads hat zur Folge, dass Sie keine nicht beanspruchten Ressourcen herunterladen und verwenden, wenn der Benutzer nicht versucht, in der Anwendung einen Kauf zu tätigen.
Auch verzögertes Laden ist ein guter Weg, um die Initialisierungslogik zu kapseln, zum Beispiel:
val bounds: RectF by lazy { RectF(0f, 0f, width.toFloat(), height.toFloat()) }
Sobald der erste Aufruf erfolgt, wird eine Instanz von RectF basierend auf der aktuellen Breite und Höhe der Ansicht erstellt, sodass diese nicht separat erstellt und dieses Objekt festgelegt werden muss.
Kundenspezifische Getter und Setter
Um benutzerdefinierte Einstellungen in der Kotlin-Sprache zu lesen, wird ein Strukturmodell mit dem angegebenen Benutzerverhalten verwendet, um Felder abzurufen und festzulegen. Wenn Sie Modelle für bestimmte Frameworks verwenden, z. B. das Parse SDK, wählen Sie Werte aus, die keine lokalen Klassenvariablen sind, die jedoch mithilfe einer benutzerdefinierten Methode, z. B. von JSON, abgerufen und gespeichert werden.
Mit benutzerdefinierten Erfassungs- und Installationsmethoden können wir den Zugriff vereinfachen, zum Beispiel:
@ParseClassName("Book") class Book : ParseObject() {
Das Abrufen dieser Werte ähnelt dem Verwenden der Eigenschaftenzugriffssyntax in anderen Modellen, z.
val book = api.getBook() textAuthor.text = book.author
Wenn Sie Ihr Modell von Parse auf eine andere Datenquelle übertragen müssen, muss der Code praktisch nicht geändert werden.
Lambda
Lambdas reduzieren die Verdoppelung von Codezeilen in der Quelldatei und ermöglichen die Verwendung von funktionaler Programmierung. Obwohl Lambdas derzeit bereits auf Android verwendet werden, bringt Kotlin sie auf die nächste Stufe und stellt sicher, dass Sie sich nicht mit Retrolambda auseinandersetzen oder Ihre Art zu bauen ändern müssen.
Das Anhören einer Datei würde beispielsweise so aussehen:
button.setOnClickListener { view -> startDetailActivity() }
Und so funktioniert es mit Rückgabewerten:
toolbar.setOnLongClickListener { showContextMenu() true }
Im Android SDK muss häufig eine dieser Methoden implementiert werden. Der Lambda kommt damit mit einem Knall zurecht.
Datenklassen
Datenklassen vereinfachen Klassen, indem sie automatisch die Methoden
equals()
,
hashCode()
,
copy()
und
toString()
hinzufügen. Sie klären, welche Daten im Modell verwendet werden sollen, und trennen Daten von der Logik.
Hier ist zum Beispiel eine solche Datenklasse:
data class User(val name: String, val age: Int)
Das ist alles. Für seine Arbeit wird nichts mehr benötigt. Wenn Sie Datenklassen mit etwas ähnlichem wie Gson oder einer anderen JSON-Typbibliothek verwenden, können Sie einen Standardkonstruktor mit Standardwerten erstellen. Beispiel:
data class User( @SerializedName("name") val name: String = "", @SerializedName("age") val age: Int = 0 )
Datensatzfilterung
Bei der Arbeit mit der API entsteht ständig die Notwendigkeit, Sammlungen zu verarbeiten. Meist müssen sie gefiltert oder Inhalte geändert werden.
Mit dem Filtern von Sammlungen in Kotlin können Sie den Code einfacher und verständlicher gestalten. Sie können den Inhalt einer Ergebnisliste angeben, indem Sie Sammlungen filtern. Beispiel:
val users = api.getUsers() val activeUsersNames = items.filter { it.active } adapter.setUsers(activeUsers)
Die in Kotlin integrierten Sammlungsfiltermethoden ähneln stark den Methoden, die in anderen Programmiersprachen wie Java 8 oder beim Arbeiten mit Swift-Sammlungsarten verwendet werden. Einheitliche Methoden zum Filtern von Sammlungen vereinfachen das gegenseitige Verständnis bei der Kommunikation mit Mitarbeitern über die Notwendigkeit, bestimmte Vorgänge auszuführen, um die erforderlichen Elementlisten abzurufen und anzuzeigen.
Dies schließt den ersten Teil des Artikels ab und lädt Sie zu einem kostenlosen Webinar zum Thema „Unit Testing in Android“ ein .