Przeciążanie metody Delphi i parametry domyślne
Jak przeciążanie i parametry domyślne działają w Delphi
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.