Existe alguma maneira de encadear múltiplas permissões múltiplas variáveis anuláveis no kotlin?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
Quero dizer, algo como isto:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
Respostas:
Se estiver interessado, aqui estão duas das minhas funções para resolver isso.
Uso:
fonte
Aqui estão algumas variações, dependendo do estilo que você deseja usar, se você tiver tudo do mesmo ou de tipos diferentes e se o número desconhecido de itens da lista ...
Tipos mistos, nem todos devem ser nulos para calcular um novo valor
Para tipos mistos, você pode criar uma série de funções para cada contagem de parâmetros que podem parecer bobas, mas funcionam bem para tipos mistos:
Exemplo de uso:
Executar bloco de código quando a lista não tiver itens nulos
Dois tipos aqui: primeiro para executar o bloco de código quando uma lista tiver todos os itens não nulos; e o segundo para fazer o mesmo quando uma lista tiver pelo menos um item não nulo. Ambos os casos passam uma lista de itens não nulos para o bloco de código:
Funções:
Exemplo de uso:
Uma pequena alteração para que a função receba a lista de itens e faça as mesmas operações:
Exemplo de uso:
Essas variações podem ser alteradas para ter valores de retorno como
let()
.Use o primeiro item não nulo (coalescência)
Semelhante a uma função SQL Coalesce, retorne o primeiro item não nulo. Dois sabores da função:
Exemplo de uso:
Outras variações
... Existem outras variações, mas com mais especificações, isso pode ser reduzido.
fonte
whenAllNotNull
com desestruturando assim:listOf(a, b, c).whenAllNotNull { (d, e, f) -> println("$d $e $f")
.Você pode escrever sua própria função para isso:
fonte
Você pode criar uma
arrayIfNoNulls
função:Você pode usá-lo para um número variável de valores com
let
:Se você já possui uma matriz, pode criar uma
takeIfNoNulls
função (inspirada emtakeIf
erequireNoNulls
):Exemplo:
fonte
No caso de apenas verificar dois valores e também não precisar trabalhar com listas:
Exemplo de uso:
fonte
Na verdade, você pode simplesmente fazer isso, sabe? ;)
Não há nada errado em usar uma verificação nula normal no Kotlin.
E é muito mais legível para todos que analisam seu código.
fonte
let
atalho para fazer essas verificaçõesNa verdade, prefiro resolvê-lo usando as seguintes funções auxiliares:
E aqui está como você deve usá-los:
fonte
Resolvi isso criando algumas funções que replicam mais ou menos o comportamento de with, mas usam vários parâmetros e chama apenas a função de todos os parâmetros que não são nulos.
Então eu uso assim:
O problema óbvio disso é que preciso definir uma função para cada caso (número de variáveis) de que preciso, mas pelo menos acho que o código parece limpo ao usá-las.
fonte
Você também pode fazer isso
fonte
Eu atualizei a resposta esperada um pouco:
isso torna isso possível:
fonte
Para qualquer quantidade de valores a serem verificados, você pode usar o seguinte:
E será usado assim:
os elementos enviados ao bloco estão usando o curinga, você precisa verificar os tipos, se quiser acessar os valores, se precisar usar apenas um tipo, poderá alterar isso para genéricos
fonte