16 conseils de développement pour Android dans Kotlin. 3e partie

Bonjour encore! En prévision du début du cours de base sur le développement Android , nous partageons la dernière partie de l'article «16 conseils de développement pour Android dans la langue Kotlin».




Lire la première partie
Lire la deuxième partie

LATEINIT


L'une des principales caractéristiques de Kotlin est son engagement envers la sécurité zéro. L'instruction Lateinit fournit un moyen facile d'assurer une sécurité zéro et d'initialiser la variable comme Android l'exige. Cette fonctionnalité est géniale, cependant, vous devriez vous y habituer après avoir travaillé en Java. Une idée est que le champ est immédiatement déclaré avec la possibilité d'être nul:

var total = 0 var toolbar: Toolbar? = null 


Cette fonction de langue peut poser des problèmes lorsque vous travaillez avec des mises en page Android, car nous ne savons pas comment déclarer les vues avant la déclaration de la mise en page, car il n'est pas clair où elles existeront dans l' Activity ou le Fragment . Ceci est compensé par des tests supplémentaires pour la possibilité d'une valeur nulle à chaque endroit avec lequel nous interagissons, mais celui-ci est toujours hémorroïdes. Par conséquent, il est préférable d'utiliser le modificateur lateinit :

 lateinit var toolbar: Toolbar 

Maintenant, en tant que développeur, vous ne devez pas vous référer à la barre d'outils tant qu'elle n'est pas réellement initialisée. Cela fonctionne très bien lorsqu'il est utilisé avec une bibliothèque comme Butter Knife :

 @BindView(R.id.toolbar) lateinit var toolbar: Toolbar override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ButterKnife.bind(this) //       toolbar toolbar.setTitle("Hello There") } 

Type de sécurité


Certaines conventions Android nécessitent une saisie sûre car une saisie régulière n'empêche pas les erreurs de code. Par exemple, une manière typique de créer un fragment en action implique de vérifier via FragmentManager pour s'assurer qu'il existe déjà. Et seulement si ce n'est pas le cas, vous le créez et l'ajoutez à l'action. Lorsque vous examinez pour la première fois la saisie dans Kotlin, vous pouvez l'implémenter comme suit:

 var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as FeedFragment      .  as     ,     .   : var feedFragment: FeedFragment? = supportFragmentManager .findFragmentByTag(TAG_FEED_FRAGMENT) as? FeedFragment if (feedFragment == null) { feedFragment = FeedFragment.newInstance() supportFragmentManager.beginTransaction() .replace(R.id.root_fragment, feedFragment, TAG_FEED_FRAGMENT) .commit() } 

LEVERAGING LET


L'utilisation de let vous permet d'exécuter un bloc si la valeur de l'objet est différente de zéro. Cela vous permet d'éviter les vérifications nulles et rend le code plus lisible. En Java, cela ressemble à ceci:

 if (currentUser != null) { text.setText(currentUser.name) }   Kotlin   : user?.let { println(it.name) } 

Ce code est beaucoup plus lisible, et il crée automatiquement une variable avec une valeur non nulle sans risque de la mettre à zéro.

SNULLOREMPTY | ISNULLORBLANK


Nous devons vérifier les champs plusieurs fois pendant le développement de l'application Android. Si vous avez réussi cela sans utiliser Kotlin, vous connaissez probablement la classe TextUtils dans Android. La classe TextUtils est la suivante:

 if (TextUtils.isEmpty(name)) { //    } 

Dans cet exemple, vous remarquerez que l'utilisateur peut même ne définir que des espaces comme nom d'utilisateur, et il réussira le test. isNullOrEmpty et isNullOrBlank sont intégrés dans le langage Kotlin, éliminent le besoin de TextUtils.isEmpty ( someString ) et offrent l'avantage supplémentaire de ne vérifier que les espaces. Si nécessaire, vous pouvez utiliser quelque chose comme ceci:

 //       ... if (number.isNullOrEmpty()) { //     } //  ... if (name.isNullOrBlank()) { //     } 

La vérification de l'exactitude du remplissage des champs est souvent constatée lorsque l'inscription est nécessaire dans l'application. Ces méthodes intégrées sont idéales pour vérifier le champ et alerter l'utilisateur si quelque chose ne va pas. Pour des vérifications plus complexes, vous pouvez utiliser des méthodes d'extension, par exemple, pour les adresses e-mail:

 fun TextInputLayout.isValidForEmail(): Boolean { val input = editText?.text.toString() if (input.isNullOrBlank()) { error = resources.getString(R.string.required) return false } else if (emailPattern.matcher(input).matches()) { error = resources.getString(R.string.invalid_email) return false } else { error = null return true } } 

Conseils pour les avancés


Saviez-vous que vous pouvez utiliser des expressions lambda pour créer un code plus propre et plus concis?

Par exemple, lorsque vous travaillez en Java, il est typique d'avoir une classe d'écoute simple, telle que:

 public interface OnClickListener { void onClick(View v); } 

Une caractéristique distinctive de Kotlin est qu'il effectue des conversions SAM (Single Abstract Method) pour les classes Java. Un écouteur de clics en Java qui ressemble à:

 textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // -  } });  Kotlin     : textView.setOnClickListener { view -> // -  } 

Curieusement, une telle conversion n'est pas possible pour les interfaces SAM créées dans Kotlin. Cela peut surprendre et même légèrement décevoir les nouveaux utilisateurs de Kotlin. Si la même interface était définie dans Kotlin, l'auditeur ressemblerait à ceci:

 view.setOnClickListener(object : OnClickListener { override fun onClick(v: View?) { // -  } }) 

Pour raccourcir ce code, vous pouvez écrire vos écouteurs à la classe comme suit:

 private var onClickListener: ((View) -> Unit)? = null fun setOnClickListener(listener: (view: View) -> Unit) { onClickListener = listener } //     onClickListener?.invoke(this) 

Cela vous ramènera à une syntaxe lambda simple qui rend possible la conversion SAM automatique.

Conclusion


J'ai rassemblé les hacks de vie les plus utiles de tout ce que j'ai appris depuis que je me suis intéressé à la langue Kotlin. J'espère que la connaissance de ces conseils vous aidera considérablement à développer vos propres projets.

C’est tout. Rendez-vous sur le parcours !

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


All Articles