Je suis nouveau chez Kotlin, et je cherche des conseils pour réécrire le code suivant de manière plus élégante.
var s: String? = "abc"
if (s != null && s.isNotEmpty()) {
// Do something
}
Si j'utilise le code suivant:
if (s?.isNotEmpty()) {
Le compilateur se plaint que
Required: Boolean
Found: Boolean?
Merci.
Vous pouvez utiliser isNullOrEmpty
ou son ami isNullOrBlank
like so:
if(!s.isNullOrEmpty()){
// s is not empty
}
isNullOrEmpty
et isNullOrBlank
sont des méthodes d'extension sur CharSequence?
. Vous pouvez donc les utiliser en toute sécurité avec null
. Sinon, transformez null
en false comme ceci:
if(s?.isNotEmpty() ?: false){
// s is not empty
}
vous pouvez aussi faire ce qui suit
if(s?.isNotEmpty() == true){
// s is not empty
}
Bien que j'aime beaucoup la réponse de @miensol, ma réponse serait (et c'est pourquoi je ne la mets pas dans un commentaire): if (s != null && s.isNotEmpty()) { … }
en fait est la manière idiomatique de Kotlin. Ce n'est que de cette manière que vous obtiendrez une distribution intelligente dans String
à l'intérieur du bloc, tandis qu'avec la réponse acceptée, vous devrez utiliser s!!
à l'intérieur du bloc.
ou créez une méthode d'extension et utilisez-la comme appel sécurisé:
fun String?.emptyToNull(): String? {
return if (this == null || this.isEmpty()) null else this
}
fun main(args: Array<String>) {
val str1:String?=""
val str2:String?=null
val str3:String?="not empty & not null"
println(str1.emptyToNull()?:"empty string")
println(str2.emptyToNull()?:"null string")
println(str3.emptyToNull()?:"will not print")
}