Nella programmazione informatica e nell’informatica, uno scambio standard è una situazione in un programma in cui due variabili devono scambiare i loro valori, richiedendo la creazione di una terza variabile che agisca da intermediario quando i valori vengono trasferiti. Uno scambio standard è un paradigma di programmazione, il che significa che può essere applicato a qualsiasi situazione in cui è necessario scambiare due dati e non è legato a nessun tipo di dati o linguaggio di programmazione. Ci sono molti casi nei programmi in cui i valori devono essere scambiati, ma spesso è un componente standard nelle raccolte e negli array quando viene utilizzato con algoritmi di ordinamento che devono spostare gli elementi da un indice all’altro della raccolta, utilizzando una variabile temporanea per contenere il valore da scambiare. Dal punto di vista hardware, uno scambio standard può essere una funzione del processore di basso livello supportata per alcuni tipi di dati scalari come gli interi, il che significa che il valore intermedio non deve essere creato 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 ad A e A dovrebbe essere uguale a B. Se un programma assegna semplicemente B ad A, allora il valore di A andrà perso e non potrà essere successivamente assegnato a B. Ciò richiede l’uso di un variabile temporanea che manterrà 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’indice 1 della matrice devono essere scambiati con i dati nell’indice 10, è possibile eseguire uno scambio standard dei dati. Questo può essere fatto in modo eccezionalmente veloce utilizzando riferimenti puntatori in linguaggi 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 all’oggetto non avvierà 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 temporanea.
C’è una tecnica che tecnicamente può essere usata per eseguire uno scambio standard usando l’operatore logico esclusivo-o (XOR). Uno scambio XOR si basa sul fatto che, quando due bit vengono calcolati con XOR, essenzialmente creeranno una maschera che può essere invertita con uno o entrambi gli operatori. In questo modo è possibile scambiare due variabili, A e B, creando prima una maschera con uno XOR delle due variabili, quindi utilizzando XOR per smascherare prima il valore di B e poi il valore di A. Sfortunatamente, sebbene questo metodo eviti la creazione di una variabile temporanea, inoltre, non effettuerà uno scambio in tutte le istanze, in particolare quando A e B sono uguali tra loro e nei casi in cui l’ottimizzazione del compilatore potrebbe modificare l’operazione effettiva.