Operações Prefix e Postfix no C#

Funcionamento das operações Prefix e Postfix

O operador de incremento (++) e decremento (- -) unário possuem duas formas de suporte: o operador Postfix, x++ (ou x- -), e o operador de Prefix , ++x ou (- -xx).

Regras para o formulário de Prefix:

– x é avaliado para produzir a variável
– O valor da variável é copiado para um local temporário
– O valor temporário é incrementado para produzir um novo valor (não sobrescrevendo o temporário!)
– O novo valor é armazenado na variável
– O resultado da operação é o novo valor (ou seja, o valor incrementado do temporário)

Regras para o formulário de Postfix:

– x é avaliado para produzir a variável
– O valor da variável é copiado para um local temporário
– O valor temporário é incrementado para produzir um novo valor (não sobrescrevendo o temporário!)
– O novo valor é armazenado na variável
– O resultado da operação é o valor do temporário

Exemplos de uso dos operadores

Usando como retorno de método.

using System;
class Program
{
    static void Main()
    {
        int var1 = 0, var2 = 0;
        Console.WriteLine("Prefix on return: " + PlusOnePrefix(var1));
        Console.WriteLine("Postfix on return: " + PlusOnePostfix(var2));
    }
    public static int PlusOnePrefix(int x){
        return ++x; // => increments first, and return the result
    }
    public static int PlusOnePostfix(int x){
        return x++; // => return the value x and then increments
    }
}

Neste exemplo acima a saída vai ser:

Prefix on return: 1
Postfix on return: 0

Usando como incremento de while

using System;
class Program
{
    static void Main()
    {
        int x = 0;
        while(++x < 3){
            Console.WriteLine("Using Prefix, x value is: " + x);
        }
        x = 0;
        while(x++ < 3){
            Console.WriteLine("Using Postfix, x value is: " + x);
        }
    }
}

Neste exemplo acima a saída vai ser:

Using Prefix, x value is: 1
Using Prefix, x value is: 2
Using Postfix, x value is: 1
Using Postfix, x value is: 2
Using Postfix, x value is: 3

É importante ressaltar que ao final da execução da linha, ambos os operadores (Prefix e Postfix) iram alterar o valor da variável. A diferença é somente ao retorno no retorno.

Alterei o exemplo acima para demonstrar o que acontece quando usados os operadores fora da condição de retorno.

using System;
class Program
{
    static void Main()
    {
        int var1 = 0, var2 = 0;
        Console.WriteLine("Prefix on return: " + PlusOnePrefix(var1));
        Console.WriteLine("Postfix on return: " + PlusOnePostfix(var2));
    }
    public static int PlusOnePrefix(int x){
        ++x;
        return x;
    }
    public static int PlusOnePostfix(int x){
        x++;
        return x;
    }
}

Neste exemplo acima a saída vai ser:

Prefix on return: 1
Postfix on return: 1

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Referencias:
microsoft – increment-operator
stackoverflow – how-do-prefix-x-and-postfix-x-operations-work
stackoverflow – what-is-the-difference-between-i-and-i

Leave a Reply

Your email address will not be published. Required fields are marked *