Visual Basic 14 - Novidades da nova versão :  O operador ?.


 Este post faz parte de uma série de artigos onde eu mostro as novidades do Visual Basic 14, a nova versão do Visual Basic .NET, que fará parte do Visual Studio 2015.

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.  Esta versão foi reescrita do zero em cerca de 1,3 milhões 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  ?.

Este 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, ao invés de digitar isso:

Dim temp = cliente.Endereco
Dim x = if(temp IsNot Nothing, temp.Endereco.Pais, Nothing )

você digita isso:

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:

Melhorando a experiência de codificação :  Menos código

Esse recurso permite economizar linhas de código dependendo do cenário onde você esta atuando.

Para testar vamos abrir o  VS Studio CTP 6  e clicar em New Project;

Selecione Visual Basic e o template Console Application e 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

Neste código definimos 3 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 desta variável temporária. Esta 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?.

Este 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.

E os que são de Cristo crucificaram a carne com as suas paixões e concupiscências.
Se vivemos em Espírito, andemos também em Espírito.
Não sejamos cobiçosos de vanglórias, irritando-nos uns aos outros, invejando-nos uns aos outros.

Gálatas 5:24-26

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti