Процедурой является блок кода, который можно вызвать в любое время из
программы. Этот код может потребоваться для выполнения по нескольку раз, и
процедуры представляют собой весьма ценное средство для упрощения кода,
заменив эти блоки кода одним вызовом процедуры. Процедура также служит для
расширения языка FreeBASIC, предоставляя пользовательские команды. Многие из
функций, встроенных в FreeBASIC являются лишь частью процедур "
runtime
library".
Ключевое слово
Sub знаменует собой начало процедуры, а ее
конец отмечается с помощью
End Sub. Параметр "
identifier"
- это имя, под которым эта процедура вызывается. Например, если декларация "
Sub
foo...End Sub", пользователь может
выполнить код между "
Sub foo" и "
End Sub" с
помощью "
foo" как оператора. Этот код выполняется отдельно от кода,
который вызывает процедуру, поэтому любые имена переменных, если они не
являются общими, не доступны в процедуре. Однако значения могут быть
переданы с помощью параметров.
Параметры - это аргументы, переданные к любому заявлению. Например, если
пользователь выполняет заявление как "
Print 4",
значение "4" передается в функцию "
Print".
Параметры, которые должны быть переданы в процедуру поставляются одним или
несколькими аргументами параметров в ключевое слово "
Sub".
Создание подпрограммы с "
Sub mysub(foo, bar)...End Sub",
позволяет код между "
Sub" и "
End Sub" для
обозначения первого заданного аргумента как "foo" , а второго передаваемого
аргумента как "bar". Если параметр задается со значением по умолчанию, то
параметр является необязательным.
В диалекте по умолчанию
-lang fb,
параметры также должны иметь прилагаемый тип, в виде "
parameter as type".
Тип суффикса не допускается.
В диалектах
-lang qb и
-lang fblite ,
дается тип по умолчанию, если тип явно не задается либо по имени, либо по
типу суффикса. Тип по умолчанию
Single
в диалекте
-lang qb , и
Integer
в диалекте
-lang fblite.
Процедура может также указать, как передаются параметры, то есть, либо
как "
ByRef" , либо как "
ByVal",
как показано в определении синтаксиса. Если параметр "
ByRef",
имя параметра буквально становится ссылкой на исходную переменную,
передаваемую в процедуру. Любые изменения, внесенные в эту переменную будут
отражены за пределами процедуры. Если параметр передается как "
ByVal",
значение любой переданной переменной копируется в новую переменную, и любые
изменения, внесенные в нее не повлияют на оригинал. (Обратите внимание: это
в настоящее время не применяется к типу
String,
и "
ByVal" следует избегать с этим
типом в настоящее время.)
Static спецификатор указывает на то,
что значения всех локальных переменных, определенных в процедуре должны быть
сохранены между вызовами. Чтобы указать отдельные локальные переменные как
статические см. ключевое слово
Static.
Sub такая же, как
Function, за
исключением того, что не возвращает значение.
Второй синтаксис определяет либо конструктор , либо деструктор с помощью
ключевых слов
Constructor
и
Destructor
соответственно. Конструктор подпрограммы выполняются перед первой строкой
кода в модуле, а деструктор выполняется после последней строчки кода в
модуле перед выходом. Обратите внимание на спецификатор доступа
Public и пустой список параметров для обоих
конструкторов и деструкторов.
См. также