یکی از اجزای اصلی هر برنامه، دادههایی است که در آن استفاده میشود. آشنایی با انواع داده در برنامه نویسی به ما کمک میکند از آنها در جای درست استفاده کنیم. این کار باعث بهبود عملکرد و سرعت برنامهنویسی ما خواهد شد. در این آموزش نوعهای دادهای اصلی در برنامهنویسی را بدون وابستگی به زبان خاص با هم بررسی میکنیم.
شاید در یک نگاه کلی بتوان کار اصلی که یک برنامه انجام میدهد را پردازش در نظر گرفت. پردازش از دو بخش اصلی تشکیل شده است:
- عملیاتهایی که انجام میشود.
- دادههایی که پردازش میشوند.
فرقی ندارد دادههایمان به چه صورت وارد برنامه شده است. ممکن است آنها را از کاربر گرفته باشیم، از قبل ذخیره داشته باشیم و یا توسط ما به عنوان برنامهنویس در کدهای برنامه قرار داده شده باشد.
اما واقعاً چرا شناخت انواع داده برنامهنویسی مهم است ؟
اول از همه برای نگهداری دادهها نیاز است نوع آنها را تشخیص دهیم. در ثانی، برای پردازش مجبوریم عملیاتهایی را روی این دادهها انجام دهیم. اینکه هر نوع داده چه عملگرهایی را قبول میکند بسیار مهم است.
برای مثال در صحبتهای روزمره میدانیم که میتوان اعداد را با هم جمع و تفریق کرد، اما همین عملیاتها برای جملاتی که به زبان میآوریم بی معنی خواهد بود!
اگر نتوانیم از داده ها در برنامه نویسی به درستی استفاده کنیم، احتمال اینکه یک برنامه خوب ایجاد کنیم کاهش پیدا میکند. در ادامه ابتدا با نوعهای دادهای آشنا شده و سپس ۶ نوع اصلی را با هم بررسی میکنیم.
فهرست محتوای آموزش
انواع داده در برنامهنویسی
نوع داده را میتوان از ۲ دیدگاه بررسی کرد. هر دو دیدگاه در جای خود درست هستند و در اصل ماجرا تغییری ایجاد نمیشود.
اولین دستهبندی، دستهبندی بر این اساس است که آیا آن نوع دادهای به صورت پیشفرض در زبان برنامهنویسی وجود دارد یا باید ما آن را تعریف کنیم. در برخی منابع به این دو دسته، دادههای ساده و پیچیده (یا استاندارد و قابلتعریف) هم میگویند.
دادههای تعریف شده، نوعهایی هستند که در یک زبان برنامه نویسی وجود دارند. یک برنامهنویس میتواند بدون هیچ پیچیدگی خاصی، از آن داده و عملگرهای میان آنها استفاده کند.
وقتی تبدیل به یک برنامهنویس حرفهایتر میشویم، ممکن است به نوعهای دادهای نیاز داشته باشیم که به صورت پیشفرض وجود ندارد یا ساختار آنها دارای پیچیدگیهای خاص است. در اینگونه مواقع باید خودمان اقدام به ایجاد یک ساختار برای نوع داده مورد نظرمان کنیم.
دومین دستهبندی که برای دادهها در برنامهنویسی استفاده میشود، تقسیمبندی بر اساس نوع داده و عملگرهای میان آنهاست. در اکثر زبانهای برنامهنویسی ۵ نوع داده زیر وجود دارند:
- داده عددی
- داده متنی
- داده منطقی
- داده مجموعهای (آرایهای)
- داده ساختاریافته
سه نوع اول را در ادامه با هم بررسی میکنیم. ساختار این دادهها نسبت به هم متفاوت بوده و عملگرهایی که برای آنها تعریف میشود نیز متفاوت است.
دادههای مجموعهای به صورت مجموعهای از سه نوع اول تعریف میشوند. مثلاً ما مجموعهای از ۱۰ داده عددی را ایجاد میکنیم. درباره مجموعهها در آموزش متغیر برنامهنویسی صحبت میکنیم.
دادههای ساختاریافته دادههایی هستند که پیچیدگی بیشتری نسبت به یک نوع دارند. معمولاً هر داده ساختاریافته از چندین نوع داده مختلف تشکیل شده و ویژگیهای منحصر به فردی دارد.
شش نوع داده برنامه نویسی
سه نوع اولی که در بخش قبلی اشاره کردم، به حالات مختلفی در زبانهای مختلف برنامهنویسی ظاهر میشوند. مستقل از زبان برنامهنویسی، این دادهها را به ۵ زیر دسته تقسیم میکنیم:
- دادههای عددی به داده صحیح و داده اعشاری
- دادههای متنی به داده کاراکتری و رشته متنی
- داده منطقی
علاوهبر این پنج مورد، با یک نوع دادهای کمی عجیب تا انتهای این بخش آشنا خواهیم شد.
همه انواع داده برنامه نویسی در حافظه کامپیوتر و پردازنده به صورت دودویی (یا 0 و 1) ذخیره میشوند. بنابراین حافظهای که هر نوع دادهای اشغال میکند بسته به حجم آن متفاوت است.
عدد صحیح در برنامهنویسی
عدد صحیح (Integer یا به طور مختصر int) همان اعداد صحیح هستند که در ریاضیات با آنها آشنا شدیم. اعداد منفی، صفر و مثبت همگی در دستهبندی اعداد صحیح در برنامهنویسی قرار میگیرند. اعدادی مثل -419
، 14
یا 25478
عددی صحیح هستند.
در بعضی زبانهای برنامهنویسی مثل C یا جاوا، اعداد اینتیجر (integer) یک محدوده مشخص را شامل میشود. برای محدودههای کوچکتر یا بزرگتر نیز نوعهای دادهای متفاوتی داریم که بسته به نیاز و میزان فضای اشغال شده میتوانیم از آنها استفاده کنیم.
اما در زبانهای دیگری که معمولاً نیاز به تعریف نوع داده نداریم، نظیر پایتون یا حتی PHP معمولاً تصمیم استفاده از نوع دقیقتر ذخیرهسازی بر عهده مفسر زبان خواهد بود. البته در بعضی از این زبانها، امکان تعریف دقیق نوع دادهای یک متغیر نیز وجود دارد.
برخی از نوعهای دادهای در مجموعه اعداد صحیح در برنامه نویسی در جدول زیر آورده شده است:
نوع | محدوده عددی | حافظه |
int8 (byte) | 128- تا 128+ | 1 بایت |
short (int16) | 32,768- تا 32,767+ | 2 بایت |
long | 2,147,483,648- تا 2,147,483,647 | 4 بایت |
نوع عدد اعشاری
اعداد ممیز شناور یا اعشاری در برنامه نویسی را معمولاً با نام float میشناسیم. اعداد float به ما اجازه میدهد تا دادههای عددی با قسمت اعشاری داشته باشیم. شیوه ذخیرهسازی عدد اعشاری با عدد صحیح در حافظه و نحوه انجام عملیات بین آنها متفاوت است. به همین دلیل اعداد اعشاری در برنامهنویسی را متفاوت از integerها میگیریم.
در بعضی از زبانهای برنامهنویسی برای نمایش اعدادی که مقدار اعشارشان بسیار زیاد است، از نوع دادهای دابل (Double) به جای Float استفاده میشود.
مشابه اعداد صحیح، اعداد اعشاری float نیز در برخی زبانهای برنامهنویسی به زیربازههای مختلفی تقسیم میشوند. نوعهایی نظیر Real، Single یا extended.
نوع داده منطقی در برنامه نویسی
داده منطقی که به آن داده بولین (Boolean) هم گفته میشود، فقط میتواند دو مقدار را درون خود نگه دارد. این مقادیر با نامهای True (درست) و False (غلط) تعریف میشوند. این دو مورد را معادل 1 (درست) و 0 (نادرست) هم در نظر میگیرند.
به همین دلیل که فقط دو مقدار درست یا غلط در داده بولین قرار میگیرد به آن داده منطقی (Logical Data) هم گفته میشود. چون میتوانیم روی این مقادیر عملیاتهای جبری (جبر بول نظیر AND و OR و NOT و…) را اعمال کنیم.
در دستورات شرطی اکثراً از این نوع دادهها و عبارات برای بررسی وضعیت استفاده میشود. مثلاً میخواهیم بدانیم تنظیمات X در نرم افزار روی روشن قرار دارد یا خاموش.
نوع داده کاراکتری
داده کاراکتری که با Character یا char شناخته میشود، حاوی یک کاراکتر از میان کاراکترهای اسکی (ASCII) است. نوع داده کاراکتر در برنامه نویسی میتواند یک کاراکتر یک بایتی را در خود نگه دارد.
چند نمونه کاراکتر عبارتاند از: a
s
R
#
-
(کاراکتر فاصله)
توجه کنید که این کاراکترها نام یک متغیر نیستند بلکه یک مقدار هستند. برای اینکه کاراکتر با نام متغیر اشتباه نشود، برای نمایش هر کاراکتر، آن را درون علامت کوتیشن (' '
) قرار میدهیم. در نتیجه مقادیر 'a'
و 'P'
یا '!'
یک کاراکتر به حساب میآیند.
فرض کنید یک کاراکتر را به صورت '9'
تعریف کردهایم. آیا میتوان روی این مقدار عملیات ریاضی انجام داد ؟
جواب خیر است! این داده به صورت یک کاراکتر تعریف شده و نه یک داده عددی! در نتیجه نمیتوان با آن مثل اعداد رفتار کرد، بلکه رفتاری مشابه سایر کاراکترها خواهد داشت.
دقت کنید که نوع داده char در برنامه نویسی فقط میتواند یک کاراکتر در خود ذخیره کند. در نتیجه مقدار 'sa'
یک داده کاراکتری نیست؛ بلکه از نوع رشته است که در ادامه بررسی میکنیم.
داده رشته متنی
تقریباً یکی از پر کاربردترین نوع داده در برنامه نویسی، نوع داده متنی به شکل رشته است. رشته (String) مجموعهای از کاراکترهاست که به ترتیب قرار گرفتهاند. مثلاً "SabzDanesh"
یک رشته متنی است و از 10 کاراکتر انگلیسی تشکیل شده است.
برای ذخیره نام افراد، متنها، و هر چیزی که از مجموعهای از حروف (کاراکترها) تشکیل شده باشد از نوع داده string استفاده میکنیم.
در اکثر زبانها برای رشتههای متنی عملگرها و عملیاتهای مختلفی تعریف میشود. کار با رشته یکی از چالشهای زیبای برنامه نویسی است.
در اکثر زبانهای مدرن، نوع داده رشته (String) به صورت مستقل وجود دارد. اما در برخی زبانها (مثلاً C) برای تعریف رشته، باید مجموعهای از کاراکترها را در نظر بگریم. یعنی داده string به صورت مستقل وجود ندارد و باید خودمان تعریف کنیم.
نوع داده پوچ یا void در برنامهنویسی
آخرین نوع داده پر استفاده، داده پوچ یا void است! این داده پوچ است! 😐 در حقیقت وقتی یک متغیر یا یک تابع هیچ مقدار خاصی ندارد، به آن مقدار void گفته میشود.
اجازه دهید با یک مثال، درک این نوع داده در برنامه نویسی را راحتتر کنم. فرض کنید از دوست خود میخواهید یک کار را انجام دهد. در مورد نتیجه، دو حالت را میتوان در نظر گرفت:
- از دوستمان میخواهیم نتیجه انجام کارش را در قالب یک نوع داده (عدد، رشته یا بولین) به ما گزارش دهد.
- برای ما انجام شدن کار مهم است و هیچ گزارشی از او نمیخواهیم.
در حالت دوم میگوییم جواب دوستمان از نوع void است. چون هیچ جوابی نداده است و ما هم نیازی نداشتیم.
گاهی برای اعلام اینکه هیچ چیزی در یک متغیر وجود ندارد هم از این کلمه کلیدی استفاده میشود.
از این نوع داده برای نمایش «هیچ» در برنامهنویسی استفاده میشود.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش برنامه نویسی
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
در شناسایی داده هایی در محیط R به num برخورد کردم. که از int مجزا شناسایی شده است. این داده چه تفاوتی با int و یا Float دارد؟
تجربهای با زبان R نداریم. اما با جستجوی num in R توی آموزشها و مستندات گفته شده به نظر دادههای اعشاری (= decimal) همون نوع numeric در زبان R هستن.
فرق داده miss و داده پوچ چیست؟ کاش توضیح بیشتری در این باره ارائه میکردید! و یا مثال میزدید مانند سایر موارد
درمورد داده miss توی این آموزش صحبتی نکردم!
اگه منظورتون از miss در بحثهای علوم داده هست، اون رو یک «نوع دادهای» یا data type در برنامهنویسی نمیگیریم؛ در یه توضیحِ کلی، دادههایی که به دلایلی نداریم رو miss یا ازدسترفته میگیم.
ممنون از این مقاله کاربردی
خوشحالیم که براتون کاربردی بوده
سلام خسته نباشید ممنون از اموزشهای عالی ومفهوم دارتون خیلی مطالبتون عالی یه سوال داشتم ممنوم میشم یه خلاصه کوچک از این بیت ها وعملگرها برام بگید تشکر میگنم
سلام
ممنون از لطفتون
منظورتون رو متوجه نمیشم! کدوم Bitها؟ یکم اگه بیشتر توضیح بدید بهتر میتونم راهنماییتون کنیم.
سلام ممنون از آموزش عالی و کاربردیتون!
مثل اینکه بالای مقاله اشتباه پیش اومده long خیلی بزرگتر از int هست int دارای محدوده ی -2147483648 تا 2147483647 هست در حالی که long ۶۴ بیتی هست و دارای محدوده ی 9.22337204E+18- تا 9.22337204E+18 چند تا نوع هم هست که توی مقاله نوشته نشده
——–اعداد صحیح——–
Byte محدوده:-128~127 حافظه:۸بیت
Unsigned Byte محدوده:0~65536 حافظه:۸بیت
Short محدوده:-۳۲۷۶۸~۳۲۷۶۷ حافظه:۱۶بیت
Unsigned Short محدوده:۰~۶۵۵۳۶ حافظه:۱۶بیت
Int محدوده:-۲۱۴۷۴۸۳۶۴۸~2147483647 حافظه:۳۲بیت
Unsigned Int محدوده:0~4294967295 حافظه:۳۲بیت
Long محدوده:-9.22337204E+18~9.22337204E+18 حافظه:۶۴ بیت
Unsigned Long محدوده:0~1.84467441E+19
حافظه:۶۴بیت
یک نوع داده مبهم در پایتون وجود داره که هیچ محدوده ای نداره و اعداد صحیح هست با 2**1۶۷۷۷۲۱۶ به مرز خود نمیرسه ۲ مگابایت حافظه پر میکنه تنها کافیه بنویسی x = 2**16777216 و بعد خط بعد پرینتش کنی حالا چونکه اعداد بزرگه ممکنه محاسبات خیلی طول بکشه اما اگه مفسر سرعت خوبی داشته باشه چند ثانیه ای طول میکشه اجرا شه
——–اعداد اعشاری——–
Float محدوده:-3.4e+38~3.4e+38 حافظه:۳۲ بیت
Double محدوده:-۱.۸e+308~1.8e+308 حافظه:۶۴ بیت
Long Double محدوده:حدود -1.2e+4932~1.2e+4932 حافظه:۹۶بیت
نوع داده long double شاید تو C وجود داشته باشه اما تو C++ حتما هست هیچ زبان دیگری از long double پشتیبانی نمیکنه long double اعشاری هست
——–متن——–
Char یک کاراکتر حافظه:۸بیت
String متن بدون محدودیت
——–گروهی——–
Array ارایه حداکثر ۴۲۱۹۴۹۶۷۲۹۶ عضو
Object ابجکت
——–دودویی——–
Boolean حافظه:۱بیت
در واقع میتوان انرا به بیت(صفر و یک) تبدیل کرد false صفر و true یک هست
در محدودی اعداد برای مثال منظور از -128~127 این هست که حداقل -۱۲۸ و حداکثر ۱۲۷ هست
سلام
بسته به معماری سیستم (چند بیتی بودن پردازنده) بازهٔ این اعداد فرق میکنه (بیتهای بیشتر، اعداد بزرگتتر). اعدادی که گفتید احتمالاً برای همین حافظه 64 بیتی درست باشه. (ما الان دونه دونه چک نکردیم)
بهعلاوه اینکه توی آموزش هم گفته شده که صرفاً چند نوع دادهای برای آشنایی شما گفتیم. یه لینک ویکی پدیا توی کامنتها هست، ببینیدش احتمالا براتون درمورد همین بازه داده عددی در برنامه نویسی جالب باشه.
CPU من ۳۲ بیتی هست نه ۶۴ بیتی پس به زبان برنامه نویسی بستگی داره که چقدر حافظه پر کنن و چه محدوده ای داشته باشن
عالی بود دمت گرم
سلام. سایتتون فوق العاده است. ممنون از آموزشهای عالی تون
ولی خیلی عذر میخوام این محدوده ای رو که اعلام کردید یعنی (2,147,483,648- تا 2,147,483,647) یه جا قبلا خوندم که مربوط به int (int 32) میشه. و محدوده long (-9،223،372،036،854 تا 9،223،372،036،853) هستش. لطفا اگه اشتباه میکنم، بنده رو تصحیح بفرمایید.
سلام
بسیار ممنونیم از اینکه اینقدر دقیق هستید 😉
نامگذاری محدوده اعداد صحیح در بعضی زبانهای برنامه نویسی متفاوته. حتی گاهی روی سختافزارهای قدیمیتر و جدید تعداد بایتی که بهشون تعلق میگیره متفاوته!
عدد Long که 4 بایتی باشه مقدارش همونی هست که توی آموزشه و اگه 8 بایتی باشه عددی که شما گفتید صحیحه. جدول Long در ویکیپدیا (اینجا) ذهنیت خوبی در این مورد بهتون میده.
از توضیح کامل و دانش خوبتون بسیار سپاسگزارم. پیروز باشید. 🙂
آموزش هاتون فوق العاده است
نقطه قوت آموزش شما سادگی همراه با مثال های قابل درک است
ممنونم رضای عزیز بابت لطف و انرژی زیادی که بهمون دادی
خیلی خوشحالم که آموزشهامون رو مفید میدونید. قطعاً همراهی دوستانی چون شما انگیزمون رو چند برابر میکنه.
موفق باشی 🙂
سوال ندارم خواستم تشکر کنم ساده و خوب توضیح دادید
خیلی خوشحالم که آموزشهامون رو مفید میدونید. ممنون بابت انرژی خوبتون 🙂