Функции теперь могут возвращать значения любого типа, включая сложные и определенные пользователем. Исключениями по-прежнему являются типизированные файлы и объекты старой модели.
Внутри каждой функции описана локальная переменная Result, имеющая тот же тип, что и возвращаемое функцией значение. В отличие от имени функции, которое доступно для записи и используется только для возврата значения, переменная Result доступна для чтения/записи и может быть использована в промежуточных вычислениях. Например, вызов функции
function Infinite: integer;
begin
Infinite:= 1;
Infinite:= Infinite + 1;
end;
приведет к зацикливанию программы, в то время как вызов
function Finite:integer;
begin
Result:= 1;
Result:= Result + 1;
end;
всегда будет возвращать двойку. Значение Result при входе в функцию не инициализируется и до первого присваивания не определено.
Имеется вoзмoжнocть иcпользoвaть подпрограммы с одинаковыми именами, но отличающиеся количеством и типом параметров. В заголовках таких подпрограмм должно быть указано зарезервированное слово overload. При вызове таких подпрограмм компилятор анализирует количество и тип фактических параметров и вызывает соответствующую им подпрограмму.
|
|
Вариантный тип
В практике программирования часто встречаются ситуации, когда передаваемое переменной значение может иметь неизвестный заранее тип данных. Иногда в такой ситуации можно воспользоваться приведением значений к строковому типу. Однако это не всегда возможно. В таких случаях можно воспользоваться специальным типом Variant.
Для представления значений в этом типе отводится 16 байт. В них содержится код типа и само значение или указатель на значение.
Тип вариант позволяет хранить данные любых типов, за исключением структурных типов. При инициализации переменной-варианта ей присваивается значение UnAsigned. Для получения информации о типе хранимых данных можно использовать специальную функцию VarType.
Var X: Variant;
Х:=25;
Х:=43.56;
X:=true;