Dois-je utiliser double =
ou triple =
?
if(a === null) {
//do something
}
ou
if(a == null) {
//do something
}
De même pour 'pas égal':
if(a !== null) {
//do something
}
ou
if(a != null) {
//do something
}
Dois-je utiliser double =
ou triple =
?
if(a === null) {
//do something
}
ou
if(a == null) {
//do something
}
De même pour 'pas égal':
if(a !== null) {
//do something
}
ou
if(a != null) {
//do something
}
Réponses:
Les deux approches génèrent le même bytecode afin que vous puissiez choisir ce que vous préférez.
la source
Une égalité structurelle
a == b
se traduit parPar conséquent, en comparant à
null
, l'égalité structurellea == null
se traduit par une égalité référentiellea === null
.Selon la documentation , il ne sert à rien d'optimiser votre code, vous pouvez donc utiliser
a == null
eta != null
noter que si la variable est une propriété mutable, vous ne pourrez pas la transtyper intelligemment en son type non nullable dans l'
if
instruction (car la valeur peut avoir été modifiée par un autre thread) et vous devrez utiliser l'opérateur d'appel sécurisé avec à lalet
place.Opérateur d'appel sécurisé
?.
Vous pouvez l'utiliser en combinaison avec l'opérateur Elvis.
Opérateur Elvis
?:
(je suppose parce que le point d'interrogation ressemble aux cheveux d'Elvis)Et si vous souhaitez exécuter un bloc de code
Combiner les deux
la source
if
pour les vérifications nulles?a?.let{} ?: run{}
n'est approprié que dans de rares cas, sinon ce n'est pas idiomatiquenull
chèques, je listais d' autres options viables. Bien que je ne sache pas s'il yrun
a une sorte de pénalité de performance. Je mettrai à jour ma réponse pour la rendre plus claire.a
est unvar
, alors en utilisant laa?.let{} ?: run{}
garantie qu'il sera lié correctement dans lelet
pour toute la portée. Sia
est aval
, alors il n'y a pas de différence.val
, alors utiliser let est différent et c'est mauvais. J'ai trouvé cet article très bon pour l'expliquer - Kotlin: N'utilisez pas simplement LET pour un contrôle nul .Manières Kotlin de gérer null
Opération d'accès sécurisé
Laisser fonctionner
Sortie anticipée
Ombres immuables
Valeur par défaut
Utilisez val au lieu de var
val
est en lecture seule,var
est modifiable. Il est recommandé d'utiliser autant de propriétés en lecture seule que possible, elles sont thread-safe.Utiliser lateinit
Parfois, vous ne pouvez pas utiliser de propriétés immuables. Par exemple, cela se produit sur Android lorsqu'une propriété est initialisée lors d'un
onCreate()
appel. Pour ces situations, Kotlin a une fonction de langage appeléelateinit
.la source
Ajout à @Benito Bertoli,
la combinaison est en fait différente de if-else
Le résultat est:
Mais si:
Le résultat est:
Aussi, si vous utilisez d'abord elvis:
Le résultat est:
la source
Vérifiez les méthodes utiles, cela pourrait être utile:
Voici un exemple possible d'utilisation de ces fonctions:
la source