Duck Typing là gì?
Duck typing là gì
-
Duck typing là 1 tính năng đặc trưng của 1 số ngôn ngữ động (dynamic language) như Ruby, Python, ...
-
Tên gọi bắt nguồn từ duck test với tư tưởng:
"If it walks like a duck and quacks like a duck, it must be a duck".
Nôm na là nếu ta thấy 1 con chó lại biết bơi như con vịt thì hẳn đấy là con vịt -
Nó làm cho việc hướng đối tượng trở nên uyển chuyển và linh hoạt hơn bằng cách xem object có cài gì và có thể làm gì để quyết định hành vi của nó, hơn là tường minh rõ loại đối tượng nào với việc kế thừa từ 1 class hoặc implement từ 1 interface.
-
Hãy cùng xét đến ví dụ để hiểu rõ hơn:
def test(foo)
puts foo.sound
end
class Animal
def sound
'foo'
end
end
class Duck
def sound
'quack'
end
end
class Cat
def sound
'meow'
end
end
class Dog < Animal
def sound
'barf'
end
end
class Fish
def swim
'swim'
end
end
test(Duck.new) # quack
test(Cat.new) # meow
test(Dog.new) # barf
Test(Fish.new) # NoMethodError: undefined method `sound' for #<Fish:0x007fbed3070438>
- Có thể thấy với hàm test dù với Duck, Cat, Dog là 3 đối tượng hoàn toàn khác nhau nhưng vẫn hoạt động bình thường. Ngược lại với Fish, do không biết
sound
nên đã xảy ra lỗi.
Lưu ý
- Duck typing khiến dynamic language trở nên linh hoạt trong việc đa hình và trừu tượng hoá để phù hợp tính chất lập trình hướng đối tượng
- Do các function với các tham số không định kiểu tường minh có thể dẫn đến những đoạn code trở nên khó hiểu, đặc biết là đối với dự án nhiều người tham gia.