Java: Изменение переменной
Само слово "переменная" подсказывает, что ее значение может меняться. Это одна из главных причин, почему переменные вообще существуют.
Вот пример:
var greeting = "Father!";
System.out.println(greeting); // => Father!
// var уже не используется, переменная определена выше
greeting = "Mother!";
System.out.println(greeting); // => Mother!Здесь мы сначала записали в переменную одну строку (Father!), потом другую (Mother!). Имя переменной не изменилось, но значение внутри стало другим. Ключевое слово var нужно только при создании переменной. При изменении значения его уже не пишут.
До: greeting ──→ "Father!"
После: greeting ──→ "Mother!"Зачем менять значение
В реальных программах переменные меняются постоянно. Вот несколько причин:
- Программа реагирует на действия пользователя. Например, пока вы вводите данные в форму на сайте, переменные, которые эти данные содержат, постоянно меняются.
- Промежуточные результаты. Часто данные проходят через серию преобразований, и на каждом этапе переменная обновляется новым значением. Подобный механизм есть даже в калькуляторах, когда промежуточные значения сохраняются с помощью клавиш
m+илиm-. - Хранение состояния. Если вы пишете игру, то положение персонажа, его здоровье, счет и текущий уровень будут переменными, которые постоянно меняются.
Тип переменной не меняется
Java — статически типизированный язык. Тип переменной задается при создании и больше не меняется. В примере выше мы записали строку при создании переменной. Компилятор запоминает тип и проверяет все последующие изменения.
Если попробовать той же переменной присвоить число, мы получим ошибку:
greeting = 5;
// Error:
// incompatible types: int cannot be converted to java.lang.String
// несовместимые типы: число не может быть превращено в строкуКомпилятор делает такую проверку без запуска кода на выполнение. Именно поэтому такой вид типизации называют статическим. В JavaScript, Ruby, PHP, Python и других динамических языках подобное поведение не считается ошибкой, и переменная может изменить свой тип в процессе работы.
Обратная сторона изменчивости
Переменные дают способ хранить данные, которые меняются по ходу выполнения программы. Благодаря этому можно писать программы, которые ведут себя по-разному в зависимости от условий, действий пользователя или результатов вычислений.
Но у изменчивости есть и обратная сторона. Иногда сложно понять, что именно записано в переменную в конкретный момент времени. Разработчику приходится отслеживать, где и как она изменилась, особенно если код длинный.
Именно это делают во время отладки. Разработчик разбирается, почему программа работает иначе, чем задумано. Проверяют значения переменных, отслеживают порядок выполнения кода, ищут, где что-то пошло не так.
Задание
В коде определена переменная со значением "Brienna". Переопределите значение этой переменной и присвойте ей такую же, но в перевернутом виде.
anneirBJava: Изменение переменной
Само слово "переменная" подсказывает, что ее значение может меняться. Это одна из главных причин, почему переменные вообще существуют.
Вот пример:
var greeting = "Father!";
System.out.println(greeting); // => Father!
// var уже не используется, переменная определена выше
greeting = "Mother!";
System.out.println(greeting); // => Mother!Здесь мы сначала записали в переменную одну строку (Father!), потом другую (Mother!). Имя переменной не изменилось, но значение внутри стало другим. Ключевое слово var нужно только при создании переменной. При изменении значения его уже не пишут.
До: greeting ──→ "Father!"
После: greeting ──→ "Mother!"Зачем менять значение
В реальных программах переменные меняются постоянно. Вот несколько причин:
- Программа реагирует на действия пользователя. Например, пока вы вводите данные в форму на сайте, переменные, которые эти данные содержат, постоянно меняются.
- Промежуточные результаты. Часто данные проходят через серию преобразований, и на каждом этапе переменная обновляется новым значением. Подобный механизм есть даже в калькуляторах, когда промежуточные значения сохраняются с помощью клавиш
m+илиm-. - Хранение состояния. Если вы пишете игру, то положение персонажа, его здоровье, счет и текущий уровень будут переменными, которые постоянно меняются.
Тип переменной не меняется
Java — статически типизированный язык. Тип переменной задается при создании и больше не меняется. В примере выше мы записали строку при создании переменной. Компилятор запоминает тип и проверяет все последующие изменения.
Если попробовать той же переменной присвоить число, мы получим ошибку:
greeting = 5;
// Error:
// incompatible types: int cannot be converted to java.lang.String
// несовместимые типы: число не может быть превращено в строкуКомпилятор делает такую проверку без запуска кода на выполнение. Именно поэтому такой вид типизации называют статическим. В JavaScript, Ruby, PHP, Python и других динамических языках подобное поведение не считается ошибкой, и переменная может изменить свой тип в процессе работы.
Обратная сторона изменчивости
Переменные дают способ хранить данные, которые меняются по ходу выполнения программы. Благодаря этому можно писать программы, которые ведут себя по-разному в зависимости от условий, действий пользователя или результатов вычислений.
Но у изменчивости есть и обратная сторона. Иногда сложно понять, что именно записано в переменную в конкретный момент времени. Разработчику приходится отслеживать, где и как она изменилась, особенно если код длинный.
Именно это делают во время отладки. Разработчик разбирается, почему программа работает иначе, чем задумано. Проверяют значения переменных, отслеживают порядок выполнения кода, ищут, где что-то пошло не так.
Задание
В коде определена переменная со значением "Brienna". Переопределите значение этой переменной и присвойте ей такую же, но в перевернутом виде.
anneirBВаше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "anneirB";
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.main(null);
final var actual = out.toString().trim();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(actual);
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
