منو
 صفحه های تصادفی
زیرگروه خارج‌قسمتی
انواع روشهای مقابله با باد و پیشروی باد رفتها
بیومکانیک تنیس
هدانبرژیت
قابلیت انبساطی رگ
نهان دانگان
توصیه مسور بن مخرمه برای انصراف امام حسین علیه السلام از سفر به کوفه
قرایولک
سرمایه داری
سهولت جداشدن اتمهای هیدروژن
 کاربر Online
503 کاربر online
تاریخچه ی: انواع داده ای

تفاوت با نگارش: 5

Lines: 1-132Lines: 1-129
-V{maketoc} +||V{maketoc}||
^@#16:
 !تعریف !تعریف
-در ((علم کامپیوتر))، یک __نوع داده ای__، نام یا برچسبی برای مجموعه ای از مقادیر و بعضی عملگرها است که می تواند روی همان دسته از مقادیر اجرا شود. ((زبان های برنامه نویسی)) به صورت ضمنی یا به طور صریح یک یا چند نوع داده ای را پشتیبانی می کنند. این نوع داده ای ممکن است به صورت اضطرارهای پویا یا استاتیک روی ((برنامه)) هایی عمل کنند که می تواند در زبان داده شده نوشته شود.
+{*در ((علم کامپیوتر))، یک __نوع داده ای__، نام یا برچسبی برای مجموعه ای از مقادیر و بعضی عملگرها است که می تواند روی همان دسته از مقادیر اجرا شود. ((زبان های برنامه نویسی)) به صورت ضمنی یا به طور صریح یک یا چند نوع داده ای را پشتیبانی می کنند. این نوع داده ای ممکن است به صورت اضطرارهای پویا یا استاتیک روی ((برنامه)) هایی عمل کنند که می تواند در زبان داده شده نوشته شود.*}
---
 !اساس و پایه !اساس و پایه
-هدف اساسی نوع دهی، دادن بعضی معانی به چیزی است که فقط متشکل از تعدادی بیت است. انواع معمولاً همراه با مقادیری در ((حافظه)) و یا ((اشیاء))ای مثل ((متغیر))ها هستند. چون هر مقدار، مجموعه ای از بیت هاست، در سخت افزار تفاوتی بین ((آدرس های حافظه))، ((کد دستورالعمل))، ((کاراکتر))ها، ((اعداد صحیح)) و ((اعداد ممیز شناور)) وجود ندارد. انواع به شما می گوید که چگونه با این بیت ها رفتار کنید. +{*هدف اساسی نوع دهی، دادن بعضی معانی به چیزی است که فقط متشکل از تعدادی بیت است. انواع معمولاً همراه با مقادیری در ((حافظه)) و یا ((اشیاء))ای مثل ((متغیر))ها هستند. چون هر مقدار، مجموعه ای از بیت هاست، در سخت افزار تفاوتی بین ((آدرس های حافظه))، ((کد دستورالعمل))، ((کاراکتر))ها، ((اعداد صحیح)) و ((اعداد ممیز شناور)) وجود ندارد. انواع به شما می گوید که چگونه با این بیت ها رفتار کنید.
 توابع اصلی که سیستم های نوعی تامین می کنند عبارتند از: توابع اصلی که سیستم های نوعی تامین می کنند عبارتند از:
 * __امنیت __- انواع امکان کد کردن بعضی از عملگرها را که در یک متن ویژه نمی توانند مجاز باشند، فراهم می کند. این مکانیزم حداکثر اشتباه های برنامه نویسان را به دنبال دارد. مثلاً عبارت 'Hello, Wikipedia" / 3 غیر مجاز است چون یک ((رشته)) نمی تواند تقسیم بر یک ((عدد صحیح)) شود. همان طوری که گفته شد نوع دهی قوی امنیت زیادی دارد. اما امنیت کامل را گارانتی نمی کند. * __امنیت __- انواع امکان کد کردن بعضی از عملگرها را که در یک متن ویژه نمی توانند مجاز باشند، فراهم می کند. این مکانیزم حداکثر اشتباه های برنامه نویسان را به دنبال دارد. مثلاً عبارت 'Hello, Wikipedia" / 3 غیر مجاز است چون یک ((رشته)) نمی تواند تقسیم بر یک ((عدد صحیح)) شود. همان طوری که گفته شد نوع دهی قوی امنیت زیادی دارد. اما امنیت کامل را گارانتی نمی کند.
 * __بهینه سازی__ - چک نوع استاتیک می تواند اطلاعات مفیدی برای کامپایلر تولید کند. مثلاً، اگریک نوع بگوید که یک ارزش با مضربی از 4 مرتب شده، دسترسی حافظه می تواند بهینه گردد. * __بهینه سازی__ - چک نوع استاتیک می تواند اطلاعات مفیدی برای کامپایلر تولید کند. مثلاً، اگریک نوع بگوید که یک ارزش با مضربی از 4 مرتب شده، دسترسی حافظه می تواند بهینه گردد.
 * __سند سازی__- استفاده از انواع در زبان ها ((سند سازی)) از کد را بهبود می بخشد. مثلاً، تعریف یک متغیر وقتی از نوع ویژه ای باشد، چگونگی استفاده از متغیر را مشخص می کند. در حقیقت، بسیاری از زبان ها به برنامه نویسان اجازه ی استفاده از انواع معنایی را با نشات از ((انواع اولیه))، می دهند؛ که یا از عناصر یکی یا بیشتر از انواع اولیه تشکیل شده اند و یا به عنوان نامی دیگر، برای نام های متغیرهای اولیه شکل گرفته اند.  * __سند سازی__- استفاده از انواع در زبان ها ((سند سازی)) از کد را بهبود می بخشد. مثلاً، تعریف یک متغیر وقتی از نوع ویژه ای باشد، چگونگی استفاده از متغیر را مشخص می کند. در حقیقت، بسیاری از زبان ها به برنامه نویسان اجازه ی استفاده از انواع معنایی را با نشات از ((انواع اولیه))، می دهند؛ که یا از عناصر یکی یا بیشتر از انواع اولیه تشکیل شده اند و یا به عنوان نامی دیگر، برای نام های متغیرهای اولیه شکل گرفته اند.
 * __انتزاع__ - انواع به برنامه نویسان امکان تفکر در مورد برنامه در سطحی بالاتر را بدون درد سر پیاده سازی سطح پایین می دهند. مثلاً، برنامه نویسان می توانند رشته ها را به عنوان مقادیر به جای فقط آرایه ای از بیت ها تلقی کنند. * __انتزاع__ - انواع به برنامه نویسان امکان تفکر در مورد برنامه در سطحی بالاتر را بدون درد سر پیاده سازی سطح پایین می دهند. مثلاً، برنامه نویسان می توانند رشته ها را به عنوان مقادیر به جای فقط آرایه ای از بیت ها تلقی کنند.
  * __واحدی بودن__ - انواع به برنامه نویسان امکان بیان واسطی بین دو زیر سیستم را می دهد و تعاریف مورد نیاز برای عمل پذیری درونی زیر سیستم ها را محلی می کند و از تناقض ها هنگام ارتباط زیر سیستم ها جلوگیری می کند.  * __واحدی بودن__ - انواع به برنامه نویسان امکان بیان واسطی بین دو زیر سیستم را می دهد و تعاریف مورد نیاز برای عمل پذیری درونی زیر سیستم ها را محلی می کند و از تناقض ها هنگام ارتباط زیر سیستم ها جلوگیری می کند.
 نوعاً هر مقدار مربوط به یک نوع ویژه است اگر چه یک نوع می تواند بیشتر از یک ((زیر نوع)) داشته باشد. موجودیت های دیگر، مانند اشیاء، واحدها، کانال های ارتباطی، وابستگی ها یا حتی خود انواع می توانند مربوط به یک نوع باشند. به عنوان مثال، نوع داده ای، نوع یک ارزش است، یک ((کلاس)) نوع یک شیء است. یک ''سیستم نوعی''، که در هر زبان برنامه نویسی ویژه است، راه های برنامه های نوعی را که اجازه ی رفتار دارند، تصریح می کند و رفتار خارج از این قوانین را غیر قانونی اعلام می کند. یک ((سیستم اثر)) نوعاً بهتر از یک سیستم نوعی حلاجی شده است. نوعاً هر مقدار مربوط به یک نوع ویژه است اگر چه یک نوع می تواند بیشتر از یک ((زیر نوع)) داشته باشد. موجودیت های دیگر، مانند اشیاء، واحدها، کانال های ارتباطی، وابستگی ها یا حتی خود انواع می توانند مربوط به یک نوع باشند. به عنوان مثال، نوع داده ای، نوع یک ارزش است، یک ((کلاس)) نوع یک شیء است. یک ''سیستم نوعی''، که در هر زبان برنامه نویسی ویژه است، راه های برنامه های نوعی را که اجازه ی رفتار دارند، تصریح می کند و رفتار خارج از این قوانین را غیر قانونی اعلام می کند. یک ((سیستم اثر)) نوعاً بهتر از یک سیستم نوعی حلاجی شده است.
-مطالعه ی سیستم های نوعی به عنوان ((نظریه نوع)) با هدف ((حساب lambda)) شناخته می شود.
+مطالعه ی سیستم های نوعی به عنوان ((نظریه مدل|نظریه نوع)) با هدف ((حساب lambda)) شناخته می شود.*}
---
 !چک انواع !چک انواع
-عمل تغییر و وارد کردن اضطرار انواع چک کردن نوع نامیده می شود. این چک ممکن است در ((زمان کامپایل)) اتفاق افتد (چک استاتیک) و یا در ((زمان اجرا)) (چک دینامیک). چک نوع استاتیک یک وظیفه ی اولیه ((تحلیل معنایی)) است که توسط ((کامپایلر)) انجام می شود. اگر قوانین نوعی تحمیل شود (یعنی تنها به تبدیل نوعی اتوماتیک که اطلاعات را از دست نمی دهد امکان اجرا داده شود)، نوع دارقوی نامیده می شود و در غیر این صورت نوع دار ضعیف است.
+{*عمل تغییر و وارد کردن اضطرار انواع چک کردن نوع نامیده می شود. این چک ممکن است در ((زمان کامپایل)) اتفاق افتد (چک استاتیک) و یا در ((زمان اجرا)) (چک دینامیک). چک نوع استاتیک یک وظیفه ی اولیه ((تحلیل معنایی)) است که توسط ((کامپایلر)) انجام می شود. اگر قوانین نوعی تحمیل شود (یعنی تنها به تبدیل نوعی اتوماتیک که اطلاعات را از دست نمی دهد امکان اجرا داده شود)، نوع دارقوی نامیده می شود و در غیر این صورت نوع دار ضعیف است.*}
---
 !نوع دهی استاتیک و پویا !نوع دهی استاتیک و پویا
-در ((حوزه دینامیک))، چک نوع معمولاً در ((زمان اجرا)) انجام می شود چون متغیرها می توانند به طور متناوب مطابق با مسیر ((اجرا)) نوع دار شوند. سیستم های نوعی استاتیک برای حوزه ی دینامیک معمولاً نیاز به نشان دادن صریح محتوای مسیر اجرا و امکان وابستگی انواع به آن دارند. بنابراین به نظر می رسد که نیاز به یک سیستم نوعی پرزحمت یا ناچیز باشد که به درستی کار کند.

((سی))، ((جاوا))، ((ML)) و ((Haskell)) نوع دار استاتیک هستند، در حالیکه ((Lisp))، ((Perl))، ((Visual Basic))، ((Ruby)) و ((Python)) به صورت پویا نوع دار شده اند. نوع دار کردن دینامیک اغلب با فراخوانی ((زبان های متنی)) و دیگر محیط های ((توسعه کاربردی سریع)) بهم پیوسته اند. انواع دینامیک اغلب در (( زبان های تفسیر شده)) استفاده می شوند، در حالی که انواع استاتیک در (( زبان های کامپایل شده)) به کار می روند. پیوند (( زبان های نوع دار شده و نوع دار نشده)) را ببینید.
+{*در ((حوزه دینامیک))، چک نوع معمولاً در ((زمان اجرا)) انجام می شود چون متغیرها می توانند به طور متناوب مطابق با مسیر ((اجرا)) نوع دار شوند. سیستم های نوعی استاتیک برای حوزه ی دینامیک معمولاً نیاز به نشان دادن صریح محتوای مسیر اجرا و امکان وابستگی انواع به آن دارند. بنابراین به نظر می رسد که نیاز به یک سیستم نوعی پرزحمت یا ناچیز باشد که به درستی کار کند.
#@
@#16:

((زبان برنامه نویسی C| C))، ((جاوا))، ((ML)) و ((زبان برنامه نویسی Haskell|Haskell)) نوع دار استاتیک هستند، در حالیکه ((Lisp))، ((Perl))، ((Visual Basic))، ((Ruby)) و ((Python)) به صورت پویا نوع دار شده اند. نوع دار کردن دینامیک اغلب با فراخوانی ((زبان های متنی)) و دیگر محیط های ((توسعه کاربردی سریع)) بهم پیوسته اند. انواع دینامیک اغلب در (( زبان های تفسیر شده)) استفاده می شوند، در حالی که انواع استاتیک در (( زبان های کامپایل شده)) به کار می روند. پیوند (( زبان های نوع دار شده و نوع دار نشده)) را ببینید.
 ((نوع دار کردن اردکی)) یک راه جالب برای توصیف نوع دار کردن (دینامیک) زبان های متنی است که نوع یک ارزش را حدس می زند. این روش به وسیله Dave Thomas در انجمن ((Ruby)) ارائه شد، مقدمه آن اینچنین است "(ارجاع به یک ارزش) اگر شبیه یک اردک راه می رود و شبیه به یک اردک صدا می کند بنابراین یک اردک است."  ((نوع دار کردن اردکی)) یک راه جالب برای توصیف نوع دار کردن (دینامیک) زبان های متنی است که نوع یک ارزش را حدس می زند. این روش به وسیله Dave Thomas در انجمن ((Ruby)) ارائه شد، مقدمه آن اینچنین است "(ارجاع به یک ارزش) اگر شبیه یک اردک راه می رود و شبیه به یک اردک صدا می کند بنابراین یک اردک است."
 برای فهمیدن اینکه چگونه چک نوعی کار می کند مثال ((شبه دستورالعمل)) زیر را نگاه کنید: برای فهمیدن اینکه چگونه چک نوعی کار می کند مثال ((شبه دستورالعمل)) زیر را نگاه کنید:
-^ 
  (var x; / / (1  (var x; / / (1
  (x = 5; / / (2  (x = 5; / / (2
  (x = "hi "; / / (3  (x = "hi "; / / (3
-^ 
 در این مثال، (1) نام x را تعریف می کند؛ (2) مقدار ((صحیح)) 5 را به x می دهد؛ و (3) مقدار ((رشته ای)) "hi " را به x می دهد. در بیشتر سیستم های نوع دار استاتیک قطعه کد بالا غیر مجاز است، چون (2) و (3) دو مقدار با نوع متناقض به x می دهند. در این مثال، (1) نام x را تعریف می کند؛ (2) مقدار ((صحیح)) 5 را به x می دهد؛ و (3) مقدار ((رشته ای)) "hi " را به x می دهد. در بیشتر سیستم های نوع دار استاتیک قطعه کد بالا غیر مجاز است، چون (2) و (3) دو مقدار با نوع متناقض به x می دهند.
 در مقابل، یک سیستم نوع دار دینامیک به برنامه بالا اجازه ی اجرا می دهد چون نام x نیاز ندارد که نوع سازگاری داشته باشد. پیاده سازی یک زبان نوع دار دینامیک خطاهای مربوط به بکار بردن ارزش ها را - "خطاهای نوعی"- در زمانی که ((عبارت)) اشتباه اجرا می شود، می گیرد. به عبارت دیگر، نوع دار کردن دینامیک خطاها را در حین اجرای برنامه می گیرد. یک پیاده سازی نوعی از نوع دار کردن دینامیک، همه ی ارزش های برنامه که با یک نوع، قالب بندی شده اند را حفظ می کند و قالب نوعی را قبل از اینکه هر مقداری در عملیات استفاده شود چک می کند. به عنوان مثال: در مقابل، یک سیستم نوع دار دینامیک به برنامه بالا اجازه ی اجرا می دهد چون نام x نیاز ندارد که نوع سازگاری داشته باشد. پیاده سازی یک زبان نوع دار دینامیک خطاهای مربوط به بکار بردن ارزش ها را - "خطاهای نوعی"- در زمانی که ((عبارت)) اشتباه اجرا می شود، می گیرد. به عبارت دیگر، نوع دار کردن دینامیک خطاها را در حین اجرای برنامه می گیرد. یک پیاده سازی نوعی از نوع دار کردن دینامیک، همه ی ارزش های برنامه که با یک نوع، قالب بندی شده اند را حفظ می کند و قالب نوعی را قبل از اینکه هر مقداری در عملیات استفاده شود چک می کند. به عنوان مثال:
-^ 
  (var x = 5; / / (1  (var x = 5; / / (1
  (var y = "hi " ; / / (2  (var y = "hi " ; / / (2
  (x + y; / / (3  (x + y; / / (3
-^ 
 در این قطعه کد، (1) مقدار 5 را به x می دهد؛ (2) مقدار "hi " را به y می دهد؛ و (3) سعی در جمع x و y دارد. در زبان نوع دار دینامیک، ارزشی که به x محدود می شود باید از نوع ((صحیح)) باشد و ارزشی که به y محدود می شود باید از نوع ((رشته)) باشد.  در این قطعه کد، (1) مقدار 5 را به x می دهد؛ (2) مقدار "hi " را به y می دهد؛ و (3) سعی در جمع x و y دارد. در زبان نوع دار دینامیک، ارزشی که به x محدود می شود باید از نوع ((صحیح)) باشد و ارزشی که به y محدود می شود باید از نوع ((رشته)) باشد.
 وقتی که برنامه سعی در اجرای خط 3 دارد، پیاده سازی زبان قالب های نوعی عدد صحیح و رشته را چک می کند و می فهمد که عمل + (جمع) برای این دو نوع تعریف نشده است و پیغام خطا می دهد. وقتی که برنامه سعی در اجرای خط 3 دارد، پیاده سازی زبان قالب های نوعی عدد صحیح و رشته را چک می کند و می فهمد که عمل + (جمع) برای این دو نوع تعریف نشده است و پیغام خطا می دهد.
-بعضی از زبان های نوع دار استاتیک یک "درپشتی" در زبان دارند که امکان نوشتن کدی را به برنامه نویسان می دهد که چک نوعی استاتیک ندارد. مثلاً ((C)) و ((جاوا)) برای انجام این کار از "((casts))" استفاده می کنند.

حضور نوع استاتیک در زبان برنامه نویسی دلالت بر غیبت مکانیزم های نوعی دینامیک نمی کند. مثلاً جاوا به صورت استاتیک نوع دار شده، اما عملیات ویژه ای نیاز به پشتیبانی تست های نوعی زمان اجرا دارد، که شکلی از نوع دار کردن دینامیک است. پیوند((زبان برنامه نویسی)) را برای بحث درباره ی تقابل بین نوع دینامیک و استاتیک ببی
ند.
+بعضی از زبان های نوع دار استاتیک یک "درپشتی" در زبان دارند که امکان نوشتن کدی را به برنامه نویسان می دهد که چک نوعی استاتیک ندارد. مثلاً ((زبان برنامه نویسی C|C)) و ((جاوا)) برای انجام این کار از "((casts))" استفاده می کنند.
 +حضور نوع استاتیک در زبان برنامه نویسی دلالت بر غیبت مکانیزم های نوعی دینامیک نمی کند. مثلاً جاوا به صورت استاتیک نوع دار شده، اما عملیات ویژه ای نیاز به پشتیبانی تست های نوعی زمان اجرا دارد، که شکلی از نوع دار کردن دینامیک است. پیوند((زبان برنامه نویسی)) را برای بحث درباره ی تقابل بین نوع دینامیک و استاتیک ببیند.*}
 +---
 !چک نوعی دینامیک و استاتیک درعمل !چک نوعی دینامیک و استاتیک درعمل
-انتخاب بین نوع دهی استاتیک و پویا نیاز به تعادل بین محاسن آنها برای به دست آوردن نتیجه ی مطلوب دارد. بسیاری از برنامه نویسان یکی را به دیگری ترجیح می دهند؛ تا حدی که زبان هایی که از سیستم نامطلوب پیروی می کنند غیر قابل استفاده یا فلج شوند.

نوع دهی استاتیک خطاها را به صورت قابل اعتماد و در زمان کامپایل می یابد. این ویژگی قابلیت اطمینان برنامه ی تحویل داده شده را افزایش می دهد. اگرچه، برنامه نویسان برسر اینکه خطاهای نوعی معمول چگونه اند وبنابراین، چه نسبتی از خطاهایی که نوشته شده اند به وسیله ی نوع دهی استاتیک گرفته می شوند توافقی ندارند. نوع دهی استاتیک این باور را ایجاد می کند که برنامه هایی که از لحاظ نوع چک می شوند قابل اعتمادند، در حالی که نوع دهی دینامیک از کدهای توزیع شده که قابلیت اعتماد آنها اثبات شده و بانک های اطلاعاتی که خطا را کاهش می دهند حمایت می کند. ارزش نوع دهی استاتیک وقتی که قدرت سیستم نوعی افزایش می یابد زیاد می شود. حمایت از زبان هایی مانند ((ML)) و ((Haskell)) این پیشنهاد را طراحی کرده که همه ی خطاها را می توان خطای نوعی در نظر گرفت، اگر نوع هایی که در برنامه استفاده شده اند به اندازه ی کافی توسط برنامه نویس، خوب تعریف شده باشند یا به وسیله کامپایلر استنباط شده باشند.
+{*انتخاب بین نوع دهی استاتیک و پویا نیاز به تعادل بین محاسن آنها برای به دست آوردن نتیجه ی مطلوب دارد. بسیاری از برنامه نویسان یکی را به دیگری ترجیح می دهند؛ تا حدی که زبان هایی که از سیستم نامطلوب پیروی می کنند غیر قابل استفاده یا فلج شوند.
 +نوع دهی استاتیک خطاها را به صورت قابل اعتماد و در زمان کامپایل می یابد. این ویژگی قابلیت اطمینان برنامه ی تحویل داده شده را افزایش می دهد. اگرچه، برنامه نویسان برسر اینکه خطاهای نوعی معمول چگونه اند وبنابراین، چه نسبتی از خطاهایی که نوشته شده اند به وسیله ی نوع دهی استاتیک گرفته می شوند توافقی ندارند. نوع دهی استاتیک این باور را ایجاد می کند که برنامه هایی که از لحاظ نوع چک می شوند قابل اعتمادند، در حالی که نوع دهی دینامیک از کدهای توزیع شده که قابلیت اعتماد آنها اثبات شده و بانک های اطلاعاتی که خطا را کاهش می دهند حمایت می کند. ارزش نوع دهی استاتیک وقتی که قدرت سیستم نوعی افزایش می یابد زیاد می شود. حمایت از زبان هایی مانند ((ML)) و ((زبان برنامه نویسی Haskell|Haskell)) این پیشنهاد را طراحی کرده که همه ی خطاها را می توان خطای نوعی در نظر گرفت، اگر نوع هایی که در برنامه استفاده شده اند به اندازه ی کافی توسط برنامه نویس، خوب تعریف شده باشند یا به وسیله کامپایلر استنباط شده باشند.
 +#@
 +@#16:
 نوع دهی استاتیک منجر می شود که کد کامپایل شده سریع تر اجرا شود. وقتی کامپایلر نوع های داده ای درست که مورد استفاده اند را می شناسد، می تواند کد ماشین را که کار درست انجام می دهد تولید کند. در ضمن، کامپایلرها در زبان های نوع دار استاتیک میان برها را راحت تر می فهمند. بعضی از زبان های نوع دار دینامیک مانند ((Common Lisp)) امکان تعاریف نوعی اختیاری برای بهینه کردن به این منظور را می دهند. نوع دهی استاتیک این ویژگی را گسترش می دهد. پیوند ((بهینه سازی)) را ببینید. نوع دهی استاتیک منجر می شود که کد کامپایل شده سریع تر اجرا شود. وقتی کامپایلر نوع های داده ای درست که مورد استفاده اند را می شناسد، می تواند کد ماشین را که کار درست انجام می دهد تولید کند. در ضمن، کامپایلرها در زبان های نوع دار استاتیک میان برها را راحت تر می فهمند. بعضی از زبان های نوع دار دینامیک مانند ((Common Lisp)) امکان تعاریف نوعی اختیاری برای بهینه کردن به این منظور را می دهند. نوع دهی استاتیک این ویژگی را گسترش می دهد. پیوند ((بهینه سازی)) را ببینید.
 زبان های نوع دار استاتیک که فاقد استنباط نوعی هستند - مانند جاوا- نیاز دارند که برنامه نویسان انواعی را که آنها برای استفاده در توابع و متودها نیاز دارند، تالیف کنند. این عمل به عنوان مستند سازی مضاعف برای برنامه است، و کامپایلر به برنامه نویسان اجازه ی نادیده گرفتن همزمانی را نمی دهد. اگرچه، یک زبان می تواند بدون نیاز به تعاریف نوعی، نوع دار استاتیک شود، بنابراین، این نتیجه ی نوع دهی استاتیک نیست. نوع دهی استاتیک امکان ترکیب کتابخانه ها را می دهد، کتابخانه ها احتمال کمی دارد که به وسیله ی کاربران به طور تصادفی بد استفاده شوند. این امکان می تواند به عنوان مکانیزم مضاعف برای ابلاغ مقاصد گسترش دهندگان کتابخانه استفاده شود.  زبان های نوع دار استاتیک که فاقد استنباط نوعی هستند - مانند جاوا- نیاز دارند که برنامه نویسان انواعی را که آنها برای استفاده در توابع و متودها نیاز دارند، تالیف کنند. این عمل به عنوان مستند سازی مضاعف برای برنامه است، و کامپایلر به برنامه نویسان اجازه ی نادیده گرفتن همزمانی را نمی دهد. اگرچه، یک زبان می تواند بدون نیاز به تعاریف نوعی، نوع دار استاتیک شود، بنابراین، این نتیجه ی نوع دهی استاتیک نیست. نوع دهی استاتیک امکان ترکیب کتابخانه ها را می دهد، کتابخانه ها احتمال کمی دارد که به وسیله ی کاربران به طور تصادفی بد استفاده شوند. این امکان می تواند به عنوان مکانیزم مضاعف برای ابلاغ مقاصد گسترش دهندگان کتابخانه استفاده شود.
 سیستم نوعی استاتیک استتفاده از ترکیبات زبان قدرتمند را بیشتر از زبان های با قدرت پایین تر ایجاب می کند. این موضوع امکان استفاده از ترکیبات قوی را سخت می کند و بنابراین بار انتخاب "ابزار درست برای مسئله" را به دوش برنامه نویس می اندازد، که ممکن است متمایل به استتفاده از ابزار قدرتمند موجود شود. انتخاب ابزار قوی ممکن است باعث اجرا، قابلیت اعتماد یا درستی مضاعف مسئله شود، چون ((محدودیت های نظری)) روی ماهیت ها وجود دارد که می تواند از ساختارهای زبان قوی نشأت گرفته باشد. مثلاً، استفاده ی یک بعدی از ((بازگشت)) یا ((متغیرهای سراسری)) ممکن است سبب اثرات زیان آور مستند شده، شود. سیستم نوعی استاتیک استتفاده از ترکیبات زبان قدرتمند را بیشتر از زبان های با قدرت پایین تر ایجاب می کند. این موضوع امکان استفاده از ترکیبات قوی را سخت می کند و بنابراین بار انتخاب "ابزار درست برای مسئله" را به دوش برنامه نویس می اندازد، که ممکن است متمایل به استتفاده از ابزار قدرتمند موجود شود. انتخاب ابزار قوی ممکن است باعث اجرا، قابلیت اعتماد یا درستی مضاعف مسئله شود، چون ((محدودیت های نظری)) روی ماهیت ها وجود دارد که می تواند از ساختارهای زبان قوی نشأت گرفته باشد. مثلاً، استفاده ی یک بعدی از ((بازگشت)) یا ((متغیرهای سراسری)) ممکن است سبب اثرات زیان آور مستند شده، شود.
 نوع دهی دینامیک به ترکیبات امکان غیر مجاز شدن در بعضی از سیستم های نوعی استاتیک را می دهد. مثلاً، توابع eval که داده های دلخواه را اجرا می کنند به عنوان کد امکان اجرا دارند (اگر چه نوع دهی در طول کد ارزیابی شده ممکن است استاتیک باشد). در ضمن، نوع دهی دینامیک کد قدیمی را با نمونه ی اصلی تطبیق می دهد، مثل امکان استفاده از رشته به جای ساختار داده ای. نوع دهی دینامیک به ترکیبات امکان غیر مجاز شدن در بعضی از سیستم های نوعی استاتیک را می دهد. مثلاً، توابع eval که داده های دلخواه را اجرا می کنند به عنوان کد امکان اجرا دارند (اگر چه نوع دهی در طول کد ارزیابی شده ممکن است استاتیک باشد). در ضمن، نوع دهی دینامیک کد قدیمی را با نمونه ی اصلی تطبیق می دهد، مثل امکان استفاده از رشته به جای ساختار داده ای.
 نوع دهی دینامیک به اشکال زداها امکان عملکرد بهتر را می دهد. در عمل اشکال زدا می تواند کد را به صورت دلخواه تغییر دهد و به برنامه اجازه ی ادامه ی اجرا را بدهد. برنامه نویسان گاهی درزبان های دینامیک در اشکال زدا برنامه می نویسند و بنابراین سیکل ویرایش - کامپایل - تست - اشکال زدایی کوتاهتری دارند. اگر چه نیاز به استفاده از اشکال زداها به عنوان نشانه ای از طراحی یا پیشرفت مسائل پردازش ملاحظه شده است. نوع دهی دینامیک به اشکال زداها امکان عملکرد بهتر را می دهد. در عمل اشکال زدا می تواند کد را به صورت دلخواه تغییر دهد و به برنامه اجازه ی ادامه ی اجرا را بدهد. برنامه نویسان گاهی درزبان های دینامیک در اشکال زدا برنامه می نویسند و بنابراین سیکل ویرایش - کامپایل - تست - اشکال زدایی کوتاهتری دارند. اگر چه نیاز به استفاده از اشکال زداها به عنوان نشانه ای از طراحی یا پیشرفت مسائل پردازش ملاحظه شده است.
-نوع دهی دینامیک به کامپایلر امکان اجرای سریع تر را می دهد، چون چک کمتری برای اجرا و کد کمتری برای ملاقات دوباره، وقتی چیزی تغییر می کند وجود دارد. درضمن سیکل ویرایش - کامپایل - تست - اشکال زدایی را کاهش می دهد.
+نوع دهی دینامیک به کامپایلر امکان اجرای سریع تر را می دهد، چون چک کمتری برای اجرا و کد کمتری برای ملاقات دوباره، وقتی چیزی تغییر می کند وجود دارد. درضمن سیکل ویرایش - کامپایل - تست - اشکال زدایی را کاهش می دهد.*}
---
 !نوع دهی قوی و ضعیف !نوع دهی قوی و ضعیف
-زبان های نوع دار'' قوی'' به عمل امکان موفقیت روی آرگومان هایی که نوع اشتباه دارند نمی دهد. یک مثال از عدم حضور نوع دهی قوی تبدیل نوع داده در C است اگر شما نوع یک ارزش را در C تغییر دهید، نه تنها کامپایلر نیاز به کد جدید دارد بلکه انتظار می رود زمان اجرا نیز این امکان را برای کد فراهم کند. این به کد C امکان فشردگی و سرعت می دهد اما اشکال زدایی را مشکل می کند. +{*زبان های نوع دار" قوی" به عمل امکان موفقیت روی آرگومان هایی که نوع اشتباه دارند نمی دهد. یک مثال از عدم حضور نوع دهی قوی تبدیل نوع داده در C است اگر شما نوع یک ارزش را در C تغییر دهید، نه تنها کامپایلر نیاز به کد جدید دارد بلکه انتظار می رود زمان اجرا نیز این امکان را برای کد فراهم کند. این به کد C امکان فشردگی و سرعت می دهد اما اشکال زدایی را مشکل می کند.
-گاهی جمله ی '' زبان امن'' به طور عمومی برای توصیف زبان هایی که عملیات تعریف نشده را اجازه نمی دهند اتفاق افتد، به کار می رود. مثلاً یک زبان امن ((مرزهای آرایه ای)) را نیز چک می کند. +گاهی جمله ی " زبان امن" به طور عمومی برای توصیف زبان هایی که عملیات تعریف نشده را اجازه نمی دهند اتفاق افتد، به کار می رود. مثلاً یک زبان امن ((مرزهای آرایه ای)) را نیز چک می کند.
 ''نوع دهی ضعیف'' یعنی انواع به طور ضمنی هنگام استفاده تغییر یابند. ''نوع دهی ضعیف'' یعنی انواع به طور ضمنی هنگام استفاده تغییر یابند.
 می خواهیم مثال قبل را ببینیم: می خواهیم مثال قبل را ببینیم:
-^ +
  (var x = 5; / / (1  (var x = 5; / / (1
  (var y = "hi " ; / / (2  (var y = "hi " ; / / (2
  (x + y; / / (3  (x + y; / / (3
- ^ +
 اگر کد بالا در یک زبان نوع دار ضعیف مثل ((Visual Basic)) نوشته شده بود، کد به طور کامل اجرا می شد و نتیجه ی "5hi " را می داد. عدد 5 به رشته ی "5" تبدیل شده تا عمل انجام شود. اگر چه، مشکلاتی با این تبدیلات در زبان های نوع دار ضعیف وجود دارد. مثلاً آیا نتیجه ی کد روبرو 9 است یا "54"؟ اگر کد بالا در یک زبان نوع دار ضعیف مثل ((Visual Basic)) نوشته شده بود، کد به طور کامل اجرا می شد و نتیجه ی "5hi " را می داد. عدد 5 به رشته ی "5" تبدیل شده تا عمل انجام شود. اگر چه، مشکلاتی با این تبدیلات در زبان های نوع دار ضعیف وجود دارد. مثلاً آیا نتیجه ی کد روبرو 9 است یا "54"؟
-^ +#@
@#16:
  ;var x = 5   ;var x = 5
  ;"var y = "4   ;"var y = "4
  ;x + y   ;x + y
-^ 
-بسیاری معتقدند که نوع دهی ضعیف، تمرین بد را ترویج می کند اما به برنامه نویسان استفاده ی صریح از تبدیل نوعی را یاد نمی دهد. 
 +بسیاری معتقدند که نوع دهی ضعیف، تمرین بد را ترویج می کند اما به برنامه نویسان استفاده ی صریح از تبدیل نوعی را یاد نمی دهد.*}
 +---
 !انواع و چند ریختی !انواع و چند ریختی
-سیستم نوعی به عملیات امکان اجرا با تکیه بر محتوای نوعی را می دهد. به عنوان مثال، در عبارت حسابی، a + b اگر ''a'' و ''b'' ((عدد صحیح)) باشند عمل جمع صحیح انجام می شود. اگر نوع حقیقی باشد، جمع ممیز شناور انجام می شود. در ((generic)) ها نوع ارزش ها مشخص می کند که کدام کد باید اجرا شود. همچنین ببیند: ((نوع چند ریختی))
+{*سیستم نوعی به عملیات امکان اجرا با تکیه بر محتوای نوعی را می دهد. به عنوان مثال، در عبارت حسابی، a + b اگر a و b ((عدد صحیح)) باشند عمل جمع صحیح انجام می شود. اگر نوع حقیقی باشد، جمع ممیز شناور انجام می شود. در ((generic)) ها نوع ارزش ها مشخص می کند که کدام کد باید اجرا شود. همچنین ببیند: ((نوع چند ریختی))*}
---
 !تعریف صریح و غیر صحیح و استنباط !تعریف صریح و غیر صحیح و استنباط
-بسیاری از سیستم های نوعی استاتیک، مثل C و جاوا، نیاز به ''تعریف های نوعی'' دارند: برنامه نویسان باید به طور صریح هر متغیر را با نوع ویژه ای پیوند دهند. بقیه مثل Haskell، ((''استنباط نوعی'')) را اجرا می کنند: کامپایلر نوع متغیرها را بر اساس چگونگی استفاده ی آنها مشخص می کند. مثلاً تابع ''f(x,y)'' که در آن ''x'' و ''y'' با هم جمع می شوند، کامپایلر استنباط می کند که ''x'' و ''y'' باید عدد باشند- - چون جمع فقط برای اعداد تعریف شده است. بنابراین هر فراخوانی تابع ''f'' در جایی از برنامه که نوع غیر عددی (مثل رشته یا لیست) دارد خطا ایجاد می کند.

ثابت ها و عبارات رشته ای و عددی در کد می توانند به نوع در یک متن ویژه اشاره کنند. مثلاً عبارت 3.14 اشاره به این دارد که نوع آن ((ممیز شناور)) است در حالی که( 1, 2, 3) اشاره دارد که لیستی از اعداد صحیح است؛ نوعاً یک ((آرایه)).
+{*بسیاری از سیستم های نوعی استاتیک، مثل C و جاوا، نیاز به" تعریف های نوعی" دارند: برنامه نویسان باید به طور صریح هر متغیر را با نوع ویژه ای پیوند دهند. بقیه مثل Haskell، ((استنباط نوعی)) را اجرا می کنند: کامپایلر نوع متغیرها را بر اساس چگونگی استفاده ی آنها مشخص می کند. مثلاً تابع f(x,y) که در آن x و y با هم جمع می شوند، کامپایلر استنباط می کند که x و y باید عدد باشند- - چون جمع فقط برای اعداد تعریف شده است. بنابراین هر فراخوانی تابع f در جایی از برنامه که نوع غیر عددی (مثل رشته یا لیست) دارد خطا ایجاد می کند.
 +ثابت ها و عبارات رشته ای و عددی در کد می توانند به نوع در یک متن ویژه اشاره کنند. مثلاً عبارت 3.14 اشاره به این دارد که نوع آن ((ممیز شناور)) است در حالی که( 1, 2, 3) اشاره دارد که لیستی از اعداد صحیح است؛ نوعاً یک ((آرایه)). *}
 +---
 !طبقه بندی انواع !طبقه بندی انواع
 انواع می تواند به صورت زیر طبقه بندی شود: انواع می تواند به صورت زیر طبقه بندی شود:
 * ((__انواع اولیه__)) – ساده ترین شکل انواع مثل ((عدد صحیح)) و ((ممیز شناور)) * ((__انواع اولیه__)) – ساده ترین شکل انواع مثل ((عدد صحیح)) و ((ممیز شناور))
 * ((__انواع ترکیبی__)) – انواع شامل انواع پایه مثل ((انواع داده انتزاعی)) * ((__انواع ترکیبی__)) – انواع شامل انواع پایه مثل ((انواع داده انتزاعی))
 * ((__انواع مشتق شده و زیر نوع ها__)) * ((__انواع مشتق شده و زیر نوع ها__))
 * ((__انواع شیئی__)) مثل ((متغیرنوعی)) * ((__انواع شیئی__)) مثل ((متغیرنوعی))
 * ((__انواع کلاسی__)) مثل نوع یک ((شیء)) * ((__انواع کلاسی__)) مثل نوع یک ((شیء))
-* ((__واسط __))ها مثل نوع یک((وابستگی)) +* ((__واسط __))ها مثل نوع یک ((وابستگی))
 * ((__قوانین__)) مثل نوع یک ((کانال ارتباطی)) * ((__قوانین__)) مثل نوع یک ((کانال ارتباطی))
 * ((__انواع__)) مثل نوع یک نوع * ((__انواع__)) مثل نوع یک نوع
- +---
 !قابلیت تطابق، برابری و جایگزینی !قابلیت تطابق، برابری و جایگزینی
-سئوال قابلیت تطابق و برابری یک موضوع پیچیده و جنجالی است و با قابلیت جایگزینی مرتبط می باشد: یعنی، آیا نوع داده ی ''A'' و ''B'' برابرند ؟ آیا ارزش نوع ''A'' می تواند به جای ارزش نوع ''A'' استفاده شود؟
اگر نوع ''A'' با ''B'' سازگار باشد، ''A'' زیر نوع ''B'' خواهد بود در حالی که برعکس این موضوع همیشه برقرار نیست. تعریف به عنوان ((قانون جایگزینی Liskov)) شناخته شده است.
+{*سئوال قابلیت تطابق و برابری یک موضوع پیچیده و جنجالی است و با قابلیت جایگزینی مرتبط می باشد: یعنی، آیا نوع داده ی A و B برابرند ؟ آیا ارزش نوع A می تواند به جای ارزش نوع A استفاده شود؟
اگر نوع A با B سازگار باشد، A زیر نوع B خواهد بود در حالی که برعکس این موضوع همیشه برقرار نیست. تعریف به عنوان ((قانون جایگزینی Liskov)) شناخته شده است. *}
---
 !همچنین ببینید !همچنین ببینید
 * ((زبان برنامه نویسی))  * ((زبان برنامه نویسی))
 * ((سربار گذاری عملگر))  * ((سربار گذاری عملگر))
 * ((چند ریختی در برنامه نویسی شئی گرا))  * ((چند ریختی در برنامه نویسی شئی گرا))
 * ((امضای نوعی))  * ((امضای نوعی))
-((طب بندی)) : ((غت شناسی کامپیوتر)) |((لم کامپیوتر))

+---
!
یندای خاری
*[http://en.wikipedia.org/wiki/Data_type ]
#@^

تاریخ شماره نسخه کاربر توضیح اقدام
 دوشنبه 10 مهر 1385 [12:35 ]   8   زینب معزی      جاری 
 دوشنبه 10 مهر 1385 [12:31 ]   7   زینب معزی      v  c  d  s 
 پنج شنبه 23 شهریور 1385 [11:34 ]   6   زینب معزی      v  c  d  s 
 شنبه 21 آذر 1383 [08:03 ]   5   حمید حسن نیا      v  c  d  s 
 شنبه 21 آذر 1383 [06:16 ]   4   حمید حسن نیا      v  c  d  s 
 شنبه 21 آذر 1383 [06:14 ]   3   حمید حسن نیا      v  c  d  s 
 شنبه 21 آذر 1383 [06:10 ]   2   حمید حسن نیا      v  c  d  s 
 شنبه 30 آبان 1383 [10:54 ]   1   حمید حسن نیا      v  c  d  s 


ارسال توضیح جدید
الزامی
big grin confused جالب cry eek evil فریاد اخم خبر lol عصبانی mr green خنثی سوال razz redface rolleyes غمگین smile surprised twisted چشمک arrow



از پیوند [http://www.foo.com] یا [http://www.foo.com|شرح] برای پیوندها.
برچسب های HTML در داخل توضیحات مجاز نیستند و تمام نوشته ها ی بین علامت های > و < حذف خواهند شد..