подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Предыдущая тема Следующая тема Перейти вниз

подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Сообщение  Eric-S в Вс Авг 24, 2008 7:02 am

В главе рассказываеться, о подпрограммах, так называемых процедурах, функциях и свойствах.


Во многих других языках программирования используються только функции. Бэйсик же пошел немного по другому пути.
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 раз(а)

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Сообщение  Gena в Ср Окт 07, 2009 1:46 pm

2+3+4=9 (!)

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Сообщение  Gena в Сб Окт 31, 2009 9:55 pm

Я где-то видел насчёт необязательных параметров. Сейчас ищу, но пока успехов нет.

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 24
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Сообщение  Eric-S в Сб Окт 31, 2009 11:47 pm

Смотри в соответствующей теме
http://freebasic.justforum.net/forum-f10/tema-t49.htm

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: подпрограммы - процедуры (sub), функции (function), активные свойства (property)

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения