نوع های داده ای یا Data Type ها به زبان ساده (Part 2)

سلام دوستان. من امیر حسین قربانی هستم و میخوام که تو این مقاله ، ادامه مقاله قبلی یعنی Data type ها رو تو بخش دوم خدمتتون اراعه بدم. دوستانی که مقاله قبلی رو نخوندن و اومدن سراغ این ، حتما اول مقاله قبل رو مطالعه کنین و اگر کامل متوجه شدین بیاین سراغ این :)Data Typesتوی مقاله قبل من مفهوم نوع های داده ای رو به صورت کامل با یه مثال کامل براتون توضیح دادم و حالا تصمیم دارم اینجا به معرفی نوع های داده ای کاربردی و در حقیقت اصلی که معمولا تو اکثر زبان های برنامه نویسی یکسان هستن رو برتون بگم . نوع داده ای int اولین و پرکاربردترین نوع داده ای که تو اکثر زبان ها یکی هست ، نوع داده ای int یا integer که فقط مخصوص ذخیره اعداد صحیح هستش . این نوع داده ای در حالت عادی میتونه بازه اعداد 2,147,483,647 تا 2,147,483,648- رو داخل خودش جا بده . لازم به ذکر هستش که تو این حالت تنها 4 بایت ( که معادل 32 بیت هست ) از حافظه ram سیستمتون رو اشغال میکنه. ولی ممکنه که شما بخواید کمتر و یا بیشتر از این بازه رو ذخیره کنین یا اصلا کارکردتون فقط با اعداد مثبت باشه و اعداد منفی تو زمینه کاریتون بی فایده باشه . تو این حالت چه باید کرد ؟ میشه رنج ذخیره سازی رو دستکاری کرد یا نه ؟!باید بگم که خوشبختانه بله :) ما این امکان رو به ساده ترین شکل ممکن داریم که بتونیم تو نحوه ذخیره سازی داده هامون دخالت کنیم. به این شکلی که الان براتون میگم .فرض کنین که بازه اعدادی که ما باهاشون سروکار داریم این مقداری که بالا نوشتم نباشه و خیلی کمتر باشه . مثلا از بازه 1000 تا 1000- . تو این حالت میتونیم از کلمه کلیدیه short قبل از تعریف نوع داده ای int استفاده کنیم یعنی بنویسیم short int . الان بازه ای که در اختیار داریم از 32,767 تا 32,768- هستش که فقط 2 بایت از حافظه ram رو به خودش اختصاص میده ( یعنی معادل 16 بیت ) . شاید سوال براتون پیش بیاد که میشه از این بازه کمتر هم استفاده کنیم ؟ بله . میشه . در ادامه براتون توضیح میدم . پس با من همراه باشید ;)حالا شاید مقداری که میخواین ذخیره کنین خیلی بزرگتر باشه . تکلیف چیه ؟!تو این حالت به جای نوشتن کلمه کلیدی short ، از کلمه کلیدی long استفاده مکنیم . حالا بازه اعداد ما خیلی بزرگ هستش و از 9,223,372,036,854,775,807 تا 9,223,372,036,854,775,808- رو میشه ذخیره کرد ! البته از اون طرف هم خب مقدار ram بیشتری رو مصرف میکنه که حدود 8 بایت هست ( معادل 64 بیت ) . حالا ممکنه که ما اصلا نخوایم از رنج اعداد منفی استفاده کنیم . میشه مقدار فضای مصرفیه رنج منفی رو به مثبت اختصاص داد ؟ باز هم بله . میشه . اگر قبل از کلمات کلیدی نوع داده ایتون ، کلمه unsigned رو بزارین ، دیگه رنج منفی حساب نمیشه و عوضش به رنج اعداد مثبتتون اضافه میشه. مثلا اگر بنویسیم unsigned short int بازه میشه از 0 تا 65,535 یا اگر باشه unsigned long int میشه از 0 تا 18,446,744,073,709,551,615 که خیلی عدد بزرگی هستش !! int temp = -13 ; unsigned int age = 24 ; unsigned short int count = 10 ; نوع داده ای floatدومین نوع داده ای کاربردی که میخوام براتون بگم ، نوع داده ای float هست . توی این نوع داده ای شما علاوه بر این که میتونین اعداد صحیح رو ذخیره کنین ، قادر هستین که اعداد اعشاری رو هم ذخیره کنین .این نوع داده ای میتونه تا 6 رقم بعد از اعشار رو تو خودش نگه داری کنه . مقدار فضای مصرفیش هم 4 بایت ( معادل 32 بیت ) هست . حالا سوال ممکنه پیش بیاد که پس چرا بجای استفاده از int ، از float استفاده نکنیم ؟ جفتشون که 4 بایت فضا میگیرن ولی float میتونه اعشار رو هم ذخیره کنه !!باید بگم که اولا هر کدوم مناسب برای نوع خاصی طراحی شدن پس بهتره که از نوع مخصوص به خودش استفاده بشه ، دوما که برای ذخیره اعداد داخل float ، سیستم باید پردازش بیشتری رو نسبت به ذخیره در int انجام بده . چون اصلا ذخیره اعداد اعشاری سیستمش متفاوته با ذخیره اعداد صحیح ، در نتیجه نوع داده ایشون هم فرق دارن . ( تو مقالات بعدی بیشتر درباره ذخیره سازی اعداد توی ram براتون میگم ) .float average = 752.12 ;نوع داده ای doubleحالا چالشی که از نوع float روبرو داریم اینه که اگر خواستیم عدد اعشاری که ذخیره کنیم ، مقدار اعشارش بیشتر از 6 رقم بود چی ؟ راهی هست ؟ بله . اینجاست که باید از نوع داده ای double استفاده کنیم . این نوع داده ای توانایی اینو داره که تا 15 رقم پس از اعشار رو تو خودش نگهداری کنه .اگر هم که باز هم بیشتر از 15 رقم خواستیم ذخیره کنیم باید از کلمه کلیدی long قبل از double استفاده کنیم .خود double به تنهایی 8 بایت ( معادل 64 بیت ) از حافظه رو اشغال میکنه و وقتی از long هم قبلش استفاده کنیم ، میشه 16 بایت ( معادل 128 بیت ) ، چون خود long به تنهایی 8 بایت رو میگیره و وقتی با double استفاده بشه میشه 2 برابر !!double range = 237.2596635100478 ; long double exactAverage = 237.25966351004784521898 ; نوع داده ای charنوع داده ای بعدی که برسی میکنیم ، char یا character هستش که همینطور که از اسمش مشخصه برای ذخیره یک کاراکتر بکار میره . کاراکتر مورد نظرتونو باید حتما داخل تک کوتیشن یا ' ' قرار بدین . این نوع داده ای هم در حالت عادی از بازه 127 تا 128- رو میتونه داخل خودش ذخیره کنه. شاید براتون سوال پیش بیاد که مگه کاراکتر حروف رو ذخیره نمیکنه ؟! پس چرا میگین از 127 تا 128- ؟!! خب باید بگم که حروف الفبا دقیقا مثل اعداد داخل ram ذخیره نمیشن ، بلکه اول به کد اسکی تبدیل میشن و کد اسکی اون ها ذخیره میشه . خیلی خلاصه بخوام براتون بگم هر کاراکتر کد اسکی مربوط به خودشو داره و از روی کد های اسکی هستش که داخل ram ذخیره سازی میشن. حالا انشالله تو مقاله های بعدی راجبه کد های اسکی براتون مفصل توضیح میدم ;)برای همین اگر تو زبانی مثل c++ عدد 121 رو داخل متغیری از جنس char بریزین ، خروجی بهتون کاراکتر y رو نمایش میده ( البته حتی الامکان این از این روش استفاده نکنین چون زبان های سطح بالاتری مثل c# پشتیبانی نمیکنه ) .در آخر هم جا داره بگم این نوع داده ای تنها 1 بایت ( معادل 8 بیت ) از فضای ram رو اشغال میکنه .char character = 'A' ;نوع داده ای boolامیدوارم که تا اینجای مقاله خسته نشده باشین ، چون نوع داده بعدی که بهتون معرفی میکنم ممکنه تو نگاه اول یکم عجیب بنظرتون برسه D: نوع داده بعدی ، نوع bool یا boolean هستش . این نوع داده فقط میتونه 2 مقدار رو تو خودش ذخیره کنه . یا 0 یا 1 !! منظور از 0 و 1 تو دنیای دیجیتال و کامپیوتر ها ، خاموش یا روشن هست . انجام دادن یا انجام ندادن . درست یا غلط . true یا false . ( اگر با مباحث منطق و مدار منطقی آشنا باشین دقیق متوجه میشین که چی میگم ، اگر هم آشنا نیستین هیچ جای مشکلی نیست . براتون با یه مثال کامل توضیح میدم ) .فرض کنین برنامه ای میخواین بنویسین که توش یک شرطی بر قرار هست . میخواین بگین که اگر بر فرض متغیر x مقدارش برابر 1 یا true بود ، فلان کار رو انجام بده . اگر برابر با 0 یا false بود ، کار دیگه ای رو برام انجام بده . اینجاست که باید از نوع داده bool کمک بگیریم و مقدار true یا false رو داخل متغیری درون حافظه نگهداری کنیم و اون متغیر رو مورد برسی برای شرط قرار بدیم .مقدار فضای مصرفی این نوع داده ای برابر 1 بایت ( معادل 8 بیت ) هست .bool result = true ; bool flag = false ; نوع داده ای stringاین نوع داده ای بر خلاف نوع char که تنها یک کاراکتر رو ذخیره میکرد ، میتونه تعداد زیادی کاراکتر و اعداد رو به صورت یک رشته درون حافظه ذخیره کنه .در واقع توی string هر نوع داده ورودی که بریزیم ، تنها به صورت یک رشته ای از عبارات نگه داری میشن و نمیشه اصلا روش عملیاتی انجام داد . مثلا اگر عدد 120 رو توی string نگه داری کنین ، هیچ عملیات ریاضی نمیشه روش انجام داد ( مگر این که از توابع تبدیل استفاده کنین که تو مقالات بعدی توضیح میدم ) .کاراکتر هایی که میخواین تو این نوع داده ذخیره کنین ، حتما باید داخل دابل کوتیشن یا "" قرار بگیرن . مقدار فضایی هم که این نوع داده مصرف میکنه ، معادل 8 بایت ( معادل 32 بیت ) هست .البته تو بعضی از زبان ها مثل c++ حتما باید کتاب خونه مربوط به string هارو تو برنامه فراخونی کنین تا بتونین از این نوع داده استفاده کنین.string bio = &quotSalam, man amir hossein hastam. 21 sale az karaj&quot ;سایر نوع های داده ایخب تا اینجا با نوع های داده ای اصلی آشنا شدین . در ادامه با چند تا نوع داده ای دیگه هم به طور مختصری آشناتون میکنم . این نوع های داده ای ممکنه تو زبان های برنامه نویسی فرق داشته باشن یا اصلا نباشن .byteنوع داده ای برای ذخیره اعداد 0 تا 255 کاربرد داره . مقدار فضای مصرفیش هم 1 بایت هست .sbyteاین نوع داده هم مثل بالایی 1 بایت فضا میگیره فقط از 127 تا 128- قابلیت نگهداری رو داره .decimalاین نوع داده ای میتونه بجای long double کاربرد داشته باشه ، چون 28 رقم بعد اعشار رو پشتیبانی میکنه و میتونه تو محاسبات مالی و یا علمی کاربرد نسبتا زیادی رو داشته باشه .16 بایت هم فضا میگیره .نوع های داده ای پویا مثل var , dynamic , let , ...کاربرد این نوع های داده ای بیشتر تو زبان های اسکریپتی و یا زبان های سطح بالایی مثل C# هست . شما داخل این نوع داده ها میتونین هر چیزی رو ذخیره کنین و نوع داده اون مقداری که شما ذخیره کردین در زمان کامپایل و یا تفسیر برنامه نوشته شده مشخص میشه . مثلا اگه بنویسین :var count = 12 ;وقتی که برنامتون رو کامپایل میکنین ، خود کامپایلر یا مفسر نوع دادتون رو تایین میکنه . ( البته این کار باعث کم شدن سرعت کامپایل یا اجرای برنامه میشه . چون برنامه باید یه پردازشی رو هم برای تایین نوع داده انجام بده ) .خب دوستان عزیز بحث ما درباره نوع های داده ای تموم شد و فکر میکنم تمام موارد لازمو بهتون گفتم .فقط به عنوان نکته آخر حتما اینو در نظر داشته باشین که وقتی زبان برنامه نویسی رو شروع کردین به یادگیری ، قبلش درباره نوع های داده ایش تو گوگل یه سرچ کنین . چون نوع های داده ای تو زبان های مختلف تفاوت اندکی با هم دارن .برای مثال ما تو c++ اگر بخوایم از 8 بایت فضا برای ذخیره عدد استفاده کنیم مینویسیم long int ، در صورتی که توی زبانی مثل c# یا java نیازی به long int نیست و تنها با نوشتن کلمه long به 8 بایت فضا میرسیم .ممنون که تا اینجا همراهم بودین و این مقالرو به اتمام رسوندین .سوالی داشتین حتما بپرسین . موفق و پیروز باشید .