Duck typing
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ą”.
Duck typing zazwyczaj wykorzystuje się w dynamicznych językach programowania takich jak Python, Ruby, Groovy czy JavaScript. W językach z typowaniem statycznym częściej stosuje się polimorfizm.
Przykłady
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)