نوع داده

بندانگشتی|نوع داده
در علم رایانه و برنامه‌نویسی، تایپ یا نوع داده، یک ویژگی داده است که به کامپایلر یا مترجم اطلاع می‌دهد چگونه برنامه‌نویس قصد دارد از داده‌ها استفاده کند. اکثر زبانهای برنامه‌نویسی از انواع داده‌های اصلی اعداد صحیح (با اندازه‌های مختلف)، اعداد شناور (که تقریبا تمام اعداد واقعی است)، کاراکترها و اعداد بولین پشتیبانی می‌کنند. نوع داده مقادیری را که ممکن است یک عبارت (شامل متغیر یا عملگر) داشته باشد، محدود می‌کند. این نوع داده، عملیاتی را که می‌توان بر روی داده‌ها، معنای داده‌ها و نحوه ذخیره مقادیر آن نوع انجام داد، تعریف می‌کند. نوع داده مجموعه ای از مقادیر را فراهم می‌کند که یک عبارت (به عنوان مثال متغیر، عملگر و غیره) می‌تواند مقادیر آن را به‌دست آورد.

## پیشینه
انواع داده‌ای در سیستم‌های نوع استفاده می‌شوند، که روش‌های مختلفی برای تعریف، اجرای و استفاده از آنها ارائه می‌دهند. سیستم‌های مختلف، درجه‌های مختلفی از ایمنی را تضمین می‌کنند.

تقریباً تمام زبانهای برنامه‌نویسی حاوی مفهوم نوع داده می‌باشند، هرچند زبانهای مختلف ممکن است از اصطلاحات مختلف استفاده کنند.

انواع داده‌های متداول عبارتند از:

اعداد صحیح (integer)

اعداد شناور (Floating-point)

کاراکتر (Character)

رشته (string)

بولین (Boolean)

به عنوان مثال، در زبان برنامه‌نویسی جاوا، نوع int مجموعه ای از اعداد صحیح ۳۲ بیتی را نشان می‌دهد که از ۲۱۴۷۴۸۳۶۴۸- تا هستند ۲۱۴۷۴۸۳۶۴۷و همچنین عملیاتی که می‌توان در اعداد صحیح انجام داد مانند جمع، تفریق و ضرب را شامل می‌شود. از طرف دیگر، ممکن است یک رنگ توسط سه بایت نشان داده شود که مقدار هر یک از رنگ‌های قرمز، سبز و آبی و یک رشته (string) که نمایشگر اسم آن رنگ است را نشان می‌دهد.

اکثر زبان‌های برنامه‌نویسی اجازهٔ تعریف انواع داده‌های اضافی را به برنامه‌نویس می‌دهند این کار معمولاً با ترکیب تایپ‌های متعدد و تعریف عملیات معتبر مربوط به نوع داده جدید صورت می‌گیرد. برای مثال، یک برنامه‌نویس ممکن است یک نوع داده جدید به نام "عدد مختلط" که شامل قسمت حقیقی و موهومی می‌باشد را ایجاد کند. نوع داده‌ها نیز نشان دهنده یک محدودیت برای تفسیر داده‌ها در یک سیستم انواع است، برای مثال:تعریف نمایش، تفسیر و ساختار ارزش‌ها یا اشیاء ذخیره شده در حافظه کامپیوتر. سیستم انواع از انواع داده به منظور بررسی صحت برنامه‌های کامپیوتر و همچنین تغییر داده‌ها استفاده می‌کند. بسیاری از انواع داده‌ها -همان‌طور که در جدول زیر نشان داده شده است-در آمار مشابه تایپ داده‌ها در برنامه‌نویسی کامپیوتر و بالعکس است.

## تعریف نوع
(۱۹۷۶ Parnas , Shore & Weiss) پنج تعریف از «نوع» را که در بعضی مواقع به‌طور ضمنی در ادبیات رایانه ای استفاده می‌شد، مشخص کردند. انواع که شامل رفتار داده می با شد بیشتر در راستای مدلهای شی گراست، در حالی که یک مدل برنامه‌نویسی ساختار یافته تمایل دارد کد را شامل نشود، و مدل داده قدیمی ساده نامیده می‌شود. پنج نوع عبارتند از:

**نحوی**

یک نوع یک برچسب صرفاً نحوی است که با متغیر مرتبط است. چنین تعاریفی از «نوع» معنای محتوایی به انواع نمی‌دهد.

**نشانگر**

یک نوع توسط انواع ساده‌تر تعریف می‌شود که معمولاً انواع ماشینی هستند.

**نشانگر و رفتار**

یک نوع با نشانگر آن و مجموعه ای از اپراتورهای دستکاری شده در این نشانگرها تعریف می‌شود.

**فضای ارزشی**

نوع مجموعه ای از مقادیر ممکن است که یک متغیر می‌تواند در اختیار داشته باشد. چنین تعاریفی اجازه می‌دهد در مورد انواع اعداد دکارتی صحبت کنیم.

**فضای ارزشی و رفتار**

یک نوع مجموعه ای از مقادیر است که یک متغیر می‌تواند در اختیار داشته باشد و مجموعه ای از توابع است که می‌توان از آنها برای این مقادیر استفاده کرد.

تعریف نوع در محیط نشانگر مانند الگول و پاسکال اغلب به صورت دستوری بوده، در حالی که این تعریف در زبانهای سطح بالاتر مانند Simula و CLU به شکل فضای ارزشی و رفتار استفاده می‌شد.

## کلاس انواع داده‌ها
**انواع داده اولیه**

انواع داده‌های اولیه معمولاً نوعهایی هستند که در داخل زبان از پیش آماده یا ابه زبانی اصلی هستند.

**انواع داده ماشین**

کلیه داده‌های رایانه ای بر اساس الکترونیک دیجیتال و به عنوان بیت (گزینه‌های ۰ و ۱) در پایین‌ترین سطح نمایش داده می‌شود. کوچک‌ترین واحد آدرس پذیر معمولاً گروهی از بیت‌ها به نام بایت (معمولاً یک هشت رقمی است که ۸ بیت است) است. واحد پردازش شده توسط دستورالعمل‌های کد ماشین یک کلمه (به‌طور معمول ۳۲ یا ۶۴ بیت) خوانده می‌شود. اکثر دستورالعمل‌ها این کلمه را به عنوان یک عدد باینری تفسیر می‌کنند، به گونه ای که یک کلمه ۳۲ بیتی می‌تواند مقادیر عدد صحیح علامت زده شده را از صفر تا2^{32}-1 یا مقادیر عدد صحیح از -2^{31} تا 2^{31}-1 را دارا باشد.
 به دلیل وجود دو علامت مکمل، زبان ماشین و ماشین بین این نوع داده‌های تخصیص یافته و نیافته تفکیک انجام نمی‌دهند.
اعداد شناور مورد استفاده در ریاضیات شناور از تفسیر متفاوت بیت‌ها در یک کلمه استفاده می‌کنند. برای توضیحات بیشتر ممیز شناور را مشاهده کنید.

انواع داده‌های دستگاه باید در سیستم‌ها یا زبان‌های برنامه‌نویسی سطح پایین در دسترس قرار بگیرند و امکان کنترل دقیق سخت‌افزار را فراهم آورند. به عنوان مثال، زبان برنامه‌نویسی C انواع اعداد صحیح با پهنای متفاوت ازجمله کوتاه(short) و بلند(long) را ایجاد می‌کند. اگر یک نوع دادهٔ اصلی در ساختار مقصد وجود نداشته باشد، کامپایلر آنها را به کدهای دارای انواع موجود تجزیه می‌کند. به عنوان مثال، اگر یک عدد صحیح ۳۲ بیتی در یک سکوی ۱۶ بیتی درخواست شود، کامپایلر به‌طور ضمنی با آن به عنوان آرایه ای از دو عدد صحیح ۱۶ بیتی رفتار خواهد کرد.

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

**نوع بولین**

نوع بولین مقدار درست و نادرست را نشان می‌دهد. اگرچه فقط دو مقدار ممکن است، برای کارایی بیشتر به ندرت از این نوع به‌عنوان یک رقم باینری واحد استفاده می‌شود.

بسیاری از زبانهای برنامه‌نویسی از نوع بولین برخوردار نیستند، درعوض تفسیر (به عنوان مثال) ۰ به عنوان نادرست و سایر مقادیر به عنوان درست هستند. داده‌های بولین به ساختار منطقی نحوه تفسیر زبان به زبان ماشین اشاره دارد. در این حالت، یک بولین ۰ به منطق نادرست اشاره دارد. منطق درست همیشه غیر صفر است، به خصوص موردی که به بولین۱ معروف است.

**انواع عددی**

مانند:
* انواع داده عدد صحیح یا «اعداد غیر کسری». بسته به توانایی آنها برای درج مقادیر منفی (مثلاً unsigned در C و C ++) ممکن است زیرمجموعهٔ نوع تعریف شوند. ممکن است تعداد کمی از زیرگروه‌های از پیش تعریف شده نیز داشته باشد (مانند کوتاه(short) و بلند(long) در C / C ++). یا به کاربران اجازه دهد آزادانه زیرمجموعه‌هایی مانند یک تا دوازده را تعریف کنند (به عنوان مثال پاسکال / آدا).
* انواع داده‌های نقطه شناور معمولاً مقادیری به عنوان مقادیر کسری با دقت بالا (اعداد منطقی، از نظر ریاضی) را نشان می‌دهند، اما گاهی نیز به اشتباه اعداد حقیقی خوانده می‌شوند (برگرفته از اعداد واقعی ریاضی). آنها معمولاً هم در مقادیر حداکثر و هم در دقت خود دارای محدودیت‌های از پیش تعریف شده هستند. به‌طور معمول در داخل به شکل a\times 2^b ذخیره می‌شود (جایی که a و b عدد صحیح هستند) اما به صورت اعشاری نمایش داده می‌شوند.
* انواع داده‌های ثابت برای نمایش مقادیر پولی مناسب هستند. آنها اغلب به شکل عدد صحیح تعریف می‌شوند و منجر به محدودیت‌های از پیش تعریف شده می‌شوند.
* انواع عددی بیگنام یا انواع عددی قراردادی فاقد این محدودیت‌ها می‌باشند. آنها انواع ابتدایی نیستند و برای اهداف با کارایی بالاتر مصرف می‌شوند.

**انواع کامپوزیت**

انواع کامپوزیت از بیش از یک نوع ابتدایی به‌دست می‌آیند. برای رسیدن به آن روش‌های مختلفی استفاده می‌شود. روشهای ترکیب آنها ساختمان داده‌ها نامیده می‌شوند. ترکیب یک نوع ابتدایی در یک نوع ترکیبی-تکمیلی به‌طور کل به یک نوع جدید منجر می‌شود، به عنوان مثال آرایهٔ اعداد صحیح نوع دیگری از عدد صحیح است.
* یک آرایه (که به آن بردار، لیست یا دنباله نیز گفته می‌شود) تعدادی از عناصر را ذخیره می‌کند و دسترسی تصادفی به عناصر مجزا را فراهم می‌کند. عناصر یک آرایه به‌طور معمول (اما نه در همهٔ محیط‌ها) لازم است از یک نوع باشند. ممکن است آرایه‌ها با طول ثابت یا قابل ارتقا باشند. شاخص‌های موجود در یک آرایه معمولاً باید عدد صحیح از یک دامنه خاص باشند. (اگر همه شاخص‌های موجود در آن محدوده با عناصر مطابقت نداشته باشند، ممکن است این یک آرایه پراکنده باشد).
* رکورد (tuple یا ساختار) رکوردها از ساده‌ترین ساختمان داده‌ها هستند. رکورد یک مقدار است که شامل مقادیر دیگر، به‌طور معمول با تعداد ثابت و دنباله دار است و به‌طور معمول با نام‌ها فهرست بندی می‌شود. اجزای رکورد معمولاً به عنوان فیلد یا عضو خوانده می‌شوند.
* اتحاد. نوع اتحادیه مشخص می‌کند که کدام یک از انواع ابتدایی مجاز ممکن است در نمونه‌های آن ذخیره شود، به عنوان مثال. "شناور یا عدد صحیح بلند(long)". برخلاف رکورد، که می‌تواند شامل یک عدد شناور و یک عدد صحیح باشد در اتحاد، فقط یک نوع مجاز در هر زمان وجود دارد.
* یک اتحاد برچسب خورده (که نوع متغیر، رکورد متغیر، یا اتحاد جدا کننده نیز نامیده می‌شود) شامل یک فیلد اضافی است که نوع آن را به منظور بالا بردن امنیت نوع نمایش می‌دهد.
* یک مجموعه، ساختار داده انتزاعی است که می‌تواند مقادیر خاصی را بدون هیچ ترتیب خاص و بدون تکرار مقادیر ذخیره کند. ارزش‌ها خود از مجموعه‌ها بازیابی نمی‌شوند، بلکه می‌سنجند که ارزش یک عضو مقدار مثبت بولین را دریافت می‌کند یا مقدار غیر مثبت آن را.
* یک شی مانند رکورد شامل تعدادی فیلد داده و همچنین تعدادی زیرمجموعه برای دسترسی یا اصلاح آنهاست که به نام متدها معروفند.

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

**انواع شمارشی**

نوع شمارشی مقادیر مشخصی دارد که قابل مقایسه و اختصاص دهی است، اما لزوماً هیچ گونه نمایشگر مشخصی در حافظه کامپیوتر ندارد. کامپایلرها و مفسرها می‌توانند خود نماینده آنها باشند. به عنوان مثال، چهار علامت موجود در یکدسته ورق بازی ممکن است چهار شمارشگر به نام‌های خاج، خشت، دل و پیک باشد که متعلق به یک نوع شمارشی به نام طرح هستند. اگر متغیر V به‌طور مثال این نوع داده را داشته باشد، می‌توان هریک از چهار مقدار را به آن اختصاص داد. برخی از روشها به برنامه نویسان این امکان را می‌دهد که مقادیر عدد صحیح را به نوع شمارش اختصاص دهند، یا با آنها همانند عدد صحیح رفتار کنند.

**انواع رشته‌ها و متن‌ها**

مانند:
* کاراکتری که ممکن است شامل برخی از حروف الفبا، رقم، فضای خالی، علامت نقطه گذاری و غیره باشد.
* یک رشته، دنباله ای از کاراکترها است. رشته‌ها معمولاً برای نمایش کلمات و متن استفاده می‌شوند.

انواع کاراکترها و رشته‌ها می‌توانند توالی کاراکترها را از یک مجموعه کاراکتر مانند ASCII ذخیره کنند. از آنجا که بیشتر مجموعه کاراکترها رقمها را شامل می‌شوند، می‌توان رشته عددیی مانند "۱۲۳۴" را در اختیار داشت. هر چند، بسیاری از زبانها این رشته عددی را متعلق به نوع دیگری با مقدار عددی ۱۲۳۴ می‌دانند.

انواع کاراکترها و رشته‌ها با توجه عرض کاراکتر مورد نیاز می‌توانند دارای زیرگروه‌های مختلف باشند. ASCII ابا عرض ۷ بیت از انواع محدود کننده بود و توسط مجموعه‌های ۸ و ۱۶ بیتی جایگزین شد، که می‌تواند طیف گسترده‌ای از الفبای غیر لاتین (مانند عبری و چینی) و سایر نمادها را رمزگذاری کنند. حتی در یک زبان برنامه‌نویسی مشابه با دیگری رشته‌ها ممکن است متغیر بر اساس اندازه یا به اندازه ثابت باشند. آنها همچنین ممکن است در سایز حداکثر خود قرار بگیرند.

توجه: رشته‌ها یک نوع داده اولیه در همه زبانها نیستند. به عنوان مثال، در C، آنها از یک سری کاراکترها تشکیل شده‌اند.

## جستارهای وابسته
* واژه‌نامه داده
* برنامه‌نویسی تابعی
* نظریه نوع‌ها

## منابع

رده:انواع داده
رده:مفاهیم زبان برنامه‌نویسی