Alguém aqui usa o VB.NET e tem uma forte preferência a favor ou contra o uso IsNothing
em oposição a Is Nothing
(por exemplo, If IsNothing(anObject)
ou If anObject Is Nothing...
)? Se sim, por quê?
Edição: Se você acha que ambos são igualmente aceitáveis, você acha que é melhor escolher um e ficar com ele, ou é bom misturá-los?
IsNothing()
Respostas:
Se você der uma olhada no MSIL enquanto ele está sendo executado, verá que ele não é compilado exatamente no mesmo código. Quando você usa IsNothing (), na verdade, faz uma chamada para esse método, em vez de apenas avaliar a expressão.
A razão pela qual eu tenderia a usar "Is Nothing" é quando nego que se torne "IsNot Nothing" em vez de "Not IsNothing (objeto)", que eu pessoalmente sinto mais legível.
fonte
Acho que Patrick Steele respondeu melhor a essa pergunta em seu blog: Evitando IsNothing ()
Não copiei nenhuma resposta dele aqui, para garantir o crédito de Patrick Steele por seu cargo. Mas acho que, se você está tentando decidir se usa Is Nothing ou IsNothing, deve ler o post dele. Eu acho que você concorda que Is Nothing é a melhor escolha.
Editar - Comentário de VoteCoffe aqui
Conteúdo parcial do artigo: Depois de revisar mais código, descobri outro motivo para evitar o seguinte: Ele aceita tipos de valor! Obviamente, como IsNothing () é uma função que aceita um 'objeto', você pode passar o que quiser. Se for um tipo de valor, o .NET o colocará em um objeto e o passará para IsNothing - que sempre retornará false em um valor em caixa! O compilador VB.NET irá verificar a sintaxe do estilo "Is Nothing" e não será compilado se você tentar fazer um "Is Nothing" em um tipo de valor. Mas a função IsNothing () é compilada sem reclamações. -PSteele - VoteCoffee
fonte
Você deve absolutamente evitar o uso
IsNothing()
Aqui estão 4 razões do artigo IsNothing () VS Is Nothing
Mais importante,
IsNothing(object)
tudo passou para ele como um objeto, até tipos de valor! Como os tipos de valor não podem serNothing
, é uma verificação completamente desperdiçada.Veja o seguinte exemplo:
Isso irá compilar e executar bem, enquanto isso:
Não será compilado; o compilador gerará o erro:
IsNothing(object)
é realmente parte de parte doMicrosoft.VisualBasic.dll
.Isso é indesejável, pois você tem uma dependência desnecessária da biblioteca VisualBasic.
É lento - 33,76% mais lento de fato (mais de 1000000000 iterações)!
Talvez preferência pessoal, mas
IsNothing()
parece uma Condição Yoda . Quando você olha para uma variável, está verificando seu estado, com ela como o assunto de sua investigação.ou seja, ele faz x? --- NÃO É
x
uma propriedade disso ?Então eu acho que
If a IsNot Nothing
lê melhor do queIf Not IsNothing(a)
fonte
Eu concordo com "Is Nothing". Como mencionado acima, é fácil negar com "IsNot Nothing".
Acho isso mais fácil de ler ...
que isso ...
fonte
O VB está cheio de coisas assim, tentando torná-lo "como inglês" e confortável para pessoas acostumadas a idiomas que usam () e {} muito. Por exemplo, no lado "like english" ... VB tem a palavra-chave " Ain't " ... e não, não estou brincando. E, por outro lado, como você provavelmente já sabe na maioria das vezes, pode usar () com chamadas de função, se quiser, mas não precisa.
Eu prefiro IsNothing () ... mas eu uso C e C #, então é exatamente isso que é confortável. E eu acho que é mais legível. Mas escolha o que lhe parecer mais confortável.
fonte
Estou inclinado para a alternativa "Não é nada", principalmente porque parece mais OO.
Certamente o Visual Basic não possui a palavra-chave Ain't.
fonte
Também costumo usar a versão Is Nothing parcialmente de usá-la tanto quanto em SQL.
fonte
Inicialmente, usei o IsNothing, mas estou avançando no uso do Is Nothing em projetos mais recentes, principalmente para facilitar a leitura. A única vez em que fico com o IsNothing é se estou mantendo o código onde é usado o tempo todo e quero permanecer consistente.
fonte
Is Nothing requer um objeto que foi atribuído ao valor Nothing. IsNothing () pode receber qualquer variável que não tenha sido inicializada, inclusive do tipo numérico. Isso é útil, por exemplo, ao testar se um parâmetro opcional foi passado.
fonte
Nothing
Is Nothing