Базовые операторы
Суть операции присваивания обсуждалась в предыдущей главе. Основным назначением присваивания считается присвоение /-значению объекта данных (то есть области памяти, выделенной для объекта) г-значения (то есть значения объекта данных) определенного выражения. Синтаксис представления явного присваивания от языка к языку существенно меняется (табл. 5.1).
В семействе языков, сходных по синтаксису с языком ^ присваивание считается просто операцией, поэтому можно написать: у = х = 5. Поскольку присваивание
110 |
Глава 5. Действия и операторы в программах |
является правоассоциативной операцией, данная запись означает у = (х = 5), и ей соответствует следующий порядок вычислений: 1. Переменной х присваивается значение 5. 2. Выражение (х = 5) возвращает значение 5. 3. Переменной у присваивается значение 5. |
Таблица 5.1. Обозначения оператора присваивания в разных языках программирования |
И все же чаще всего присваивание используется только в качестве отдельного оператора. Примером может служить оператор присваивания в языке Pascal: У := 2 + Z; А := 4 + 3 * В; Другие возможности здесь исключены, так как операция присваивания языка Pascal не возвращает никакого явного результата В большинстве языков присваивания применяются лишь отдельно. Однако, как показано в табл. 5.2, в языке C их комбинируют с другими арифметическими операциями. |
Таблица 5.2. Комбинированные операции присваивания в языке С |
Такие комбинированные операции присваивания позволяют сократить запись присваиваемых выражений. Очень интересные возможности дает применение в операторах присваивания для языка С операций изменения значения переменных на единицу. Речь идет об операции увеличения значения (++) и операции уменьшения значения (—). Первая называется операцией инкремента, вторая — операцией декремента. Возможна префиксная и постфиксная формы инкремента и декремента: |
Базовые операторы |
111 |
? Если операции инкремента и декремента записаны в префиксной форме, то переменная сначала изменяется, а затем ее новое значение используется в выражении. ? Если операции инкремента и декремента записаны в постфиксной форме, то в выражении используется текущее значение переменной, и только после этого ее значение изменяется. Использование этих форм иллюстрирует табл. 5.3. |
Таблица 5.3. Префиксная и постфиксная формы инкремента и декремента |
ПРИМЕЧАНИЕ --------------------------------------------------------------------------------------------------- Если операции инкремента и декремента осуществляются в виде отдельного оператора, то обе формы приводят к одинаковому результату. |
Большинство языков программирования содержат операторы для чтения вводимых пользователем данных с клавиатуры, из каналов связи или из файлов. Эти операторы также изменяют значение переменных через операции присваивания. Обычно синтаксис таких операторов выглядит как: read(file, data). В языке C вызов оператора scanf приводит к присваиванию переменной некоторого значения из стандартного файла ввода. В языке Perl операцию чтения вызывает упоминание стандартного входного файла. Например, $А = вызывает присваивание переменной $А очередной строки ввода. Конечно, можно задать линейные вычисления, записав один за другим последовательность операторов присваивания. И все же количество полезных программ, состоящих исключительно из операторов присваивания, крайне ограничено. Чтобы сделать программы более гибкими и разнообразными, необходимы средства для организации разветвлений и повторного выполнения некоторых операторов. Операторы, предоставляющие такие возможности, обычно называют операторами управления. Каким должен быть простой и универсальный набор операторов управления? Простой в том смысле, чтобы любой оператор можно было без труда освоить и легко применить при создании программы. Универсальность же набора должна покрывать все мыслимые и немыслимые программные приложения. Ответ на этот вопрос широко дискутировался на протяжении последних двадцати пяти лет XX века [9-12, 17, 19]. По сути, речь шла о разумном расширении состава операторов языка программирования, эффективно увеличивающего легкость программирования за счет баланса простоты, универсальности и читабельности. |
112 |
Глава 5. Действия и операторы в программах |
Как правило, оператор управления является структурой, в состав которой входит одна или несколько последовательностей операторов присваивания. Исследования 60-х годов XX века доказали, что структуры управления должны иметь один вход и один выход. Наличие нескольких входов в таких структурах делает программы менее читабельными и понятными. |