Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

5.2.4Константы и литералы

Иногда в программе используются фиксированные, заранее заданные значения. Например, программа, управляющая воздушным движением определенного аэропорта, может содержать различные ссылки на положение этого аэропорта относительно уровня моря. В процессе написания программы это значение, скажем, 645 футов, можно каждый раз записывать числом. Такая явная запись значения называется литералом (literal). В результате использования литералов получаются такие выражения, как

EffectiveAlt <- Altimeter - 645

где EffectiveAlt и Altimeter — переменные, а 645 — литерал.

Однако использование литералов не очень удобно, поскольку иногда трудно понять значение выражения, в которое они включены. Как, например, можно узнать из предыдущего выражения, что означает число 645? Кроме того, использование литералов может усложнить изменение программы, если оно потребуется. Если с этой программой работать в другом аэропорту, то все ссылки на положение аэропорта относительно уровня моря нужно изменить. Если используется литерал 645, то нужно просмотреть всю программу и изменить каждое выражение, в котором он встречается. Трудности могут возникнуть в том случае, когда литерал 645 используется также для обозначения какого-либо другого свойства. Как тогда узнать, какое из них нужно поменять?

Для того чтобы избежать этих трудностей, в языках программирования существует возможность присваивать постоянным значениям описательные имена. Такие имена называются константами (constant). Например, описательный оператор языка Ada

AirportAlt constant Integer := 645:

присваивает имени Ai rportAl t фиксированное значение 645 целочисленного типа. То же самое выражение можно записать на Java:

final int AirportAlt = 645;

а на C++ и С# оно будет иметь следующий вид:

const AirportAlt = 645.

После такого выражения имя AirportAlt можно использовать вместо литерала 645. Используя эту константу в нашем псевдокоде, выражение

EffectiveAlt <- Alireter - 645

можно переписать как

EffectiveAlt <- Alimeter - AirportAlt.

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

5.2.5Операторы присваивания

Как только определены переменные и константы, которые будут использоваться в программе, программист может приступать непосредственно к процессу описания алгоритма, который осуществляется с помощью исполняемых операторов. Основными исполняемыми операторами являются операторы присваивания (assignment statement), в результате выполнения которых переменной присваивается некоторое значение (или, более точно, значение сохраняется в ячейке памяти, связанной с этой переменной). Синтаксические структуры с такими операторами обычно состоят из переменной, за которой следуют символ операции присваивания, и выражение, обозначающее значение, которое нужно присвоить. Эта структура означает, что выражение нужно вычислить, а результат сохранить как значение данной переменной. Например, утверждение

Z = X + Y:

в языках С, C++, С# и Java означает, что сумму X и Y нужно присвоить переменной Z. В языках Ada и Pascal это утверждение будет иметь вид:

Z := X + Y;

Обратите внимание на то, что эти выражения отличаются только оператором присваивания: в языках С, C++ и Java это просто знак равенства, а в языках Ada и Pascal — двоеточие и знак равенства. Возможно, самое наглядное обозначение для оператора присваивания используется в языке APL (A Programming Language), который был создан Кеннетом Иверсеном (Kenneth E. Iverson) в 1962 году. Для записи операции присваивания в этом языке применяется стрелка. Таким образом, приведенное выше выражение в APL (как и в нашем псевдокоде) можно записать так: Z <- X + Y.

Основное качество операторов присваивания состоит в том, что в правую часть высказывания можно поместить любое выражение. Например, алгебраическое выражение с арифметическими операциями сложения, вычитания, умножения и деления, которые обычно обозначаются символами +, -, * и / соответственно. Однако эти выражения по-разному интерпретируются в языках программирования. Например, результатом выражения 2*4 + 6/2 будет 14, если вычислять его справа налево, или 7, если вычислять его слева направо. Эта неоднозначность обычно разрешается с помощью введения приоритетов (старшинства) операторов (operator precedence). Согласно традиционным правилам алгебры операции умножения и деления имеют приоритет над операциями сложения и вычитания.

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

2 х (4 + 6)/2

равно 10.

Выражения оператора присваивания могут содержать не только алгебраические операции. Например, если переменные Fi rst и Last представляют собой цепочки символов, то после выполнения следующей команды, записанной на языке FORTRAN: Both = First // Last

переменной Both будет присвоен результат конкатенации этих двух цепочек. То есть если переменные First и Last равны abra и cadabra соответственно, то переменная Both будет равна цепочке abracadabra.

Многие языки программирования позволяют использовать один символ для обозначения нескольких операций. В таких случаях значение символа определяется типом операндов. Например, символ «+» обычно обозначает операцию сложения, когда его операндами являются числа. Но в языке Java этот символ также обозначает конкатенацию, когда его операндами являются цепочки символов. Такое использование символов операций называется перегрузкой операций (overloading).