Wat is een standaardruil?
In computerprogrammering en informatica is een standaardruil een situatie in een programma waarin twee variabelen hun waarden moeten laten uitwisselen, waardoor de creatie van een derde variabele nodig is om als tussenpersoon te fungeren wanneer de waarden worden overgedragen. Een standaard swap is een programmeerparadigma, wat betekent dat het kan worden toegepast op elke situatie waarin twee gegevens moeten worden uitgewisseld en niet is gekoppeld aan een gegevenstype of programmeertaal. Er zijn veel voorbeelden in programma's waarin waarden moeten worden verwisseld, maar het is vaak een standaardonderdeel in collecties en arrays wanneer het wordt gebruikt met sorteeralgoritmen die items van de ene index in de collectie naar de andere moeten verplaatsen, met behulp van een tijdelijke variabele om de waarde wordt geruild. Vanuit hardware-perspectief kan een standaard swap een ondersteunde low-level processorfunctie zijn voor sommige scalaire gegevenstypen zoals gehele getallen, wat betekent dat de tussenwaarde niet hoeft te worden gemaakt in RAM (Random Access Memory) om twee nummers te verwisselen.
Het concept van een standaard swap kan worden gezien met de variabelen A en B; aan het einde van een standaardruil moet B gelijk zijn aan A en A moet gelijk zijn aan B. Als een programma eenvoudigweg B aan A toekent, gaat de waarde van A verloren en kan deze later niet aan B worden toegewezen. Hiervoor is een tijdelijke variabele die de waarde van A behoudt, terwijl B wordt toegewezen aan A. De laatste stap is het toewijzen van de tijdelijke variabele waarde aan B, waarbij de swap wordt voltooid.
Een veel voorkomende toepassing voor een standaard swap is bij het gebruik van een sorteeralgoritme op een array of verzameling. Als een sorteeralgoritme heeft bepaald dat de gegevens in array Index 1 moeten worden verwisseld met de gegevens in Index 10, dan kan een standaardswap van de gegevens worden uitgevoerd. Dit kan uitzonderlijk snel worden gedaan met behulp van pointerreferenties in talen zoals C.
Een complicatie kan optreden in sommige objectgeoriënteerde programmeertalen wanneer twee objectinstanties moeten worden verwisseld. In enkele zeer zeldzame gevallen zal het simpelweg verwisselen van de objectverwijzingen geen daadwerkelijke swap initiëren. In plaats daarvan is de enige manier om de objecten uit te wisselen, de interne gegevens veld per veld tussen de twee objecten en de tijdelijke objectvariabele te klonen.
Er is één techniek die technisch kan worden gebruikt om een standaardruil uit te voeren met behulp van de exclusieve of (XOR) logische operator. Een XOR-swap is gebaseerd op het feit dat, wanneer twee bits worden berekend met XOR, deze in wezen een masker zullen creëren dat kan worden omgekeerd met een of beide operators. Op deze manier kunnen twee variabelen, A en B, worden verwisseld door eerst een masker te maken met een XOR van de twee variabelen, vervolgens XOR te gebruiken om eerst de waarde voor B en vervolgens de waarde voor A te maskeren. Helaas, hoewel deze methode vermijdt Wanneer een tijdelijke variabele wordt gemaakt, zal deze ook niet in alle gevallen worden gewisseld, met name wanneer A en B gelijk zijn aan elkaar en in gevallen waarin optimalisatie van de compiler de daadwerkelijke werking kan wijzigen.