Che cos'è uno swap standard?
Nella programmazione e nell'informatica, uno swap standard è una situazione in un programma in cui è necessario scambiare i propri valori in due variabili, che richiede la creazione di una terza variabile per fungere da intermediario quando i valori vengono trasferiti. Uno swap standard è un paradigma di programmazione, nel senso che può essere applicato a qualsiasi situazione in cui due pezzi di dati devono essere scambiati e non è legato ad alcun tipo di dati o linguaggio di programmazione. Esistono molti casi nei programmi in cui i valori devono essere scambiati, ma spesso è un componente standard nelle raccolte e nelle matrici se utilizzato con algoritmi di ordinamento che deve spostare gli elementi da un indice della raccolta a un altro, utilizzando una variabile temporanea per contenere il il valore viene scambiato. Dal punto di vista hardware, uno scambio standard può essere una funzione di processore di basso livello supportata per alcuni tipi di dati scalari come numeri interi, il che significa che non è necessario creare il valore intermedio nella memoria ad accesso casuale (RAM) per scambiare due numeri.
Il concetto di swap standard può essere visto con le variabili A e B; alla fine di uno scambio standard, B dovrebbe essere uguale a A e A dovrebbe essere uguale a B. Se un programma assegna semplicemente B ad A, il valore di A andrà perso e non potrà successivamente essere assegnato a B. Ciò richiede l'uso di un variabile temporanea che conterrà il valore di A mentre B è assegnato ad A. Il passaggio finale consiste nell'assegnare il valore della variabile temporanea a B, completando lo scambio.
Un'applicazione molto comune per uno scambio standard è quando si utilizza un algoritmo di ordinamento su un array o una raccolta. Se un algoritmo di ordinamento ha determinato che i dati nell'array Index 1 devono essere scambiati con i dati nell'Indice 10, è possibile eseguire uno scambio standard dei dati. Questo può essere fatto in modo eccezionalmente veloce usando i riferimenti del puntatore in lingue come C.
Una complicazione può verificarsi in alcuni linguaggi di programmazione orientati agli oggetti quando è necessario scambiare due istanze di oggetti. In alcuni casi molto rari, il semplice scambio dei riferimenti agli oggetti non avvia uno scambio effettivo. Invece, l'unico modo per scambiare gli oggetti è clonare i dati interni, campo per campo, tra i due oggetti e la variabile oggetto temporaneo.
Esiste una tecnica che tecnicamente può essere utilizzata per eseguire uno scambio standard utilizzando l'operatore logico esclusivo (o XOR). Uno scambio XOR si basa sul fatto che, quando vengono calcolati due bit con XOR, in sostanza creeranno una maschera che può essere invertita con uno o entrambi gli operatori. In questo modo, due variabili, A e B, possono essere scambiate creando prima una maschera con un XOR delle due variabili, quindi usando XOR per smascherare prima il valore per B e poi il valore per A. Sfortunatamente, sebbene questo metodo eviti la creazione di una variabile temporanea, inoltre, non effettuerà uno scambio in tutti i casi, in particolare quando A e B sono uguali tra loro e nei casi in cui l'ottimizzazione del compilatore potrebbe cambiare l'operazione effettiva.