Показаны различия между двумя версиями страницы.
bb:redbook:213 [2016/09/08 09:47] prospero78 [4. Оператор WITH] |
bb:redbook:213 [2020/10/29 07:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== 2.13 Специфичные ключевые слова ===== | ||
- | ==== 1. Оператор выбора CASE ==== | ||
- | Компонетный Паскаль предлагает инструкции выбора IF ELSIF ELSE. Их можно комбинировать в произволной последовательности и глубине. Но довольно часто случается, | ||
- | |||
- | Так когда же нужно применять оператор выбора CASE? Должно быть выполнено два условия: | ||
- | |||
- | - Выбор надлежит сделать из более чем двух величин. | ||
- | - Выбираемые величины должны быть однотипными -- целыми или литерными. | ||
- | |||
- | Как использовать оператор CASE представлено ниже: | ||
- | |||
- | Как видно из текста модуля, | ||
- | |||
- | |||
- | ==== 2. Ключевые слова модуля ==== | ||
- | Таких слов на данный момент рассмотрено три: | ||
- | - MODULE [NameModule]; | ||
- | - END [NameModule]. -- обязательное ключевое слово с именем модуля. По другому компилятор никак не сможет определить, | ||
- | - BEGIN -- необязательное ключевое слово уровня модуля. Обычно, | ||
- | - CLOSE -- необязательное ключевое слово уровня модуля. Обычно, | ||
- | |||
- | Читатели знакомые, | ||
- | |||
- | |||
- | ==== 3. Арифметические и логические операции ==== | ||
- | Здесь будут рассмотрены только обойдённые внимание операции. | ||
- | - MOD -- бывает весьма полезная операция для поиска остатка при целочисленном делении. Можно вычислить остаток и через программное решение, | ||
- | - DIV -- также весьма полезная операция для целочисленного деления (т.е. когда оба операнда имеют целочисленный тип, и результат имеет его же). Также работает заметно быстрее, | ||
- | - ~[число] -- " | ||
- | - OR -- логическое сложение чисел, бывает полезным, | ||
- | - & -- логическое умножение (читается " | ||
- | - IN -- принадлежность к множеству. Не путать с параметрами на вход в процедурах! Пример: | ||
- | - IS -- принадлежность к типу. Бывает полезным узнать во время выполнения программы к какому типу относится переменная. Используется вместо с оператором выбора типа WITH . Аналогично с предыдущим ключевым словом результатом вычисления является TRUE или FALSE. Оператор IS вводит в Компонентный Паскаль возможности интроспекции (исследование " | ||
- | - ASSERT -- оператор охраны. Вызывает системное исключение, | ||
- | |||
- | |||
- | ==== 4. Оператор WITH ==== | ||
- | Этот оператор занимает промежуточное положение между оператором контекста, | ||
- | |||
- | Например: | ||
- | <code oberon2> | ||
- | MODULE Test_case; | ||
- | |||
- | IMPORT | ||
- | Log; | ||
- | |||
- | TYPE | ||
- | tRecord = EXTENSIBLE RECORD | ||
- | x: INTEGER; | ||
- | y: INTEGER; | ||
- | END; | ||
- | |||
- | tRecord1 = RECORD (tRecord) | ||
- | z: INTEGER; | ||
- | END; | ||
- | |||
- | PROCEDURE SelectV (VAR v: tRecord); | ||
- | BEGIN | ||
- | WITH | ||
- | v: tRecord1 DO | ||
- | Log.String(" | ||
- | Log.Ln; | ||
- | | v: tRecord DO | ||
- | Log.String(" | ||
- | Log.Ln; | ||
- | ELSE | ||
- | Log.String(" | ||
- | END; | ||
- | |||
- | END SelectV; | ||
- | |||
- | PROCEDURE Start*; | ||
- | VAR | ||
- | v: POINTER TO tRecord; | ||
- | v1: POINTER TO tRecord1; | ||
- | |||
- | BEGIN | ||
- | NEW(v); | ||
- | NEW(v1); | ||
- | v.x := 6; | ||
- | SelectV(v); | ||
- | v1.z := 3; | ||
- | SelectV(v1); | ||
- | END Start; | ||
- | |||
- | END Test_case. | ||
- | </ | ||
- | Вывод: | ||
- | < | ||
- | компилируется " | ||
- | старый модуль Test_case выгружен | ||
- | Это тип tRecord | ||
- | Это тип tRecord1 | ||
- | </ | ||
- | |||
- | |||
- | В приведённом примере создаётся тип tRecord и наследующий его tRecord1. Процедура SelectV принимает только тип tRecord, и, теоретически, | ||
- | |||
- | После этого в процедуре SelectV использована небольшая хитрость. Так как одна из переменных имеет тип tRecord1, то при первом вызове эта ветка будет пропущена (и это правильно, | ||
- | |||
- | В тоже время, необходимо обратить внимание, | ||
- | |||
- | |||
- | ==== 5. Заключение ==== | ||
- | Приведённые особенности Компонетного Паскаля надо знать. Можно посоприть с тем, что, например CASE может и излишняя семантическая контсрукция в языке, но опытные программисты на практическом примере покажут вам преимущества того или иного способа. Важно иметь практику, | ||
- | |||
- | В качестве самостоятельного задания, | ||
- |