Метода Преоптерећење и задани параметри у Делфима

Функције и поступци су важан део Делфи језика. Почевши од Делпхи 4, Делпхи нам омогућава рад са функцијама и процедурама које подржавају задате параметре (израда параметри опционално) и дозвољава да две или више рутина имају исто име, али раде као потпуно различити рутине.

Погледајмо како Преоптерећење и задани параметри могу вам помоћи да код будете бољи.

Преоптерећење

Једноставно речено, преоптерећење изјављује више од једне рутине с истим називом. Преоптерећење нам омогућава да имамо више рутина које имају исти назив, али са различитим бројем параметара и врста.

Као пример, размотримо следеће две функције:

{Преоптерећена рутина мора бити проглашена. са директивом о преоптерећењу}функција СумАсСтр (а, б: цели број): низ; преоптерећење; започети Резултат: = ИнтТоСтр (а + б); крај; функција СумАсСтр (а, б: проширено; Бројке: цео број): низ; преоптерећење; започети Резултат: = ФлоатТоСтрФ (а + б, ффФикед, 18, цифре); крај; 

Ове декларације стварају две функције, обе назване СумАсСтр, које узимају различит број параметара и две су различите врсте. Када назовемо преоптерећену рутину, преводилац мора бити у стању да каже коју рутину желимо да позовемо.

instagram viewer

На пример, СумАсСтр (6, 3) позива прву функцију СумАсСтр, јер су њени аргументи целобројни.

Белешка: Делпхи ће вам помоћи да одаберете праву имплементацију уз помоћ попуњавања кода и увида у код.

С друге стране, размотрите ако покушамо да назовемо функцију СумАсСтр на следећи начин:

 СомеСтринг: = СумАсСтр (6.0,3.0) 

Добићемо грешку која гласи: „не постоји преоптерећена верзија „СумАсСтр“ која се може позвати овим аргументима."То значи да треба укључити и параметар Дигитс који се користи за одређивање броја цифара након децималне тачке.

Белешка: За писање преоптерећених рутина постоји само једно правило, а то је да се преоптерећена рутина мора разликовати у најмање једној врсти параметра. Уместо тога, тип повратка се не може користити за разликовање две рутине.

Две јединице - једна рутинска

Рецимо да имамо једну рутину у јединици А, а јединица Б користи јединицу А, али изјављује рутину са истим називом. Декларацији у јединици Б није потребна директива о преоптерећењу - требало би користити назив јединице А да бисмо квалификовали позиве на А верзију рутине из јединице Б.

Размислите о нечему овако:

јединица Б;... користи А;... процедура РоутинеНаме; започети Резултат: = А.РутинеНаме; крај; 

Алтернатива коришћењу преоптерећених рутина је употреба заданих параметара, што обично резултира са мање кода за писање и одржавање.

Подразумевани / опционални параметри

Да бисмо поједноставили неке изјаве, можемо дати задану вредност за параметар функције или процедуре, а рутину можемо назвати са или без параметра, чинећи га опционалним. Да бисте пружили подразумевану вредност, завршите декларацију параметра симболом једнаким (=), а затим константним изразом.

На пример, с обзиром на декларацију

функција СумАсСтр (а, б: проширено; Бројке: цели број = 2): низ; 

следећи позиви функција су еквивалентни.

 СумАсСтр (6.0, 3.0) 
 СумАсСтр (6.0, 3.0, 2) 

Белешка: Параметри са заданим вредностима морају се појавити на крају листе параметара и морају их пренијети по вриједности или као цонст. Референтни (вар) параметар не може имати задану вредност.

Када позивамо рутине с више од једног заданог параметра, не можемо прескочити параметре (као у ВБ):

функција СкипДефПарамс (вар А: стринг; Б: интегер = 5, Ц: боолеан = Фалсе): боолеан;... // овај позив генерише поруку о грешци
ЦантБе: = СкипДефПарамс ('делпхи',, тачно); 

Преоптерећење заданим параметрима

Када користите и функцију или поступак преоптерећења и заданих параметара, немојте уводити двосмислене рутинске декларације.

Размотрите следеће изјаве:

процедура ДоИт (А: продужено; Б: цели број = 0); преоптерећење; процедура ДоИт (А: продужено); преоптерећење; 

Позив у ДоИт поступак као што је ДоИт (5.0), не компајлира се. Због заданог параметра у првом поступку ова изјава може назвати обе процедуре, јер је немогуће одредити који поступак се позива.

instagram story viewer