O Visual Basic 14 é a mais nova versão do Visual Basic ou VB .NET, e será lançado como parte do Visual Studio 2015. Essa versão foi reescrita do zero em cerca de 1,3 milhão de linhas de código e, segundo a Microsoft, a equipe aproveitou para reescrever a repensar todas as partes do Visual Basic.
No primeiro, artigo eu abordei o tópico: Visual Basic 14 – Novidades da nova versão – I: Refatoração embutida.
Hoje veremos o operador ?.
Esse novo operador é um atalho conveniente para as muitas ocasiões em que você tem que verificar valores nulos.
A ideia é economizar digitação quando for necessário realizar verificações de valores nulos.
Assim, em vez de digitar isto:
Dim temp = cliente.Endereco Dim x = if(temp IsNot Nothing, temp.Endereco.Pais, Nothing )
você digita isto:
Dim x = cliente.Endereco?.pais
Antes você fazia assim:
if cliente IsNot Nothing AndAlso cliente.Idade >=80 then Console.WriteLine("Enviar Mensagem") End If
Agora você pode fazer assim:
if cliente?.Idade >= 80 then Console.WriteLine("Enviar Mensagem") End If
Recursos usados: Visual Studio CTP 6 (poderá sofrer alterações até o release final).
Melhorando a experiência de codificação: menos código
Esse recurso permite economizar linhas de código dependendo do cenário em que você está atuando.
Para testar, vamos abrir o VS Studio CTP 6 e clicar em New Project.
Em seguida, selecione Visual Basic e o template Console Application, informe o nome VB14_OperadorInterrogacaoPonto e clique no botão OK.
No menu Project, clique em Add Class e informe o nome Cliente.
A seguir, digite o código abaixo para a classe Cliente:
Public Class Cliente Public Shared Property Id As Integer Public Shared Property Nome As String Public Property Idade As Integer Sub New() Id = 1 Nome = "Macoratti" Idade = Nothing End Sub End Class
Nesse código, definimos três propriedades na classe Cliente e atribuímos o valores no construtor. Definimos a propriedade Idade com o valor Nothing, ou seja, Null.
Agora, no módulo Module1, vamos testar o operador ?. digitando o código a seguir:
Module Module1 Sub Main() Dim _cliente As New Cliente If _cliente?.Idade > 40 Then Console.WriteLine("A idade do cliente Não e nula e o cliente possui mais de 40 anos") Else Console.WriteLine("A idade do cliente é nula") End If Console.ReadKey() End Sub End Module
Após criarmos uma instância da classe Cliente, verificamos se a idade do cliente não é nula usando o operador ?., e a seguir verificamos se a idade é maior que 40 anos:
If _cliente?.Idade > 40 Then …
Executando o projeto, iremos obter a mensagem: “A idade do cliente é nula”.
Altere o código da classe Cliente para:
Public Class Cliente Public Shared Property Id As Integer Public Shared Property Nome As String Public Property Idade As Integer Sub New() Id = 1 Idade = 45 End Sub End Class
A seguir, inclua o código abaixo no módulo Module1:
Module Module1 Sub Main() Dim _cliente As New Cliente If _cliente?.Idade > 40 Then Console.WriteLine("A idade do cliente Não e nula e o cliente possui mais de 40 anos") Else Console.WriteLine("A idade do cliente é nula") End If Dim nome = If(_cliente?.Nome, "Nome em branco") Console.WriteLine("nome do cliente = " & nome) Console.ReadKey() End Sub End Module
Note que agora estamos verificando se o nome do cliente é nulo. Se o nome for nulo, o valor “Nome em branco” será atribuído como padrão à variável nome.
Como não atribuímos um valor para o nome no construtor da classe, executando o projeto iremos obter:
Na verdade, o operador ?. é mais seguro do que todos os exemplos acima sugerem. A expressão “_cliente?.Idade” na verdade lê “_cliente” em uma variável temporária, verifica se não é nula e, em seguida, obtém a propriedade Idade dessa variável temporária. Essa operação é thread-safe.
Podemos também usar o operador em uma sequência misturando-o com o operador regular .:
Por exemplo: a?.b.c?.
Esse trecho de código lê da esquerda para direita, e qualquer valor nulo em “?” irá parar a sequência; qualquer valor nulo em “.” irá lançar um NullReferenceException como de costume.
Verifique o recurso em seu próprio código e imagine as possibilidades. Codificar vai ficar mais fácil e intuitivo.