Перегрузка метода и параметры по умолчанию в Delphi

Функции и процедуры являются важной частью языка Delphi. Начиная с Delphi 4, Delphi позволяет нам работать с функциями и процедурами, которые поддерживают параметры по умолчанию (делая параметры необязательные), и позволяет двум или более подпрограммам иметь одинаковое имя, но работать как совершенно разные Подпрограммы.

Давайте посмотрим, как перегрузка и параметры по умолчанию могут помочь вам лучше кодировать.

перегрузка

Проще говоря, перегрузка объявляет более одной подпрограммы с одинаковым именем. Перегрузка позволяет нам иметь несколько подпрограмм с одинаковым именем, но с разным количеством параметров и типов.

В качестве примера рассмотрим следующие две функции:

{Перегруженные подпрограммы должны быть объявлены. с директивой перегрузки}функция SumAsStr (a, b: целое число): строка; перегрузка; начать Результат: = IntToStr (a + b); конец; функция SumAsStr (a, b: расширенный; Цифры: целое число): строка; перегрузка; начать Результат: = FloatToStrF (a + b, ffFixed, 18, Digits); конец; 
instagram viewer

Эти объявления создают две функции, которые называются SumAsStr, которые принимают разное количество параметров и имеют два разных типа. Когда мы вызываем перегруженную подпрограмму, компилятор должен иметь возможность определить, какую подпрограмму мы хотим вызвать.

Например, SumAsStr (6, 3) вызывает первую функцию SumAsStr, поскольку ее аргументы имеют целочисленные значения.

Замечания: Delphi поможет вам выбрать правильную реализацию с помощью дополнения кода и понимания кода.

С другой стороны, рассмотрим, пытаемся ли мы вызвать функцию SumAsStr следующим образом:

 SomeString: = SumAsStr (6.0,3.0) 

Мы получим ошибку, которая гласит: «нет перегруженной версии SumAsStr, которая может быть вызвана с этими аргументами.«Это означает, что мы также должны включить параметр Digits, используемый для указания количества цифр после десятичной точки.

Замечания: При написании перегруженных подпрограмм существует только одно правило: перегруженная подпрограмма должна отличаться как минимум одним типом параметра. Вместо этого тип возврата не может использоваться для различения двух подпрограмм.

Две единицы - одна рутина

Допустим, у нас есть одна подпрограмма в модуле A, а в модуле B используется модуль A, но объявляется подпрограмма с тем же именем. Объявление в модуле B не нуждается в директиве перегрузки - мы должны использовать имя модуля A, чтобы квалифицировать вызовы к версии подпрограммы A из модуля B.

Рассмотрим что-то вроде этого:

единица измерения B;... использования A;... процедура RoutineName; начать Результат: = A.RoutineName; конец; 

Альтернативой использованию перегруженных подпрограмм является использование параметров по умолчанию, что обычно приводит к меньшему количеству кода для написания и обслуживания.

Стандартные / Необязательные параметры

Чтобы упростить некоторые операторы, мы можем дать значение по умолчанию для параметра функции или процедуры, и мы можем вызвать подпрограмму с параметром или без него, что делает его необязательным. Чтобы предоставить значение по умолчанию, завершите объявление параметра символом равенства (=), за которым следует постоянное выражение.

Например, с учетом декларации

функция SumAsStr (a, b: расширенный; Цифры: целое число = 2): строка; 

следующие вызовы функций эквивалентны.

 SumAsStr (6,0, 3,0) 
 SumAsStr (6,0, 3,0, 2) 

Замечания: Параметры со значениями по умолчанию должны находиться в конце списка параметров и должны передаваться по значению или как const. Параметр reference (var) не может иметь значение по умолчанию.

При вызове подпрограмм с более чем одним параметром по умолчанию мы не можем пропустить параметры (как в VB):

функция SkipDefParams (вар Строка; B: целое число = 5, C: логическое значение = False): логическое значение;... // этот вызов генерирует сообщение об ошибке
CantBe: = SkipDefParams ('delphi',, True); 

Перегрузка с параметрами по умолчанию

При использовании перегрузки функций или процедур и параметров по умолчанию не вводите двусмысленные объявления рутин.

Рассмотрим следующие объявления:

процедура DoIt (A: расширенный; B: целое число = 0); перегрузка; процедура DoIt (A: расширенный); перегрузка; 

Вызов процедуры DoIt, такой как DoIt (5.0), не компилируется. Из-за параметра по умолчанию в первой процедуре этот оператор может вызывать обе процедуры, поскольку невозможно определить, какая процедура должна быть вызвана.

instagram story viewer