Devo usar duplo =
ou triplo =
?
if(a === null) {
//do something
}
ou
if(a == null) {
//do something
}
Da mesma forma para 'diferente de':
if(a !== null) {
//do something
}
ou
if(a != null) {
//do something
}
kotlin
kotlin-null-safety
PDeva
fonte
fonte
Respostas:
Ambas as abordagens geram o mesmo bytecode para que você possa escolher o que preferir.
fonte
Uma igualdade estrutural
a == b
é traduzida emPortanto, ao comparar com
null
, a igualdade estruturala == null
é traduzida em uma igualdade referenciala === null
.De acordo com os documentos , não há nenhum ponto em otimizar seu código, então você pode usar
a == null
ea != null
Observe que se a variável for uma propriedade mutável, você não será capaz de fazer um smart cast para seu tipo não anulável dentro da
if
instrução (porque o valor pode ter sido modificado por outro encadeamento) e você terá que usar o operador de chamada segura comlet
.Operadora de chamada segura
?.
Você pode usá-lo em combinação com o operador Elvis.
Operador de Elvis
?:
(suponho que seja porque a marca de interrogatório se parece com o cabelo de Elvis)E se você deseja executar um bloco de código
Combinando os dois
fonte
if
para verificações nulas?a?.let{} ?: run{}
só é apropriado em casos raros, caso contrário, não é idiomáticonull
cheques, eu estava listando outras opções viáveis. Embora eu não tenha certeza serun
tem algum tipo de penalidade de desempenho. Vou atualizar minha resposta para torná-la mais clara.a
for umvar
, use aa?.let{} ?: run{}
garantia de que será vinculado corretamente nolet
para todo o escopo. Sea
for umval
, então não há diferença.val
, então usar let é diferente e é ruim. Achei este artigo muito bom em explicar isso - Kotlin: Não use LET apenas para verificação de nulos .Maneiras Kotlin de lidar com nulos
Operação de acesso seguro
Deixe funcionar
Saída antecipada
Sombras imutáveis
Valor padrão
Use val em vez de var
val
é somente leitura,var
é mutável. Recomenda-se usar tantas propriedades somente leitura quanto possível, elas são thread-safe.Use lateinit
Às vezes, você não pode usar propriedades imutáveis. Por exemplo, isso acontece no Android quando alguma propriedade é inicializada na
onCreate()
chamada. Para essas situações, o Kotlin possui um recurso de linguagem chamadolateinit
.fonte
Adição a @Benito Bertoli,
a combinação é realmente diferente de if-else
O resultado é:
Mas se:
O resultado é:
Além disso, se usar o Elvis primeiro:
O resultado é:
fonte
Verifique métodos úteis, pode ser útil:
Abaixo está um exemplo possível de como usar essas funções:
fonte