O que é uma troca padrão?
Em programação de computadores e ciência da computação, uma troca padrão é uma situação em um programa em que duas variáveis precisam ter seus valores trocados, exigindo a criação de uma terceira variável para atuar como intermediária quando os valores são transferidos. Uma troca padrão é um paradigma de programação, o que significa que pode ser aplicada a qualquer situação em que duas partes de dados precisam ser trocadas e não está vinculada a nenhum tipo de dado ou linguagem de programação. Existem muitas instâncias em programas nos quais os valores precisam ser trocados, mas geralmente é um componente padrão em coleções e matrizes quando usado com algoritmos de classificação que devem mover itens de um índice na coleção para outro, usando uma variável temporária para manter o valor valor que está sendo trocado. Da perspectiva do hardware, uma troca padrão pode ser uma função de processador de baixo nível suportada para alguns tipos de dados escalares, como números inteiros, o que significa que o valor intermediário não precisa ser criado na memória RAM para trocar dois números.
O conceito de troca padrão pode ser visto com as variáveis A e B; no final de uma troca padrão, B deve ser igual a A e A deve ser igual a B. Se um programa simplesmente atribuir B a A, o valor de A será perdido e, posteriormente, não poderá ser atribuído a B. Isso requer o uso de um variável temporária que manterá o valor de A enquanto B estiver atribuído a A. A etapa final é atribuir o valor da variável temporária a B, concluindo a troca.
Um aplicativo muito comum para uma troca padrão é ao usar um algoritmo de classificação em uma matriz ou coleção. Se um algoritmo de classificação determinou que os dados no Índice 1 da matriz devem ser trocados com os dados no Índice 10, uma troca padrão dos dados pode ser realizada. Isso pode ser feito excepcionalmente rápido usando referências de ponteiro em idiomas como C.
Uma complicação pode ocorrer em algumas linguagens de programação orientadas a objetos quando duas instâncias de objetos precisam ser trocadas. Em alguns casos muito raros, simplesmente trocar as referências de objeto não iniciará uma troca real. Em vez disso, a única maneira de trocar os objetos é clonar os dados internos, campo por campo, entre os dois objetos e a variável de objeto temporário.
Existe uma técnica que tecnicamente pode ser usada para executar uma troca padrão usando o operador lógico exclusivo ou (XOR). Uma troca XOR depende do fato de que, quando dois bits são calculados com o XOR, eles essencialmente criarão uma máscara que pode ser revertida com um ou ambos os operadores. Dessa maneira, duas variáveis, A e B, podem ser trocadas criando primeiro uma máscara com um XOR das duas variáveis, depois usando o XOR para desmascarar primeiro o valor de B e depois o valor de A. Infelizmente, embora esse método evite na criação de uma variável temporária, ela também não fará uma troca em todas as instâncias, especificamente quando A e B forem iguais entre si e nos casos em que a otimização do compilador possa alterar a operação real.