نوع‌دهی قوی و ضعیف: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
InternetArchiveBot (بحث | مشارکت‌ها)
نجات ۰ منبع و علامت‌زدن ۱ به‌عنوان مرده.) #IABot (v2.0
بر اساس مقاله ی انگلیسی اصلاح گردید.
خط ۱: خط ۱:
{{سیستم نوع}}
{{سیستم نوع}}


در [[برنامه‌نویسی رایانه‌ای|برنامه نویسی رایانه ای]]، [[زبان برنامه‌نویسی|زبان های برنامه نویسی]] معمولا به صورت محاوره ای به دو نوع، بر اساس آنکه سیستم نوع زبان، '''نوع‌دهی نیرومند''' {{به انگلیسی|strongly typed}}، یا '''نوع‌دهی کم‌زور''' {{به انگلیسی|weakly typed}} ('''نوع دهی سست''' {{به انگلیسی|loosely typed}}) باشد، طبقه بندی می شود<ref name=":0">{{Cite journal|date=2020-02-18|title=Strong and weak typing|url=https://en.wikipedia.org/w/index.php?title=Strong_and_weak_typing&oldid=941453382|journal=Wikipedia|language=en}}</ref>.
'''وابستگی زیاد به نوع''' {{به انگلیسی|Strongly-typed}} و '''وابستگی کم به نوع''' {{به انگلیسی|Weakly-typed}} به دو نوع [[سیستم انواع]] {{به انگلیسی|Type System}} در زبان های برنامه نویسی اطلاق می شوند.

معمولا یک زبان نوع‌دار نیرومند، دارای قواعد نوع دهی سختگیرانه تری در [[زمان کامپایل]] می باشند که به معنی ضمنی آن است که خطاها و استثناها به احتمال بیشتر در مدت کامپایل رخ می دهند. [[زبان های نوع دهی پویا]] (که در آن بررسی نوع در [[زمان اجرا]] رخ می دهد) نیز می توانند نوع دهی نیرومند باشند. بیشتر این قواعد روی انتساب متغیر ها تاثیر می گذارند، مقادیر و فراخوانی تابع را برمی گردانند<ref name=":0" />.

یک زبان نوع دهی کم‌زور قواعد نوع دهی سست تری دارد، و می تواند نتایج غیر قابل پیش بینی ایجاد کند، یا می تواند تبدیل نوع ضمنی در زمان اجرا انجام دهد.<ref>{{cite web|url=http://www.cs.cornell.edu/|title=CS1130. Transition to OO programming. – Spring 2012 --self-paced version|date=2005|publisher=Cornell University, Department of Computer Science|archiveurl=http://www.cs.cornell.edu/courses/CS1130/2012sp/1130selfpaced/module1/module1part4/strongtyping.htm|archivedate=2005|accessdate=2015-11-23}}</ref> یک مفهوم مرتبط اما متفاوت «[[نوع دهی پنهان]]» است<ref name=":0" />.


== تاریخچه ==
== تاریخچه ==
خط ۷: خط ۱۱:
جکسون در اینباره نوشته‌است، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوع‌ها توضیح می‌دهد.»<ref>{{cite journal | title = Parallel processing and modular software construction | first1 = K. | last1 = Jackson | journal = Lecture Notes in Computer Science | year = 1977 | volume = 54 | pages = 436–443 | doi = 10.1007/BFb0021435 | url = http://www.springerlink.com/content/wq02703237400667/ | series = Lecture Notes in Computer Science | isbn = 3-540-08360-X }}{{پیوند مرده|date=فوریه ۲۰۲۰ |bot=InternetArchiveBot }}</ref>
جکسون در اینباره نوشته‌است، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوع‌ها توضیح می‌دهد.»<ref>{{cite journal | title = Parallel processing and modular software construction | first1 = K. | last1 = Jackson | journal = Lecture Notes in Computer Science | year = 1977 | volume = 54 | pages = 436–443 | doi = 10.1007/BFb0021435 | url = http://www.springerlink.com/content/wq02703237400667/ | series = Lecture Notes in Computer Science | isbn = 3-540-08360-X }}{{پیوند مرده|date=فوریه ۲۰۲۰ |bot=InternetArchiveBot }}</ref>


== تعاریف «زیاد» یا «کم» ==
== تعاریف «نیرومند» یا «کم‌زور» ==
در تصمیم گیری های طراحی زبان، به شواهدی و مدارکی از نوع دهی «نیروند» یا «کم‌زور» ارجاع دارند. در واقع خیلی از این ها به صورت دقیق تر به صورت وجود یا فقدان «[[ایمنی نوع]]»، «[[ایمنی حافظه]]»، «[[سیستم انواع#بررسی گونه‌ای ایستا|بررسی نوع ایستا]]» یا «[[سیستم انواع#بررسی گونه‌ای پویا|بررسی نوع پویا]]» شناخته می شوند.
{{بخش-خرد}}

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


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

نسخهٔ ‏۲۰ فوریهٔ ۲۰۲۰، ساعت ۱۶:۱۷

در برنامه نویسی رایانه ای، زبان های برنامه نویسی معمولا به صورت محاوره ای به دو نوع، بر اساس آنکه سیستم نوع زبان، نوع‌دهی نیرومند (به انگلیسی: 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 2005. Retrieved 2015-11-23.
  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.[پیوند مرده]