2016-12-15 20 views
5

Kotlin’de yeniyim ve aşağıdaki kodu daha zarif bir şekilde yeniden yazmanızı tavsiye ediyorum.Kotlin'de boş olmayan, boş olmayan dizeler için nasıl test edilir?

var s: String? = "abc" 
if (s != null && s.isNotEmpty()) { 
    // Do something 
} 

Aşağıdaki kodu kullanırsanız:

if (s?.isNotEmpty()) { 

derleyici o

Required: Boolean 
Found: Boolean? 

Teşekkür şikayet.

+1

Düzenlemek misiniz senin başlığın daha iyi sorunuzu yansıtmak için? 'Bu kodu bir Kotlin dilinde nasıl yazılır?' Diye adlandırılan birçok soruya sahip olmak, daha sonra bakmaktan gerçekten kolay olmaz. – marstran

+0

@marstran Evet, tabi ki. Başlık hakkında herhangi bir öneriniz var mı? Sorunumu açıklamanın iyi bir yolunu bulamıyorum. Teşekkürler. – iForests

+0

Kotlin'de boş olmayan, boş olmayan dizeler için nasıl idiomatik olarak test edilir? Temel olarak asıl soruyu açıklayan bir şey. – marstran

cevap

11

Öyle gibi isNullOrEmpty veya arkadaşı isNullOrBlank kullanabilirsiniz:

if(!s.isNullOrEmpty()){ 
    // s is not empty 
} 

Hem isNullOrEmpty ve isNullOrBlankCharSequence? üzerinde uzatma yöntemleri böylece null ile güvenle kullanabilirsiniz. Alternatif yanlış şöyle içine null çevirmek: Çok @miensol tarafından cevabını rağmen

if(s?.isNotEmpty() ?: false){ 
    // s is not empty 
} 
+0

Tamam, teşekkürler. Sanırım aptalca bir soru sordum. – iForests

+2

Eğer 's' yi akıllı alçı kullanmadan null olarak kullanmaya devam etmek istiyorsanız, bu senaryo için 's (s! = Null && s.isNotEmpty()) {...}' _is_ idiomatic Kotlin'i ekleyebilirim. – mfulton26

+3

Soru hiç de aptalca değil. Başka bir olası biçim ise; eğer (s? .isNotEmpty() == true) {} ' –

2

, cevabım olurdu (ve ben bir yorumda koymuyorsun neden): if (s != null && s.isNotEmpty()) { … } aslında olduğunu Kotlin'deki deyimsel yol. Sadece bu şekilde bloğun içinde String'a akıllı bir oyuncu olacak ve kabul edilen cevapta ise bloğun içinde s!! kullanmanız gerekecek.

+1

@Kirill Rakhman'ın önerisi aynı zamanda akıllı bir döküm üretecek: 'if (s? .isNotEmpty() == true) {}' – Love

+0

Bu doğrudur. Burada kişisel tercih meselesi. Şüpheli '== true' bölümünü gördüğümde, hemen kaldırılabileceğini düşünüyorum, ki bu durumda bu mümkün değil.4 karakter kaydediyorsunuz, ancak benim için daha az okunabilir. –

0

veya bir uzantısı yöntemi oluşturmak ve güvenli bir çağrı olarak kullanmak:

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") 
} 
İlgili konular