подпрограммы - процедуры (sub), функции (function), активные свойства (property)
Участников: 2
Страница 1 из 1
подпрограммы - процедуры (sub), функции (function), активные свойства (property)
В главе рассказываеться, о подпрограммах, так называемых процедурах, функциях и свойствах.
Во многих других языках программирования используються только функции. Бэйсик же пошел немного по другому пути.
function, sub, property и подобные это нечто иное как подпрограммы.
процедура (sub)
Самое простое это процедура.
Она выполняет подпрограмму. Причём мы можем передать ей какие-то параметры и только. Но процедура ничего не возвращает и возвращать не может. Разве что изменяя аргументы.
Вот например, нам нужно какое-то действие.
Подобная процедура может оказаться полезной, когда мы хотим вывести какое-то предупреждение и только. Нам не нужны возвращаемые значения. Если программа пошла дальше работать, то значит пользователь прочитал и нажал эскейп.
Вызов процедуры упрощён.
Скобки нам не нужны. Хотя их можно писать. Но они и так предполагаються. Параметров может быть сколько угодно.
На одной строке кода может быть один вызов процедуры.
Процедуры, ещё используються при разделении потоков выполнения, но это уже тема отдельного разговора.
функции (function
Функция отличаеться от процедуры тем, что она умеет возвращать какое-то значение.
Подробнее механизм возврата рассмотрен здесь
Соответственно вызывать функцию можно из любого места кода, где может быть некоторое выражение.
Вот например нам нужно вычислить математическое выражение, но к сожалению на входе у нас строки.
Почему так, смотрите главу работа со строками.
Как упоминалось, в тойже главе, есть функция для пконвертации строки в число val(). Вот давайте воспользуемся ей.
свойства (property)
Свойство это понятие уже из объектноориентированного программирования. Свойство может быть только у классов.
Читайте теорию ооп
Об использовании подробно рассказано в главе классы, методы, свойства и объекты.
Здесь же я расскажу о том, чем же свойства отличаються от процедур и функций. Правильнее сказать "активные свойства".
Как говориться в теории ооп, "простое свойство" это переменная. Но как говорил Энштейн, всё в мире относительно.
Активное свойство property ... end property это функции, которые прикидываються переменными. И ведут себя соответственно.
Вот например переменная myvar1, мы можем присвоить ей значение, а потом запросить его обратно.
Точно такойже синтаксис у свойств property.
В других языках используют две парных функции, одна принимает значение, а другая его возвращает.
А смысл? Этоже не удобно!
Ещё в самом начале должен был возникнуть вопрос, а зачем нужно прикидываться переменной, если можно эту переменную создать.
Ответ очень прост.
Допустим написали класс, в котором было свойство, Это свойство перед использованием нужно задать, расстояние от точки a, до точки b. Число должно быть реальным, а не отрицательным или астрономически огромным. Всем это понятно, все его так и задают. И кстати, это свойство должно быть установлено не раньше, чем начнуться выполняться вычисления.
Вы знаете, как бывает на самом деле, предполагаеться одно, а реально другое. Свойство начнут устанавливать в критичные значения, в лучшем случае программа выдаст ошибку и аварийно завершиться. Но может быть и так, что число это будет принято и все расчёты окажуться совершенно неверными.
Ну, конечно же нужна проверка. А как эту проверку вставить и куда? Свойство то уже используеться в нескольких сторонних проектах. И если внедрять функции, приёмники и возвращатели, то другие проекты тоже придёться перелопачивать. И тут на помощь приходит конструкция property. Поскольку это подпрограмма, она может выполнить нужные проверки и преобразования.
смотрите также:
передача аргументов в процедуры и функции
Во многих других языках программирования используються только функции. Бэйсик же пошел немного по другому пути.
function, sub, property и подобные это нечто иное как подпрограммы.
процедура (sub)
Самое простое это процедура.
- Код:
sub [имя_процедуры] ( {список аргументов} )
...
тело подпрограммы
...
end sub
Она выполняет подпрограмму. Причём мы можем передать ей какие-то параметры и только. Но процедура ничего не возвращает и возвращать не может. Разве что изменяя аргументы.
Вот например, нам нужно какое-то действие.
- Код:
' процедура, которая очищает экран и выводит сообщение с предупреждением
sub MsgVarning( byVal text as string, byVal c1 as integer = 0, c2 as integer = 7)
color c1, c2
cls
locate 10, 30, 0
print "varning!";
locate 14, 1, 0
print text
locate 24, 1, 0
print "press esc to continue";
' ждём нажатие эскейпа
do
sleep
loop while inkey$ <> chr$(27)
cls
end sub
Подобная процедура может оказаться полезной, когда мы хотим вывести какое-то предупреждение и только. Нам не нужны возвращаемые значения. Если программа пошла дальше работать, то значит пользователь прочитал и нажал эскейп.
Вызов процедуры упрощён.
- Код:
MsgVarning ""hello! This message is test.", 7, 0
Скобки нам не нужны. Хотя их можно писать. Но они и так предполагаються. Параметров может быть сколько угодно.
На одной строке кода может быть один вызов процедуры.
Процедуры, ещё используються при разделении потоков выполнения, но это уже тема отдельного разговора.
функции (function
Функция отличаеться от процедуры тем, что она умеет возвращать какое-то значение.
Подробнее механизм возврата рассмотрен здесь
Соответственно вызывать функцию можно из любого места кода, где может быть некоторое выражение.
Вот например нам нужно вычислить математическое выражение, но к сожалению на входе у нас строки.
- Код:
dim x, y, z as string
x = "2"
y = "3"
z = "4"
- Код:
print x + y + z
234
Почему так, смотрите главу работа со строками.
Как упоминалось, в тойже главе, есть функция для пконвертации строки в число val(). Вот давайте воспользуемся ей.
- Код:
print val(x) + val(y) + val(z)
9
свойства (property)
Свойство это понятие уже из объектноориентированного программирования. Свойство может быть только у классов.
Читайте теорию ооп
Об использовании подробно рассказано в главе классы, методы, свойства и объекты.
Здесь же я расскажу о том, чем же свойства отличаються от процедур и функций. Правильнее сказать "активные свойства".
Как говориться в теории ооп, "простое свойство" это переменная. Но как говорил Энштейн, всё в мире относительно.
Активное свойство property ... end property это функции, которые прикидываються переменными. И ведут себя соответственно.
Вот например переменная myvar1, мы можем присвоить ей значение, а потом запросить его обратно.
- Код:
myvar1 = 123
print myvar1
Точно такойже синтаксис у свойств property.
В других языках используют две парных функции, одна принимает значение, а другая его возвращает.
- Код:
set_myvar2(123)
print get_myvar2()
А смысл? Этоже не удобно!
Ещё в самом начале должен был возникнуть вопрос, а зачем нужно прикидываться переменной, если можно эту переменную создать.
Ответ очень прост.
Допустим написали класс, в котором было свойство, Это свойство перед использованием нужно задать, расстояние от точки a, до точки b. Число должно быть реальным, а не отрицательным или астрономически огромным. Всем это понятно, все его так и задают. И кстати, это свойство должно быть установлено не раньше, чем начнуться выполняться вычисления.
Вы знаете, как бывает на самом деле, предполагаеться одно, а реально другое. Свойство начнут устанавливать в критичные значения, в лучшем случае программа выдаст ошибку и аварийно завершиться. Но может быть и так, что число это будет принято и все расчёты окажуться совершенно неверными.
Ну, конечно же нужна проверка. А как эту проверку вставить и куда? Свойство то уже используеться в нескольких сторонних проектах. И если внедрять функции, приёмники и возвращатели, то другие проекты тоже придёться перелопачивать. И тут на помощь приходит конструкция property. Поскольку это подпрограмма, она может выполнить нужные проверки и преобразования.
смотрите также:
передача аргументов в процедуры и функции
Последний раз редактировалось: Eric-S (Вт Окт 13, 2009 6:20 am), всего редактировалось 1 раз(а)
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Re: подпрограммы - процедуры (sub), функции (function), активные свойства (property)
Я где-то видел насчёт необязательных параметров. Сейчас ищу, но пока успехов нет.
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения