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

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
اصلاح نویسه‌های عربی، اصلاح فاصلهٔ مجازی، اصلاح ارقام، اصلاح سجاوندی، اصلاح املا
خط ۱: خط ۱:
{{سیستم نوع}}
{{سیستم نوع}}


در [[برنامه‌نویسی رایانه‌ای|برنامه نویسی رایانه ای]]، [[زبان برنامه‌نویسی|زبان های برنامه نویسی]] معمولا به صورت محاوره ای به دو نوع، بر اساس آنکه «سیستم نوع زبان» '''نوع‌دهی نیرومند''' {{به انگلیسی|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}} ('''نوع دهی سست''' {{به انگلیسی|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>


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


== تاریخچه ==
== تاریخچه ==
در ۱۹۷۴، لیسکو {{به انگلیسی|Liskov}} و زایلز {{به انگلیسی|Zilles}} یک زبان وابسته زیاد به نوع را تعریف کردند به این عنوان که «هر گاه یک شیء از فراخوانی یک تابع به تابع صدا زده شده عبور کرد، نوعش باید سازگار با نوع تعریف‌شده در تابع صدا زده شده باشد.»<ref>{{cite paper | id = {{citeseerx|10.1.1.136.3043}} | title = Programming with abstract data types | first1 = B | last1 = Liskov | first2 = S | last2 = Zilles | journal = ACM Sigplan Notices | year = 1974}}</ref>
در ۱۹۷۴، لیسکو {{به انگلیسی|Liskov}} و زایلز {{به انگلیسی|Zilles}} یک زبان وابسته زیاد به نوع را تعریف کردند به این عنوان که «هر گاه یک شیء از فراخوانی یک تابع به تابع صدا زده شده عبور کرد، نوعش باید سازگار با نوع تعریف‌شده در تابع صدا زده شده باشد.»<ref>{{cite paper | id = {{citeseerx|10.1.1.136.3043}} | title = Programming with abstract data types | first1 = B | last1 = Liskov | first2 = S | last2 = Zilles | journal = ACM Sigplan Notices | year = 1974}}</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>
جکسون در اینباره نوشته‌است، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوع‌ها توضیح می‌دهد.»<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.[پیوند مرده]