نوع‌دهی قوی و ضعیف

در برنامه‌نویسی رایانه‌ای، زبان‌های برنامه‌نویسی معمولاً به صورت محاوره‌ای به دو نوع، بر اساس آنکه «سیستم نوع زبان» نوع‌دهی قوی یا نوع‌دهی نیرومند (به انگلیسی: strongly typed)،و نوع‌دهی ضعیف یا نوع‌دهی کم‌زور (به انگلیسی: weakly typed) (نوع دهی سست (به انگلیسی: loosely typed)) باشد، طبقه‌بندی می‌شود.[۱]

معمولاً یک زبان نوع‌دار نیرومند، دارای قواعد نوع دهی سختگیرانه‌تری در زمان کامپایل می‌باشند که به معنی ضمنی آن است که خطاها و استثناها به احتمال بیشتر در مدت کامپایل رخ می‌دهند. زبان‌های نوع‌دهی پویا (که در آن بررسی نوع در زمان اجرا رخ می‌دهد) نیز می‌توانند نوع دهی نیرومند باشند. بیشتر این قواعد روی انتساب متغیرها تأثیر می‌گذارند، همچنین قواعد می‌توانند روی مقادیر برگردانده شده و فراخوانی تابع تأثیر بگذارند.[۱]

یک زبان نوع دهی کم‌زور قواعد نوع دهی سست‌تری دارد، و می‌تواند نتایج غیرقابل پیش‌بینی ایجاد کند، یا می‌تواند تبدیل نوع ضمنی در زمان اجرا انجام دهد.[۲] یک مفهوم مرتبط اما متفاوت «نوع‌دهی پنهان» است.[۱]

تاریخچه ویرایش

در ۱۹۷۴، لیسکو (به انگلیسی: Liskov) و زایلز (به انگلیسی: Zilles) یک زبان وابسته زیاد به نوع را تعریف کردند به این عنوان که «هر گاه یک شیء از فراخوانی یک تابع به تابع صدا زده شده عبور کرد، نوعش باید سازگار با نوع تعریف‌شده در تابع صدا زده شده باشد.»[۳] جکسون در اینباره نوشته‌است، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوع‌ها توضیح می‌دهد.»[۴]

تعاریف «نیرومند» یا «کم‌زور» ویرایش

تصمیم‌گیری‌های طراحی زبان، به شواهدی و مدارکی از نوع دهی «نیروند» یا «کم‌زور» رجوع می‌کنند. در واقع خیلی از این تصمیم‌ها به صورت دقیق‌تر به صورت وجود یا فقدان «ایمنی نوع»، «ایمنی حافظه»، «بررسی نوع ایستا» یا «بررسی نوع پویا» باید رجوع شوند.

«نوع دهی نیروند» معمولاً به استفاده از «انواع» زبان‌های برنامه‌نویسی برای اخذ «نامتغیر» های کد، و اطمینان از صحت آنها، و بیرون سازی قطعی کلاس‌های مشخص و خطاهای برنامه‌نویسی ارجاع دارد؛ بنابراین برای دستیابی به این اهداف، نظام‌های «نوع‌دهی نیرومند» زیادی وجود دارد.

جستارهای وابسته ویرایش

منابع ویرایش

  1. ۱٫۰ ۱٫۱ ۱٫۲ "Strong and weak typing". Wikipedia (به انگلیسی). 2020-02-18.
  2. "CS1130. Transition to OO programming. – Spring 2012 --self-paced version". Cornell University, Department of Computer Science. 2005. Archived from the original on 19 February 2020. Retrieved 2015-11-23.{{cite web}}: نگهداری یادکرد:ربات:وضعیت نامعلوم پیوند اصلی (link)
  3. Liskov, B; Zilles, S (1974). "Programming with abstract data types". ACM Sigplan Notices. CiteSeerX: 10.1.1.136.3043.
  4. Jackson, K. (1977). "Parallel processing and modular software construction". Lecture Notes in Computer Science. Lecture Notes in Computer Science. 54: 436–443. doi:10.1007/BFb0021435. ISBN 3-540-08360-X.[پیوند مرده]