Executando verificação de segurança...
1

Trocar o valor de duas variáveis sem usar uma variável auxiliar

Pense na situação em que precisamos que o valor da variável a seja passado para variável b, mas não temos disponível uma terceira variável para guardar o valor temporariamente e realizar a troca! E então como fazemos isso? A resposta é matemática.

Trocando o valor de duas variáveis usando JavaScript (como exemplo)

let a = 10
let b = 2.5

a = a + b
b = a - b
a = a - b

console.log(`a = ${} \n b = ${b} `)

Nota:

Este é um algoritmo encontrado normalmente no meio académico e em concursos de algoritmos e lógica de programação que estou acostumado a participar.

Carregando publicação patrocinada...
1
1

Nem toda linguagem de programação possui esse tipo de operação. Acredito que JS não tenha.

Veja esses exemplos em Kotlin, onde isso é possível.

Código mais "convencional" em Kotlin de como fazer swap de variável:

var temp  = a;
   a = b;
   b = temp;

Outras alternativas:

b = a.apply {a = b} 
b = a.also {a = b}

Lembrando que os nomes a e b foram colocados apenas como exemplo para deixá-los mais genéricos. Em um código real, o ideal é dar nomes mais descritivos.

1
1

Achei excessivamente complexo para algo simples, já que é difícil entender o que esse trecho de código faz sem realizar um "teste de mesa", mas é um jeito interessante de pensar.

SkeBug, aproveitei para editar a sua publicação porque a primeira linha do código não estava aparecendo, e coloquei um destaque para o código como javascript. Recomendo que clique em Editar para ver como ficou, e dê uma lida em [DICA]: Como escrever artigos no TabNews., na seção de Código, ou use a ajuda do editor conforme mostrado aqui.

2

Talvez eu deve-se colocar uma observação que este é um tipo de algoritmo comum no meio académico (pelo menos no que frequentei) e aparece muito em concursos de algoritmos e lógica de programação (novamente, dos que já participei 😅)

1

De fato essa é uma informação relevante. Isso é utilizado em concursos de algoritmos por algum motivo específico? Por exemplo, precisa economizar memória ou isso deixa a execução mais rápida?

1

Depende muito...

Algumas linguagens mais antigas (e até mesmo algumas poucas linguagens modernas); quando compiladas (ou interpretadas), irão criar variáveis temporárias para cada uma das atribuições;
ou seja seriam criadas três variáveis temporárias para o código em questão.
Ficando mais lento

Mas se o código for reescrito em C; usando inteiros e armazenando os resultados nos registradores; então fica mais rápido.

entretanto; se o processador for um Xeon (que possue a tecnologia quad channel), então endereçar uma variável na memória RAM acaba sendo mais rápido do que executar três operações aritméticas nos registradores.

1

Não tenho certeza neste caso, mas trabalhar com operações aritméticas com floats pode ser um pouco complexo e talvez não trará o resultado experado.

Aqui temos alguns detalhes sobre.

Digamos que este não é um problema comum e apesas da proposta ser interessante não acho que resolve uma dor latente para a maior parte dos devs.

Voce teria um exemplo de caso real @SkeBug?

1

Tens razão no que diz respeito a não ser uma dor para maioria dos devs para não dizer que não é uma dor para nenhu dev!

Este é um problema que é muito comum no meio académico e em concursos de algoritmos de algoritmos e lógica de programação. Sendo apenas uma maneira de testar o raciocínio lógico com o raciocínio matemático.