Замена двух переменных является обычной операцией в программировании. Традиционно это делается с помощью временной переменной. Но знаете ли вы, что вы можете поменять местами две переменные, не нуждаясь в дополнительном хранилище? В этом посте мы покажем вам, как это сделать, используя как числовые, так и строковые значения на 10 популярных языках: Python, JavaScript, Java, C++, Ruby, PHP, Swift, Kotlin, Rust и Go.

Питон

Python делает замену переменных невероятно простой благодаря функции множественного назначения. Вы можете поменять местами переменные как с числами, так и со строками:

# Numbers
a = 5
b = 7
a, b = b, a

# String
a = 'Hello'
b = 'World'
a, b = b, a

JavaScript

В JavaScript вы можете использовать деструктурирующее присваивание для замены переменных. Обратите внимание, что это работает только в ECMAScript 6 (ES6) или более поздних версиях:

// Numbers
let a = 5;
let b = 7;
[a, b] = [b, a];

// Strings
let a = 'Hello';
let b = 'World';
[a, b] = [b, a];

Джава

В Java вы можете использовать побитовую операцию XOR для замены чисел. К сожалению, этот подход не работает со строками:

// Numbers
int a = 5;
int b = 7;
a = a ^ b;
b = a ^ b;
a = a ^ b;

Для строк в Java нет прямого метода замены без использования третьей переменной.

C++

Подобно Java, C++ также допускает побитовое XOR для замены чисел и не поддерживает этот метод для строк:

// Numbers
int a = 5;
int b = 7;
a = a ^ b;
b = a ^ b;
a = a ^ b;

Рубин

Ruby, как и Python, допускает множественное присваивание, поэтому менять местами переменные очень просто:

# Numbers
a = 5
b = 7
a, b = b, a

# Strings
a = 'Hello'
b = 'World'
a, b = b, a

PHP

PHP позволяет использовать синтаксис списка, который упрощает замену:

// Numbers
$a = 5;
$b = 7;
list($a, $b) = array($b, $a);

// Strings
$a = 'Hello';
$b = 'World';
list($a, $b) = array($b, $a);

Быстрый

Swift имеет назначение кортежа, которое позволяет легко менять местами переменные:

// Numbers
var a = 5
var b = 7
(a, b) = (b, a)

// Strings
var a = "Hello"
var b = "World"
(a, b) = (b, a)

Котлин

В Kotlin нет прямого способа замены чисел без временной переменной. Для строк Kotlin похож на Java и не имеет прямого метода замены без третьей переменной.

Ржавчина

Rust может использовать функцию std::mem::swap():

// Numbers
let mut a = 5;
let mut b = 7;
std::mem::swap(&mut a, &mut b);

// Strings
let mut a = String::from("Hello");
let mut b = String::from("World");
std::mem::swap(&mut a, &mut b);

Go

Go поддерживает множественное присваивание и поэтому может напрямую менять местами переменные:

// Numbers
a, b := 5, 7
a, b = b, a

// Strings
a, b := "Hello", "World"
a, b = b, a

В заключение, хотя некоторые языки предлагают удобные способы замены переменных без третьей переменной, это не всегда возможно, особенно когда речь идет о строковых переменных. Когда эта операция необходима, а язык не предоставляет прямого способа сделать это, использование временной переменной может оказаться неизбежным.