نوعدهی قوی و ضعیف: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
اصلاح نویسههای عربی، اصلاح فاصلهٔ مجازی، اصلاح ارقام، اصلاح سجاوندی، اصلاح املا |
||
خط ۱: | خط ۱: | ||
{{سیستم نوع}} |
{{سیستم نوع}} |
||
در [[برنامهنویسی رایانهای |
در [[برنامهنویسی رایانهای]]، [[زبان برنامهنویسی|زبانهای برنامهنویسی]] معمولاً به صورت محاورهای به دو نوع، بر اساس آنکه «سیستم نوع زبان» '''نوعدهی نیرومند''' {{به انگلیسی|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>{{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 |
جکسون در اینباره نوشتهاست، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوعها توضیح میدهد.»<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) یک زبان وابسته زیاد به نوع را تعریف کردند به این عنوان که «هر گاه یک شیء از فراخوانی یک تابع به تابع صدا زده شده عبور کرد، نوعش باید سازگار با نوع تعریفشده در تابع صدا زده شده باشد.»[۳] جکسون در اینباره نوشتهاست، «در یک زبان وابسته زیاد به نوع ناحیه هر داده یک نوع متفاوت دارد و هر فرایند الزامات ارتباطش را به شروط این نوعها توضیح میدهد.»[۴]
تعاریف «نیرومند» یا «کمزور»
تصمیمگیریهای طراحی زبان، به شواهدی و مدارکی از نوع دهی «نیروند» یا «کمزور» رجوع میکنند. در واقع خیلی از این تصمیمها به صورت دقیقتر به صورت وجود یا فقدان «ایمنی نوع»، «ایمنی حافظه»، «بررسی نوع ایستا» یا «بررسی نوع پویا» باید رجوع شوند.
«نوع دهی نیروند» معمولاً به استفاده از «انواع» زبانهای برنامهنویسی برای اخذ «نامتغیر» های کد، و اطمینان از صحت آنها، و بیرون سازی قطعی کلاسهای مشخص و خطاهای برنامهنویسی ارجاع دارد؛ بنابراین برای دستیابی به این اهداف، نظامهای «نوعدهی نیرومند» زیادی وجود دارد.
جستارهای وابسته
منابع
- ↑ ۱٫۰ ۱٫۱ ۱٫۲ "Strong and weak typing". Wikipedia (به انگلیسی). 2020-02-18.
- ↑ "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.
- ↑ Liskov, B; Zilles, S (1974). "Programming with abstract data types". ACM Sigplan Notices. CiteSeerX: 10.1.1.136.3043.
- ↑ 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.[پیوند مرده]