Замена двух переменных является обычной операцией в программировании. Традиционно это делается с помощью временной переменной. Но знаете ли вы, что вы можете поменять местами две переменные, не нуждаясь в дополнительном хранилище? В этом посте мы покажем вам, как это сделать, используя как числовые, так и строковые значения на 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
В заключение, хотя некоторые языки предлагают удобные способы замены переменных без третьей переменной, это не всегда возможно, особенно когда речь идет о строковых переменных. Когда эта операция необходима, а язык не предоставляет прямого способа сделать это, использование временной переменной может оказаться неизбежным.