Thursday, October 6, 2022

Идентификаторы и переменные

Считывание входных данных из консоли

Считывание входных данных из консоли позволяет программе получить введенные пользователем данные на клавиатуре.

В программе ComputeArea значение радиуса задается в исходном коде. Чтобы использовать другой радиус, необходимо изменить исходный код и перекомпилировать его. Очевидно, что это неудобно, поэтому вместо присваивания значения переменной radius можно использовать класс Scanner для консольного ввода (считывания входных данных из консоли).

В Java для ссылки на стандартное устройство вывода используется System.out, а для ссылки на стандартное устройство ввода — System.in. По умолчанию устройством вывода является дисплейный монитор, а устройством ввода — клавиатура. Для того, чтобы отобразить в консоли значение примитивного типа или строку, используется просто метод println(). Для того, чтобы выполнить консольный ввод, необходимо использовать класс Scanner для создания объекта для считывания входных данных из System.in следующим образом:

Scanner input = new Scanner(System.in);

Синтаксис new Scanner(System.in) создает объект типа Scanner. Синтаксис Scanner input объявляет, что входные данные являются переменной типа Scanner. Все предложение Scanner input = new Scanner (System.in); создает объект Scanner и присваивает его ссылку в качестве значения переменной input. Объект может вызывать свои методы. Чтобы вызвать метод объекта, необходимо попросить объект выполнить задачу. Для считывания значения типа double можно вызвать метод nextDouble() следующим образом:

double radius = input.nextDouble();

Это предложение считывает число с клавиатуры и присваивает его переменной radius. Программа ComputeAreaWithConsoleInput предлагает пользователю ввести радиус.

Класс Scanner находится в пакете java.util. Этот пакет импортируется в программу в строчке №1. В строчке №8 создается объект типа Scanner. Обратите внимание, что предложение import можно опустить, если заменить Scanner на java.util.Scanner в строчке №8.

С помощью строчки №11 отображается в консоли строка Введите радиус круга:. Она называется приглашением (пользователя к действиям), поскольку предписывает пользователю ввести входные данные. Программа всегда должна сообщать пользователю, что вводить, ожидая от него входные данные с клавиатуры.

Напомним, что метод print() в строчке №11 идентичен методу println(), за исключением того, что метод println() перемещает курсор в начало следующей строчки после отображения своей строки, а метод print() не перемещает.

Предложение в строчке №12 считывает входные данные с клавиатуры:

double radius = input.nextDouble();

После ввода пользователем числа и нажатия клавиши Enter программа считывает число и присваивает его переменной radius.

Более подробная информация об объектах будет представлена в следующих курсах. Пока просто примите как данность, что именно так мы получаем входные данные из консоли.

Напомним, что класс Scanner находится в пакете java.util, который импортируется в строчке №1. Существует два типа предложений import: одиночный и групповой. При одиночном импорте указывается один класс из пакета. Например, в следующем предложении импортируется класс Scanner из пакета java.util.

import java.util.Scanner;

При групповом импорте указываются все классы в пакете, используя символ звездочки в качестве подстановочного знака. Например, следующее предложение импортирует все классы из пакета java.util.

import java.util.*;

Информация о классах в импортированном пакете не считывается во время компиляции или выполнения программы до тех пор, пока классы не используются. Предложение import просто сообщает компилятору, где их найти. Между объявлениями одиночного и группового импорта нет разницы в производительности.

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


Здесь предложения для импорта класса Scanner (строчка №1) и создания объекта типа Scanner (строчка №7) те же, что и в предыдущей программе ComputeAreaWithConsoleInput, а также во всех новых программах, которые вы будете писать для считывания входных данных с клавиатуры.

В строчке №10 пользователю предлагается ввести три числа. Введенные числа считываются в строчках №11–13. Необходимо ввести три числа, разделенных пробелами, и только затем нажать клавишу Enter.

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

  • Заметка

    Большинство программ этого курса выполняются в три этапа: ввод (Input), обработка (Process) и вывод (Output), все вместе называемые IPO. На этапе ввода программа получает входные данные от пользователя; на этапе обработки с использованием входных данных создаются выходные данные; на этапе вывода выходные данные отображаются.

Идентификаторы 

Идентификаторы

Идентификаторы — это имена, которые однозначно определяют в программе такие элементы, как классы, методы и переменные.

Как вы видели в предыдущей программе, ComputeAveragemaininputnumber1number2number3 и так далее — это имена сущностей, которые появляются в программе. В терминологии программирования такие имена называются идентификаторами. Все идентификаторы должны соответствовать следующим правилам:

  • Идентификатор — это последовательность символов, состоящая из букв, цифр, символов подчеркивания (_) и символов доллара ($).
  • Идентификатор может начинаться с буквы, символа подчеркивания (_) или символа доллара ($). Идентификатор НЕ может начинаться с цифры.
  • Идентификатор НЕ может быть ключевым словом (список ключевых слов в Java см. в разделе «Справочники» этого курса).
  • Идентификатор НЕ может иметь значение truefalse или null.
  • Идентификатор может быть любой длины.

Например, $2CompureAreaarearadius и print являются допустимыми идентификаторами, в то время как 2A и d+4 — недопустимыми. Компилятор Java обнаруживает недопустимые идентификаторы и сообщает о синтаксических ошибках.

  • Заметка

    Поскольку язык Java чувствителен к регистру, имена areaArea и AREA являются различными идентификаторами.

  • Подсказка

    Идентификаторы предназначены для именования переменных, методов, классов и других элементов в программе. Более описательные идентификаторы упрощают чтение программы. Избегайте использования сокращений для идентификаторов. Использование полных слов более описательно. Например, numberOfStudents лучше, чем numStudsnumOfStuds или numOfStudents. В основном мы будем использовать описательные идентификаторы, однако иногда для краткости мы также будем использовать во фрагментах кода такие имена переменных, как ijkx и y.

  • Подсказка

    Не называйте идентификаторы с символами $. По традиции символ $ должен использоваться только в автоматически созданном исходном коде.

Переменные

Переменные используются для представления значений, которые могут быть изменены в программе.

Как видно из программ в предыдущих подразделах, переменные используются для хранения значений, которые обрабатываются в программе. Они называются переменными, поскольку их значения могут быть изменены. В программе ComputeAreaWithConsoleInput переменными типа double являются radius и area. Этим переменным можно присвоить любое числовое значение, а также потом изменить его. Например, в следующем коде значение переменной radius изначально равно 1.0 (строчка №2), затем оно изменяется на 2.0 (строчка №7), а значение переменной area равно 3.14159 (строчка №3), затем оно изменяется на 12.56636 (строчка №8).

 1 // Вычислить первую площадь круга
 2 radius = 1.0;
 3 area = 3.14159 * radius * radius;
 4 System.out.println("Площадь равна " + area + " для радиуса " + 
 5   radius);
 6 // Вычислить вторую площадь круга
 7 radius = 2.0;
 8 area = 3.14159 * radius * radius;
 9 System.out.println("Площадь равна " + area + " для радиуса " +
10   radius);

Переменные предназначены для представления данных определенного типа. Чтобы использовать переменную, необходимо объявить ее, указав компилятору ее имя, а также тип данных, которые она может хранить. Объявление переменной предписывает компилятору выделить соответствующее место в памяти для переменной на основе ее типа данных.

Синтаксис объявления переменной:

ТипДанных имяПеременной;

Примеры объявления переменных:

int count; // объявление count как целочисленной переменной
double radius; // объявление radius как переменной типа double
double interestRate; // объявление interestRate (процентная ставка) как переменной типа double

В этих примерах используются типы данных int и double. Позже вы познакомитесь с другими типами данных, такими как byteshortlongfloatchar и boolean.

Если переменные одного типа, то они могут быть вместе объявлены следующим образом:

ТипДанных имяПеременной1, имяПеременной2, ..., имяПеременнойN;

Имена переменных при этом разделяются запятыми, например:

int i, j, k; // объявление i, j и k как переменных типа int

Переменные часто имеют начальные значения. Можно объявить переменную и инициализировать ее, т. е. присвоить ей начальное значение, в одном предложении. Рассмотрим, например, следующий код:

int count = 1;

Это одно предложение эквивалентно следующим двум:

int count;
count = 1;

Можно также использовать сокращенную форму для объявления и инициализации переменных одного типа. Например,

int i = 1, j = 2;
  • Подсказка

    Прежде чем присваивать переменной значение, ее необходимо объявить. Прежде чем использовать переменную, объявленную в методе, ей необходимо присвоить значение.

    Хорошим стилем программирования считается объявление в начале метода всех используемых в нем переменных до присваивания им каких-либо значений. Это облегчит чтение программы и позволит избежать ошибок программирования.

Каждая переменная имеет область видимости. Область видимости переменной — это часть программы, в которой можно ссылаться на эту переменную. Правила, определяющие область видимости переменной, будут в этом курсе вводиться постепенно. На данный момент все, что вам нужно знать, — это то, что переменная должна быть объявлена и инициализирована, прежде чем ее можно использовать.


Предложения и выражения с присваиванием

Предложение с присваиванием назначает значение переменной. Предложение с присваиванием может использоваться в Java в качестве выражения.

После объявления переменной ей можно присвоить значение с помощью оператора присваивания. В Java в качестве оператора присваивания используется символ равенства (=).

Синтаксис предложения с присваиванием:

переменная = выражение;

Выражение включает в себя значения, переменные и операторы, которые все вместе вычисляют его значение. Например, рассмотрим следующий код:

y = 1; // присваивает 1 переменной y
radius = 1.0; // присваивает 1.0 переменной radius
x = 5 * (3 / 2); // присваивает значение выражения 5 * (3 / 2) переменной x
x = y + 1; // присваивает результат сложения y и 1 переменной x
area = radius * radius * 3.14159; // вычисляет площадь круга

В выражении с обеих сторон оператора присваивания можно использовать одну и ту же переменную, например:

x = x + 1;

В этом предложении с присваиванием переменной x присваивается значение выражения x + 1. Если x равен 1 до выполнения предложения, то он становится равным 2 после выполнения этого предложения.

Чтобы присвоить значение переменной, необходимо поместить имя переменной слева от оператора присваивания, поэтому следующее предложение будет неправильным:

1 = x; // неправильное предложение

В математике x = 2 * x + 1 называется уравнением. В Java, однако, x = 2 * x + 1 — это предложение с присваиванием, которое вычисляет значение выражения 2 * x + 1 и присваивает его переменной x.

Предложение с присваиванием в Java само по существу является выражением, которое вычисляется как значение, присваиваемое переменной слева от оператора присваивания. По этой причине предложение с присваиванием также называется выражением с присваиванием. Например, следующее предложение корректное:

System.out.println(x = 1);

что эквивалентно

x = 1;
System.out.println(x);

Если одно и то же значение присваивается нескольким переменным, то можно использовать следующий синтаксис:

i = j = k = 1;

что эквивалентно

k = 1;
j = k;
i = j;

В предложении с присваиванием тип данных переменной слева от оператора присваивания должен быть совместим с типом данных значения справа. Например, предложение int x = 1.0; будет недопустимым, так как невозможно переменной x типа int присвоить значение типа double (1.0) без приведения типов. Приведение типов будет рассмотрено в конце этого раздела.

Именованные константы

Именованная константа — это идентификатор, представляющий постоянное значение.

Значение переменной может меняться во время выполнения программы, а именованная константа (или просто константа) представляет постоянное значение, которое никогда не меняется. Константа в Java также известна как final (результирующая) переменная. В программе ComputeArea число Пи (π) является константой. Если вы его часто используете и не хотите каждый раз вводить 3.14159, то вы можете объявить константу для π.

Синтаксис объявления константы:

final ТипДанных ИМЯ_КОНСТАНТЫ = значение;

Константа должна быть объявлена и инициализирована в одном и том же предложении. В Java слово final является ключевым словом для объявления константы. По традиции, все буквы в константе — заглавные.

Давайте еще раз решим задачу вычисления площади круга, добавив в нее π в качестве константы, и перепишем результаты применения методики разработки программы на этапах анализа задачи, проектирования и реализации.

Константа задачи:

final double PI = 3.14159; // число Пи

Входные данные задачи:

double radius; // радиус круга

Выходные данные задачи:

double area; // площадь круга

Формула:

area = PI * radius * radius;

Алгоритм решения задачи с уточнением:

1. Получить радиус круга.

2. Вычислить площадь круга.

    2.1. Площадь круга = число Пи * радиус круга * радиус круга

3. Отобразить площадь круга.

Программа ComputeAreaWithConstant:

Существует три преимущества при использовании констант:

  • нет необходимости многократно вводить одно и то же значение, если оно используется несколько раз;
  • если требуется изменить постоянное значение (например, с 3.14159 на 3.14 для PI), то необходимо изменить его только в одном месте исходного кода;
  • описательное имя константы облегчает чтение программы.

Соглашение по именованию

Соблюдение соглашения по именованию в Java упрощает чтение программ и позволяет избежать ошибок.

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

  • Используйте строчные буквы для именования переменных и методов, например, radius и area — имена переменных, print() — имя метода. Если имя состоит из нескольких слов, объедините их в одно, сделав первое слово строчными буквами, а каждое последующее слово начав с заглавной буквы, например, numberOfStudents — имя переменной. Этот стиль именования известен как camelCase (букв. «верблюжий регистр»), поскольку заглавные буквы в имени напоминают горбы верблюда.
  • Начинайте с заглавной буквы каждое слово в имени класса, например, ComputeArea и System — имена классов.
  • Делайте заглавной каждую букву в имени константы и используйте подчеркивания между словами, например, PI и MAX_VALUE — имена констант.

Важно соблюдать соглашение по именованию, чтобы облегчить чтение программ.

  • Внимание

    Не выбирайте для своих классов имена классов, которые уже используются в библиотеке Java. Например, поскольку класс System уже определен в Java, не следует называть свой класс именем System.







No comments:

Post a Comment