C# 9 -  Os novos operadores : IS NOT, AND , OR


Neste artigo vou apresentar os novos operadores NOT, AND e OR disponíveis a partir da versão 9.0 do C#.

Na versão 9.0 da linguagem C# foram adicionados novos operadores de correspondência de padrões que podem ser combinados com o operador is. Isto é um syntax sugar ou açúcar de sintaxe que torna a lógica condicional mais fácil de ler.

Operador NOT : is not A

A palavra chave NOT representa um padrão de negação e exige que um padrão não corresponda.

Assim podemos agora usar o código abaixo:

        static void Main(string[] args)
        {
            object novoObjeto = new object();

            // Antes
            if (!(novoObjeto is null))
            {
                Console.WriteLine("Objeto Válido");
            }

            // C# 9
            if (
novoObjeto is not null)
            {
                Console.WriteLine("Objeto Válido");
            }

            Console.ReadLine();
        }

Antes era preciso usar o operador !  para negar a correspondência com o operador is.

Operador AND  :  is A and B

A palavra-chave AND representa um padrão de conjunção e exibe que ambos os padrões correspondam. (esse operador pode ser combinado com os operadores  >= e <= )

        static void Main(string[] args)
        {
            var numero = 9;

            if (numero is >= 0 and <= 10)
            {
                Console.WriteLine("O número esta entre 0 e 10 (inclusive)");
            }

            Console.ReadLine();
        }

Nas versões anteriores do C# esse código poderia ser escrito assim:

            if (numero is >= 0 && <= 10)
            {
                Console.WriteLine("O número esta entre 0 e 10 (inclusive)");
            }
 

Note que o código anterior ficou mais fácil de ler.

Operador OR :  is A or B

A palavra-chave OR representa um padrão de disjunção e exibe que quaisquer um dos padrões correspondam. (esse operador pode ser combinado com os operadores  >= e <= )

        static void Main(string[] args)
        {
            var numero = 10;

            if (numero is 0 or 10)
            {
                Console.WriteLine("O número é 0 ou 10");
            }

            Console.ReadLine();
        }

O código acima seria equivalente ao código a seguir nas versões anteriores:

           if (numero ==0 || numero == 10)
            {
                Console.WriteLine("O número é 0 ou 10");
            }

Novamente a legibilidade melhorou muito.

Naturalmente podemos combinar esses operadores e isso mostra de forma inequívoca a melhoria na legibilidade do código:

Antes:


  public  static bool separador(char c) => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '.' || c == ',';  
 

C# 9:


  public static bool separador(char c) =>c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';
 

Fica evidente que versão do C# 9, usando os novos operadores é mais expressiva e concisa. Ela se baseia em padrões sobre o parâmetro c , que é mencionado apenas uma vez.

O código usado nas versões anteriores dependia de expressões booleanas onde cada expressão precisa de sua própria menção de c, o que torna essa abordagem menos concisa.

Em termos de complexidade de código, as novas palavras-chave and e or são equivalentes a && e ||.

Dessa forma a linguagem C# agora possui 3 conjuntos de 3 operadores booleanos:

  1. & | !          : Operadores booleanos sobre bits;
  2. && || !      : Operadores booleanos sobre bool;
  3. and or not : operadores booleanos sobre padrões;

E estamos conversados...

'Porque em esperança fomos salvos. Ora a esperança que se vê não é esperança; porque o que alguém vê como o esperará ? Mas, se esperamos o que não vemos, com paciência o esperamos.'
Romanos 8:24,25

Referências:


José Carlos Macoratti