Ce este un schimb standard?

În programarea calculatoarelor și informatică, un swap standard este o situație dintr-un program în care două variabile trebuie să aibă valorile schimbate, necesitând crearea unei a treia variabile care să acționeze ca intermediar atunci când valorile sunt transferate. Un swap standard este o paradigmă de programare, ceea ce înseamnă că poate fi aplicat în orice situație în care două bucăți de date trebuie schimbate și nu este legată de niciun tip de date sau limbaj de programare. Există multe cazuri în programe în care valorile trebuie schimbate, dar adesea este o componentă standard în colecții și matrice atunci când este utilizat cu algoritmi de sortare care trebuie să mute elementele de la un index al colecției la altul, folosind o variabilă temporară pentru a menține valoarea fiind schimbată. Din punct de vedere hardware, o schimbare standard poate fi o funcție de procesor de nivel scăzut acceptată pentru unele tipuri de date scalare, cum ar fi numerele întregi, ceea ce înseamnă că valoarea intermediară nu trebuie creată în memoria cu acces aleatoriu (RAM) pentru a schimba două numere.

Conceptul de swap standard poate fi văzut cu variabilele A și B; la sfârșitul unui swap standard, B ar trebui să fie egal cu A și A ar trebui să fie egal cu B. Dacă un program pur și simplu atribuie B lui A, atunci valoarea lui A se va pierde și nu poate fi atribuită ulterior lui B. Acest lucru necesită utilizarea unui variabilă temporară care va păstra valoarea lui A în timp ce B este atribuită lui A. Pasul final este alocarea valorii variabilei temporare lui B, completând schimbul.

O aplicație foarte comună pentru un schimb standard este atunci când se utilizează un algoritm de sortare pe o matrice sau o colecție. Dacă un algoritm de sortare a determinat că datele din matricea Index 1 trebuie schimbate cu datele de la Index 10, atunci poate fi efectuată o schimbare standard a datelor. Acest lucru se poate face excepțional de rapid folosind referințe pointer în limbaje precum C.

O complicație poate apărea în unele limbaje de programare orientate pe obiect când două instanțe de obiect trebuie schimbate. În unele cazuri foarte rare, simpla schimbare a referințelor obiectului nu va iniția o schimbare reală. În schimb, singura modalitate de a schimba obiectele este clonarea datelor interne, câmp cu câmp, între cele două obiecte și variabila obiect temporar.

Există o tehnică care poate fi utilizată din punct de vedere tehnic pentru a efectua o schimbare standard folosind operatorul logic exclusiv sau (XOR). O schimbare XOR se bazează pe faptul că, atunci când doi biți sunt calculați cu XOR, ei vor crea în esență o mască care poate fi inversată cu unul sau ambii operatori. În acest fel, două variabile, A și B, pot fi schimbate prin crearea mai întâi a unei măști cu un XOR al celor două variabile, apoi folosind XOR pentru a demasca mai întâi valoarea pentru B și apoi valoarea pentru A. Din păcate, deși această metodă evită la crearea unei variabile temporare, de asemenea, nu va face o schimbare în toate cazurile, în special atunci când A și B sunt egale între ele și în cazurile în care optimizarea compilatorului ar putea schimba operația reală.