Java: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
System.out.println("Father!");
System.out.println("Father!");Такой способ подойдет, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придется копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придется искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, ее можно сохранить в переменной и распечатывать ее содержимое:
var greeting = "Father!";
System.out.println(greeting);
System.out.println(greeting);Результат:
Father!
Father!Переменная представляет собой имя, за которым хранится значение. В этом примере мы создали переменную с именем greeting и записали в нее строку "Father!".
var greeting = "Father!";
Переменная Значение
┌──────────┐ ┌──────────┐
│ greeting │ ──→ │ "Father!"│
└──────────┘ └──────────┘Строчка var greeting = "Father!" читается так: "возьми значение "Father!" и присвой его переменной с именем greeting". Знак = здесь работает как оператор присваивания, а не обозначение равенства как в математике. Он кладет значение в переменную.
Ключевое слово var сообщает компилятору, что мы создаем новую переменную. Java сама определяет тип переменной по тому значению, которое мы в нее записали. Раз справа стоит строка "Father!", то и переменная greeting становится строковой.
Когда мы пишем System.out.println(greeting), программа подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка Father!.
System.out.println(greeting);
|
v
System.out.println("Father!");Типы переменных
В Java у каждой переменной есть тип. Тип говорит, какие данные внутри переменной хранятся. Целое число, дробное число или строка задают разные типы:
var age = 25; // целое число
var price = 9.99; // дробное число
var name = "Tom"; // строкаВ примерах выше тип определяется автоматически по значению справа от знака =. Можно записать тип и явно, тогда вместо var указывают название типа:
int age = 25;
double price = 9.99;
String name = "Tom";Оба способа создают переменную с одинаковым результатом. Запись через var короче, поэтому в примерах мы будем использовать ее.
Имена переменных
Имена переменных придумывает сам программист. В Java можно использовать:
- Латинские буквы (a-z, A-Z),
- цифры (но не в начале),
- нижнее подчеркивание
_.
Примеры допустимых имен: greeting, name1, helloWorld. Java различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING будут тремя разными переменными.
Переменные и литералы
В коде важно различать, где мы используем переменную, а где записываем значение напрямую. Это особенно заметно на примере с System.out.println():
var greeting = "Mother!";
System.out.println(greeting); // => Mother!
System.out.println("greeting"); // => greetingВ первом случае используется переменная greeting, и программа подставляет ее значение. Во втором случае "greeting" заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Хотя мы видим слово greeting в обоих случаях, с точки зрения компилятора это разные вещи.
Литералы представляют собой данные, записанные явно (например, "Hello", 42, 3.14). Идентификаторы работают как имена переменных и методов (например, greeting, println), которые указывают на уже существующие значения или команды.
Несколько переменных в программе
В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:
var greeting1 = "Father!";
System.out.println(greeting1);
System.out.println(greeting1);
var greeting2 = "Mother!";
System.out.println(greeting2);
System.out.println(greeting2);Результат:
Father!
Father!
Mother!
Mother!Количество переменных зависит от логики программы. Чем сложнее задача, тем больше промежуточных данных приходится где-то хранить.
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно это важно в больших программах, где переменных могут быть десятки и сотни тысяч.
Задание
Создайте переменную с именем motto и содержимым What Is Dead May Never Die!. Распечатайте содержимое переменной.
What Is Dead May Never Die!Полезное
Java: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
System.out.println("Father!");
System.out.println("Father!");Такой способ подойдет, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придется копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придется искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, ее можно сохранить в переменной и распечатывать ее содержимое:
var greeting = "Father!";
System.out.println(greeting);
System.out.println(greeting);Результат:
Father!
Father!Переменная представляет собой имя, за которым хранится значение. В этом примере мы создали переменную с именем greeting и записали в нее строку "Father!".
var greeting = "Father!";
Переменная Значение
┌──────────┐ ┌──────────┐
│ greeting │ ──→ │ "Father!"│
└──────────┘ └──────────┘Строчка var greeting = "Father!" читается так: "возьми значение "Father!" и присвой его переменной с именем greeting". Знак = здесь работает как оператор присваивания, а не обозначение равенства как в математике. Он кладет значение в переменную.
Ключевое слово var сообщает компилятору, что мы создаем новую переменную. Java сама определяет тип переменной по тому значению, которое мы в нее записали. Раз справа стоит строка "Father!", то и переменная greeting становится строковой.
Когда мы пишем System.out.println(greeting), программа подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка Father!.
System.out.println(greeting);
|
v
System.out.println("Father!");Типы переменных
В Java у каждой переменной есть тип. Тип говорит, какие данные внутри переменной хранятся. Целое число, дробное число или строка задают разные типы:
var age = 25; // целое число
var price = 9.99; // дробное число
var name = "Tom"; // строкаВ примерах выше тип определяется автоматически по значению справа от знака =. Можно записать тип и явно, тогда вместо var указывают название типа:
int age = 25;
double price = 9.99;
String name = "Tom";Оба способа создают переменную с одинаковым результатом. Запись через var короче, поэтому в примерах мы будем использовать ее.
Имена переменных
Имена переменных придумывает сам программист. В Java можно использовать:
- Латинские буквы (a-z, A-Z),
- цифры (но не в начале),
- нижнее подчеркивание
_.
Примеры допустимых имен: greeting, name1, helloWorld. Java различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING будут тремя разными переменными.
Переменные и литералы
В коде важно различать, где мы используем переменную, а где записываем значение напрямую. Это особенно заметно на примере с System.out.println():
var greeting = "Mother!";
System.out.println(greeting); // => Mother!
System.out.println("greeting"); // => greetingВ первом случае используется переменная greeting, и программа подставляет ее значение. Во втором случае "greeting" заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Хотя мы видим слово greeting в обоих случаях, с точки зрения компилятора это разные вещи.
Литералы представляют собой данные, записанные явно (например, "Hello", 42, 3.14). Идентификаторы работают как имена переменных и методов (например, greeting, println), которые указывают на уже существующие значения или команды.
Несколько переменных в программе
В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:
var greeting1 = "Father!";
System.out.println(greeting1);
System.out.println(greeting1);
var greeting2 = "Mother!";
System.out.println(greeting2);
System.out.println(greeting2);Результат:
Father!
Father!
Mother!
Mother!Количество переменных зависит от логики программы. Чем сложнее задача, тем больше промежуточных данных приходится где-то хранить.
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно это важно в больших программах, где переменных могут быть десятки и сотни тысяч.
Задание
Создайте переменную с именем motto и содержимым What Is Dead May Never Die!. Распечатайте содержимое переменной.
What Is Dead May Never Die!Полезное
Ваше упражнение проверяется по этим тестам
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 = "What Is Dead May Never Die!";
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
