Przejdź do zawartości

AutoIt/Funkcje polimorficzne

Z Wikibooks, biblioteki wolnych podręczników.

Co to jest polimorfizm?

[edytuj]

Polimorfizm (z gr. polymorfismos - wielopostaciowość) - mechanizmy pozwalające programiście używać wartości, zmiennych, operatorów i podprogramów na kilka różnych sposobów.

W AutoIt polimorfizm dotyczy w zasadzie tylko funkcji, chociaż jest jeden polimorficzny operator. To operator =, który w zależności od kontekstu jest operatorem przypisania lub relacji.

Funkcje polimorficzne

[edytuj]

Funkcje polimorficzne, to takie funkcje, które mogą operować na argumentach różnego typu.

Sposób działania funkcji jest zależny od typu przekazanych do niej argumentów.

Tak więc funkcja o takiej samej nazwie będzie realizowała inne działanie gdy argumenty będą np. stringami, a inne gdy będą liczbami.

Tworzenie funkcji polimorficznych w Autoit

[edytuj]

Ponieważ Autoit nie kontroluje typu danych przekazywanych do funkcji, bardzo łatwo można tworzyć funkcje polimorficzne.

Do funkcji przekazujemy argumenty dowolnego typu, a ich typ rozpoznajemy wewnątrz funkcji. Dla każdego rozpoznanego typu należy utworzyć osobny kod.

Prześledźmy to na przykładzie funkcji podwojenie. Obsługuje ona argumenty trzech typów:

- dla argumentu liczbowego zwraca jego wartość pomnożoną przez 2

- dla stringu zwraca nowy string będący połączeniem dwóch stringów argumentu

- dla tablicy jednowymiarowej zwraca inną tablicę jednowymiarową o podwójnej długości, nowe komórki mają powielone wartości ze starych

Tak więc zamiast trzech funkcji podwojenie_liczby, podwojenie_stringu i podwojenie_tablicy, mamy tylko jedną.

Wprawdzie wewnętrznie istnieją trzy implementacje polecenia podwojenie , ale nazwanie ich wspólną nazwą tworzy wygodny abstrakcyjny interfejs niezależny od typu przetwarzanej wartości.

Przykład funkcji polimorficznej:

#include<array.au3>

MsgBox(0,"Liczba:",podwojenie(2))
MsgBox(0,"Liczba:",podwojenie("Ala ma Asa"))
Dim $aArray[3]=[1, 2, 3]
$aArray = podwojenie($aArray)
_ArrayDisplay($aArray)

;funkcja polimorficzna "podwojenie"
Func podwojenie ($vVar)
   Select
      Case IsNumber($vVar)
         Return 2*$vVar
      Case IsString($vVar)
         Return $vVar&$vVar
      Case IsArray($vVar)
         $iSize=UBound($vVar)
         ReDim $vVar[2*$iSize]
         For $i=0 to $iSize-1
            $vVar[$i+$iSize]=$vVar[$i]
         Next
        Return $vVar
   EndSelect
EndFunc