Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
Следующая версия
Следующая версия справа и слева
|
bb:redbook:213 [2016/09/08 10:11] prospero78 [3. Арифметические и логические операции] |
bb:redbook:213 [2016/09/08 10:15] prospero78 [5. Заключение] |
| |
| |
В приведённом примере создаётся тип tRecord и наследующий его tRecord1. Процедура SelectV принимает только тип tRecord, и, теоретически, компилятор должен был грязно выругаться при попытке скомпилировать этот пример. Ведь в процедуре Start видна попытка скормить для SelectV переменную типа tRecord1 (а это уже другой тип). Но компилятор соглашается!!! | В приведённом примере создаётся тип ''tRecord'' и наследующий его ''tRecord1''. Процедура ''SelectV'' принимает только тип ''tRecord'', и, теоретически, компилятор должен был грязно выругаться при попытке скомпилировать этот пример. Ведь в процедуре ''Start'' видна попытка скормить для ''SelectV'' переменную типа ''tRecord1'' (а это уже другой тип). Но компилятор соглашается!!! |
| |
После этого в процедуре SelectV использована небольшая хитрость. Так как одна из переменных имеет тип tRecord1, то при первом вызове эта ветка будет пропущена (и это правильно, так как тип переменной -- tRecord). А во втором случае выполнение пойдёт именно по первой ветке (и это тоже правильно, так как второй тип -- tRecord1 является расширением tRecord). После выполнения одной из веток -- другие ветки выполняться не будут. | После этого в процедуре ''SelectV'' использована небольшая хитрость. Так как одна из переменных имеет тип ''tRecord1'', то при первом вызове эта ветка будет пропущена (и это правильно, так как тип переменной -- ''tRecord''). А во втором случае выполнение пойдёт именно по первой ветке (и это тоже правильно, так как второй тип -- ''tRecord1'' является расширением ''tRecord''). После выполнения одной из веток -- другие ветки выполняться не будут. |
| |
В тоже время, необходимо обратить внимание, что если в коде попытаться передать переменную типа INTEGER (или вообще любую, не наследующую и не являющуюся типом tRecord) -- компилятор просто откажется компилировать такой модуль. | В тоже время, необходимо обратить внимание, что если в коде попытаться передать переменную типа ''INTEGER'' (или вообще любую, не наследующую и не являющуюся типом ''tRecord'') -- компилятор просто откажется компилировать такой модуль. |
| |
| |
==== 5. Заключение ==== | ==== 5. Заключение ==== |
Приведённые особенности Компонентного Паскаля надо знать. Можно поспорить с тем, что, например CASE может и излишняя семантическая конструкция в языке, но опытные программисты на практическом примере покажут вам преимущества того или иного способа. Важно иметь практику, и понимание, что для чего предназначено. | Приведённые особенности **Компонентного Паскаля** надо знать. Можно поспорить с тем, что, например ''CASE'' может и излишняя семантическая конструкция в языке, но опытные программисты на практическом примере покажут вам преимущества того или иного способа. Важно иметь практику, и понимание, что для чего предназначено. |
| |
В качестве самостоятельного задания, которое потребует почитать документацию, рекомендуется составить две программы с помощью IF THEN ELSE и CASE, и сравнить быстродействие на 10 ветках исполнения (подсказка: Time). | В качестве самостоятельного задания, которое //потребует почитать// документацию, рекомендуется составить две программы с помощью ''IF THEN ELSE'' и ''CASE'', и сравнить быстродействие на 10 ветках исполнения (//подсказка//: Time). |
| |