Przeciążanie metody Delphi i parametry domyślne

Jak przeciążanie i parametry domyślne działają w Delphi

Przeciążone funkcje





Funkcje i procedury są ważną częścią języka Delphi. Począwszy od Delphi 4, Delphi pozwala nam pracować z funkcjami i procedurami, które obsługują parametry domyślne (co sprawia, że ​​parametry są opcjonalne) i pozwala dwóm lub więcej procedurom mieć identyczną nazwę, ale działać jako zupełnie różne procedury.

Zobaczmy, jak przeciążenie i parametry domyślne mogą pomóc w lepszym kodowaniu.



Przeciążenie

Mówiąc najprościej, przeciążanie to deklarowanie więcej niż jednej procedury o tej samej nazwie. Przeciążanie pozwala nam mieć wiele procedur o tej samej nazwie, ale o różnej liczbie parametrów i typów.

Jako przykład rozważmy następujące dwie funkcje:



|_+_|

Te deklaracje tworzą dwie funkcje, obie nazywane SumAsStr, które przyjmują różną liczbę parametrów i są dwóch różnych typów. Kiedy wywołujemy przeciążoną procedurę, kompilator musi być w stanie powiedzieć, którą procedurę chcemy wywołać.

Na przykład SumAsStr(6, 3) wywołuje pierwszą funkcję SumAsStr, ponieważ jej argumenty są wartościami całkowitymi.

Notatka: Delphi pomoże Ci wybrać odpowiednią implementację za pomocą uzupełniania kodu i wglądu w kod.

Z drugiej strony rozważmy, czy spróbujemy wywołać funkcję SumAsStr w następujący sposób:



|_+_|

Otrzymamy komunikat o błędzie: „ nie ma przeciążonej wersji „SumAsStr”, którą można wywołać za pomocą tych argumentów. ' Oznacza to, że powinniśmy również uwzględnić parametr Cyfry używany do określenia liczby cyfr po przecinku.

Notatka: Podczas pisania przeciążonych procedur istnieje tylko jedna reguła, a to oznacza, że ​​przeciążona procedura musi różnić się co najmniej jednym typem parametru. Zamiast tego typ zwracany nie może być użyty do rozróżnienia dwóch procedur.



Dwie jednostki — jedna rutyna

Powiedzmy, że mamy jedną procedurę w jednostce A, a jednostka B używa jednostki A, ale deklaruje procedurę o tej samej nazwie. Deklaracja w jednostce B nie wymaga dyrektywy przeciążenia - powinniśmy użyć nazwy jednostki A, aby zakwalifikować wywołania do wersji procedury z jednostki B.

Rozważ coś takiego:



|_+_|

Alternatywą dla używania przeciążonych procedur jest użycie parametrów domyślnych, co zwykle skutkuje mniejszą ilością kodu do napisania i utrzymania.

Parametry domyślne/opcjonalne

Aby uprościć niektóre instrukcje, możemy podać domyślną wartość parametru funkcji lub procedury i możemy wywołać procedurę z parametrem lub bez niego, czyniąc ją opcjonalną. Aby podać wartość domyślną, zakończ deklarację parametru symbolem równości (=), po którym następuje wyrażenie stałe.



Na przykład, biorąc pod uwagę deklarację

|_+_|

następujące wywołania funkcji są równoważne.

|_+_| |_+_|

Notatka: Parametry z wartościami domyślnymi muszą znajdować się na końcu listy parametrów i muszą być przekazywane przez wartość lub jako const. Parametr referencyjny (var) nie może mieć wartości domyślnej.

Podczas wywoływania procedur z więcej niż jednym parametrem domyślnym nie możemy pominąć parametrów (jak w VB):

|_+_|

Przeciążanie parametrami domyślnymi

W przypadku używania zarówno przeciążania funkcji lub procedury, jak i parametrów domyślnych, nie należy wprowadzać niejednoznacznych deklaracji procedur.

Rozważ następujące deklaracje:

|_+_|

Wywołanie procedury DoIt, takiej jak DoIt(5.0), nie kompiluje się. Ze względu na domyślny parametr w pierwszej procedurze, ta instrukcja może wywołać obie procedury, ponieważ nie można powiedzieć, która procedura ma zostać wywołana.