16 conseils de développement pour Android dans Kotlin. Partie 1



Avant de lire ces conseils, vous devez lire la documentation de Kotlin et apprendre la langue vous-même sur try.kotlinlang.org . Étant donné que ces conseils visent spécifiquement à utiliser Kotlin dans le contexte du développement Android, vous devez également avoir une expérience avec le SDK Android. Il est également conseillé de se familiariser avec le plugin Kotlin et l'utilisation de Kotlin avec Android Studio de JetBrains (créateurs de Kotlin)

Kotlin Basic Android Tips


Chargement paresseux


Le chargement paresseux présente plusieurs avantages. Par exemple, tels que:

  • Vous économisez du temps de démarrage car le chargement de certaines données est retardé jusqu'à ce qu'elles soient nécessaires. Cela est particulièrement vrai pour Android, car l'utilisateur verra le contenu de l'application plus rapidement au lieu d'un long temps d'attente pour lancer et regarder le téléchargement.
  • Vous économisez de la mémoire, car la ressource est chargée dans la mémoire de l'appareil uniquement sur demande. Ceci est particulièrement important pour les plates-formes mobiles, car les ressources des téléphones mobiles sont assez limitées.

Par exemple, si vous créez une application d'achat dans laquelle les utilisateurs seront principalement guidés par votre choix, le chargement paresseux peut être configuré sur l'API d'achat réelle, par exemple, quelque chose comme ceci:

 val purchasingApi: PurchasingApi by lazy { val retrofit: Retrofit = Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(MoshiConverterFactory.create()) .build() retrofit.create(PurchasingApi::class.java) } 

Le résultat de l'utilisation d'un tel téléchargement paresseux sera que si l'utilisateur n'essaie pas d'effectuer un achat dans l'application, vous ne le téléchargerez pas et n'utiliserez pas de ressources non réclamées.

Le chargement paresseux est également un bon moyen d'encapsuler la logique d'initialisation, par exemple:

 val bounds: RectF by lazy { RectF(0f, 0f, width.toFloat(), height.toFloat()) } 

Dès que le premier appel est effectué, une instance de RectF est créée en fonction de la largeur et de la hauteur actuelles de la vue, ce qui élimine la nécessité de la créer séparément et de définir cet objet.

Getters et setters personnalisés


Pour lire les paramètres personnalisés dans le langage Kotlin, un modèle structurel avec un comportement utilisateur spécifié est utilisé pour obtenir et définir des champs. Lorsque vous utilisez des modèles pour des cadres spécifiques, tels que le SDK d'analyse, vous sélectionnez des valeurs qui ne sont pas des variables de classe locales, mais qui sont récupérées et stockées à l'aide d'une méthode personnalisée, par exemple, à partir de JSON.

En utilisant des méthodes d'acquisition et d'installation définies par l'utilisateur, nous pouvons simplifier l'accès, par exemple:

 @ParseClassName("Book") class Book : ParseObject() { // getString() and put() -  ParseObject var name: String get() = getString("name") set(value) = put("name", value) var author: String get() = getString("author") set(value) = put("author", value) } 

La récupération de ces valeurs sera similaire à l'utilisation de la syntaxe d'accès aux propriétés dans d'autres modèles, tels que:

 val book = api.getBook() textAuthor.text = book.author 

Maintenant, si vous devez transférer votre modèle de Parse vers une autre source de données, le code n'a pratiquement pas besoin d'être modifié.

Lambda


Les lambdas réduisent la duplication des lignes de code dans le fichier source et permettent l'utilisation de la programmation fonctionnelle. Bien que les lambdas soient actuellement utilisés par Android, Kotlin les porte à un nouveau niveau, garantissant que vous n'avez pas à gérer Retrolambda ou à changer la façon dont vous construisez.

Par exemple, écouter un fichier ressemblerait à ceci:

 button.setOnClickListener { view -> startDetailActivity() } 

Et voici comment cela fonctionne avec les valeurs de retour:

 toolbar.setOnLongClickListener { showContextMenu() true } 

Dans le SDK Android, il est souvent nécessaire d'implémenter l'une de ces méthodes. Le lambda fait face à cela avec un bang.

Classes de données


Les classes de données simplifient les classes en ajoutant automatiquement les méthodes equals() , hashCode() , copy() et toString() . Ils clarifient les données à utiliser dans le modèle, séparant les données de la logique.

Par exemple, voici une telle classe de données:

 data class User(val name: String, val age: Int) 

C’est tout. Rien de plus n'est nécessaire pour son travail. Si vous utilisez des classes de données avec quelque chose de similaire à Gson ou à une autre bibliothèque de types JSON, vous pouvez créer un constructeur par défaut avec des valeurs par défaut, par exemple:

 data class User( @SerializedName("name") val name: String = "", @SerializedName("age") val age: Int = 0 ) 

Filtrage des jeux de données


En travaillant avec l'API, le besoin de traiter des collections se fait constamment sentir. Le plus souvent, ils doivent être filtrés ou modifiés.

En utilisant les collections de filtrage Kotlin, vous pouvez rendre le code plus simple et plus compréhensible. Vous pouvez spécifier le contenu d'une liste de résultats en filtrant les collections, par exemple, comme ceci:

 val users = api.getUsers() val activeUsersNames = items.filter { it.active } adapter.setUsers(activeUsers) 

Les méthodes de filtrage de collection intégrées de Kotlin sont très similaires aux méthodes utilisées dans d'autres langages de programmation comme Java 8 ou lorsque vous travaillez avec des types de collection Swift. Les méthodes unifiées de filtrage des collections simplifient la compréhension mutuelle lors de la communication avec les employés sur la nécessité d'effectuer des opérations spécifiques pour obtenir et afficher les listes d'éléments nécessaires.

Ceci conclut la première partie de l'article et vous invite à assister à un webinaire gratuit sur le thème: «Tests unitaires dans Android» .

Source: https://habr.com/ru/post/fr479406/


All Articles