0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

duck typing چیست و چه زبان های از این سیستم typing پشتیبانی می کنند؟

2 پاسخ

+1 امتیاز
قبل توسط (1.2هزار امتیاز)

duck به معنی اردک است.

duck typing یک اصطلاح در زبانهای جدید مانند ruby است. فرض کنید دو پرنده در دو جعبه در بسته در مقابل شما بگذارند و از شما بپرسند درون این جعبه ها چه پرنده ای وجود دارد. شما جواب خواهید داد اردک. وقتی از شما بپرسند از کجا فهمیدی؟ شما جواب خواهید داد زیرا صدای اردک (quack) را از درون جعبه می شنوم!

پس شما از روی یکی از رفتار (function) های آن پرنده(class) در مورد نوع آن قضاوت کردید.

کامپایلر یا مفسر این زبانها نیز همین قانون را قبول دارد. پس اگر دو کلاس A و B هر دو دارای متد ()x باشند، آنگاه

a.equals(b)

در زبان جاوا این امکان با نام و پیاده سازی دیگری وجود داشته است. آن هم چیزی نیست جز مفهوم Interface. اگر دو کلاس کاملا مختلف، Interface اردک که دارای متد ()quack است را implement کرده باشند، کامپایلر هر دو آنها را اردک می شناسد.

در زبانهایی که duck typing را پشتیبانی می کنند نیازی به تعریف موجودیتی مثل اینترفیس نیست و صرف وجود یک متد خاص در دو کلاس، آنها را هم خانواده می کند.

قبل توسط (1.1هزار امتیاز)
زبان برنامه نویسی جاوا از duck typing پشتیبانی نمی کند ولی با استفاده از reflection می توان کارهایی شبیه duck typing انجام داد و Interface ها فقط قسمتی از مزایای duck typing را بهمراه دارند.
قبل توسط (1.2هزار امتیاز)
+1
هدف اصلی dock typing پشتیبانی منعطف تر از مفهومی است که در جاوا توسط اینترفیس ها در اختیار برنامه نویس قرار می گیرد. آن هدف چیزی نیست جز شرکت یک شی درعملیات بدون در نظر گرفتن نوع اصلی آن شی، و اکتفا کردن به رفتار یا خاصیتی از آن شی که برای آن عملیات لازم است. مهم است که یک قابلیت در زبان به چه شکلی وجود دارد. بله با reflection می شود در جاوا همچین چیزی را شبیه سازی کرد، ولی این کار برای برنامه نویس بسیار زمان بر است و به طور کامل هم نمی شود این قابلیت را در جاوا داشت.
0 امتیاز
قبل توسط (1.1هزار امتیاز)

duck typing یک مدل از dynamic typing است  که در زبانهای برنامه نویسی dynamic type (مانند python) پشتیبانی می شود، البته زبان های برنامه نویسی static type نیز می توانند با اعمال تغییراتی از این قابلیت پشتیبانی کنند (مانند کلمه کلیدی dynamic در زبان C# نسخه 4 به بعد).

duck typing به فراخوانی متدها یا فیلدهای یک شئ در زمان کدنویسی گویند در حالی که مطمئن نیستیم در زمان اجرا آن متد یا فیلد در آن شئ وجود دارد یا خیر! زبان های برنامه نویسی static type اجازه اینگونه فراخوانی ها را نمی دهند و compile error می دهند در حالی که برای مثال در زبان پایتون می توان این کار را بصورت زیر انجام داد:

try:
    mallard.quack()
except (AttributeError, TypeError):
    print("mallard can't quack()")

و یا در زبان C#:

  int GetLength(dynamic obj)
  {
    return obj.Length;
  }
 
  GetLength(new int[] { 1, 2, 3 }); 

سوالات مشابه

...