Duck typing

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez Paweł Ziemian BOT (dyskusja | edycje) o 23:54, 17 kwi 2020. Może się ona znacząco różnić od aktualnej wersji.

Duck typing – rozpoznawanie typu obiektu nie na podstawie deklaracji, ale przez badanie metod udostępnionych przez obiekt. Technika ta wywodzi się z powiedzenia: „jeśli chodzi jak kaczka i kwacze jak kaczka, to musi być kaczką”.

Kacze typowanie znajduje najczęściej zastosowanie podczas rzutowania typów i przeciążania operatorów, w którym do określenia, czy obiekt może stworzyć wyrażenie z obiektem innego typu wykorzystywana jest odpowiednia metoda konwersji lub obsługi.

Przykłady

Metoda ta wykorzystywana jest przede wszystkim w językach programowania Python, Ruby, Groovy, Scala, Smalltalk oraz Go.

Ruby

class Kaczka
  def kwacz
    puts "kwa kwa"
  end
end

# kwacząca klasa Slowik
# wyposażona w taką samą metodę jak klasa Kaczka
class Slowik
  def kwacz
    puts "fiu fiu"
  end
end

# funkcja wywołująca metodę kwacz() tylko wtedy,
# gdy przekazywany jej jako argument obiekt ją posiada
def kwacz_kaczuszko(k)
  k.kwacz if k.respond_to? :kwacz
end

# wywołanie funkcji kwakania na obiekcie typu Kaczka
kwacz_kaczuszko(Kaczka.new)

# wywołanie kwakania na obiekcie typu Słowik
# "słowik kwacze jak kaczka, więc musi to być kaczka"
kwacz_kaczuszko(Slowik.new)