آزمون مرغابی

بندانگشتی
A mallard, walking like a duck (with ducklings)
A mallard, quacking like a duck
آزمون مرغابی نمونه‌ای از استدلال استقرایی است با این بیان که: «اگر چیزی شبیه اردک به نظر می‌رسد، مثل اردک شنا می‌کند و صدای اردک درمی‌آورد، آن چیز احتمالا اردک است»
این آزمون در مواردی بکار می‌رود که بتوان شی نامعلومی را به وسیله علایم ذاتی آن شناسایی کرد. همچنین جزء مباحثات بغرنج در مورد اینکه هر چیزی الزاما آنطور که بنظر می‌رسد نیست نیز محسوب می‌شود.
از این منطق در برنامه سازی کامپیوتر نیز، در زبان‌هایی مانند پایتون و روبی استفاده می‌شود که به آن نوع یابی مرغابی می‌گویند.
تاریخچه
شاعر اهل ایندیانا جیمز ویتکام رایلی (۱۸۴۹–۱۹۱۶) احتمالا با کلمات بازی کرده زمانی که نوشته است:
زمانی که پرنده‌ای را می‌بینم که مثل اردک راه می‌رود، مثل اردک شنا می‌کند و مثل اردک کواک کواک می‌کند، من این پرنده را اردک می‌نامم.
جمله‌بندی رایج‌تر عبارت احتمالا مدت‌ها بعد توسط امیل میزی، خزامه دار کارگران متحد خودرو، در یک گردهمایی کار در ۱۹۴۶، زمانی که او فردی را به کمونیست بودن متهم کرد، به وجود آمد.
من نمی‌توانم اثبات کنم که شما کمونیست هستید اما زمانی که پرنده‌ای را می‌بینم که مثل اردک کواک کواک می‌کند، مثل اردک راه می‌رود، مثل اردک شنا می‌کند، پر و پاهای پرده‌دار دارد و با اردک‌ها رفت‌وآمد می‌کند، من قطعا فرض می‌کنم که این پرنده اردک است.
عبارت بعدا توسط ریچارد کانینگام پترسن، سفیر ایالات متحده در گواتمالا، طی جنگ سرد رواج پیدا کرد. زمانی که او این عبارت را برای متهم کردن دولت جاکوب آربنز گازمن به کمونیست بودن استفاده کرد. پترسون دلیل خود را به این شکل ارائه کرد:
فرض کنید پرنده‌ای را درحال راه رفتن در حیاط یک مدرسه ببینید. این پرنده هیج نشانه‌ای ندارد که بگوید یک مرغابی است. اما پرنده به طور قطع شبیه مرغابی است. او درون برکه می‌رود و شما متوجه می‌شوید که او مثل مرغابی شنا می‌کند. سپس منقارش را باز می‌کند و مثل یک مراغابی کواک کواک می‌کند. این‌بار شما یقینا یه این نتیجه می‌رسید که این پرنده یک مرغابی است، چه برچسبی داشته باشد یا نه.
مرجع بعدی آزمون مرغابی کاردینال ریچارد کوشینگ است که از این عبارت در سال ۱۹۶۴ در اشاره به فیدل کاسترو استفاده کرد.
داگلاس آدامز از این عبارت در کتاب خود، آژانس جامع کارآگاهی دریک جتنلی تقلید کرده‌است.
اگر مثل اردک باشد و مثل اردک کواک کواک کند، ما باید حداقل احتمال دهیم که یک پرنده کوچک آبزی از خانواده اردک‌ها داریم.
نوع یابی مرغابی
در برنامه‌نویسی کامپیوتر، برای اطمینان از نوع یک متغیر از نوع‌یابی مرغابی استفاده می‌شود. این مستلزم آن است که کنترل نوع متغیر به زمان اجرا به تعویق بیفتد و با استفاده از نوع‌یابی پویا یا بازتابی اجرا شود.
هدف نوع‌یابی مرغابی این است که مناسب بودن نوع متغیر را برای استفاده در جای مشخص، به وسیله روش‌های خاص تعیین کند. اما در نوع‌یابی عادی، مناسب بودن فقط با نوع شی مشخص می‌شود.
نمونه مفهومی
شبه‌کد زیر را درنظر بگیرید:
function calculate(a, b, c) => return (a + b) * c
example1 = calculate (1, 2, 3)
example2 = calculate (1, 2, 3, 2)
example3 = calculate (apples , and oranges, , 3)
print to_string example1
print to_string example2
print to_string example3
در مثال بالا، متغیرها می‌توانند از هر نوعی باشند و تا زمانی که توابع "+" و "*" برای آن شی‌ها معنادار باشد مشکلی پیش نخواهد آمد. خروجی چنین کدی در زبان پایتون با روبی به شکل زیر خواهد بود:
9
1, 2, 3, 1, 2, 3
apples and oranges, apples and oranges, apples and oranges,
نوع‌یابی مرغابی می‌توانند مثل چندریختی کار کند، اما بدون وراثت. تنها محدودیتی که تابع calculate اعمال می‌کند این است که ورودی‌ها اعمال "+" و "*" را پیاده‌سازی کنند.