نوع داده، طبقهبندی یا دستهبندی خاصی از دادهها است که کامپایلر یا مفسر را در مورد ماهیت دادهها و نحوه پردازش آنها مطلع میکند.
در زبان سیشارپ، انواع دادهها، طبقهبندیهایی از دادهها هستند که اطلاعاتی در مورد نحوه ذخیره دادهها در حافظه و عملیاتی که میتوان روی آنها انجام داد، در اختیار کامپایلر قرار میدهند.
انواع داده در سی شارپ، اندازه، قالب و محدوده مقادیری را که میتوان به متغیرهایی از آن نوع اختصاص داد، تعریف میکنند.
هنگام یادگیری سی شارپ، درک انواع داده ضروری است.
استفاده درست از انواع داده، تضمین میکنند که کد شما کارآمد بوده و برنامه شما به راحتی اجرا میشود.
1# انواع داده در سی شارپ چیست؟
در سی شارپ، انواع داده، طبقهبندیهایی هستند که نوع دادهای را که یک متغیر میتواند در خود نگه دارد، مشخص میکنند.
استفاده از انواع داده در سی شارپ میتواند ایمنی نوع را اعمال کند و اطمینان حاصل کند که دادهها به روشهای سازگار و قابلپیشبینی استفاده میشوند.
به عنوان مثال، اگر یک متغیر را به عنوان int تعریف کنید، فقط میتواند مقادیر صحیح را ذخیره کند و هرگونه تلاشی برای اختصاص یک مقدار غیرصحیح منجر به خطای زمان کامپایل خواهد شد.
هر متغیر یا قطعه دادهای که در سی شارپ تعریف میکنید، اطلاعاتی درباره موارد زیر ارائه میدهد:
- اندازه مکان حافظهای که برای متغیر در نظر گرفته میشود.
- محدوده دادههایی که میتوانند در آن مکان حافظه ذخیره شوند.
- عملیات قانونی ممکن که میتوانند در آن مکان حافظه انجام شوند.
- نوع نتایجی از یک عبارت حاصل میشود وقتی این نوعها درون آن عبارت استفاده شوند.
2# مدل نمایش دادهها در کامپیوتر
قبل از اینکه به بحث در مورد نحوه استفاده از انواع داده در سی شارپ بپردازیم، ابتدا باید بفهمیم که دادهها چگونه در کامپیوتر نمایش داده میشوند؟
به نمودار بالا نگاهی بیندازید. ببینید، روی هارددیسک کامپیوتر شما، مقداری داده دارید، مثلاً A، این دادهها میتوانند در قالبهای مختلفی باشند، میتوانند یک تصویر، یک الفبا، یا یک فایل PDF باشند.
همانطور که میدانیم کامپیوتر فقط میتواند اعداد دودویی یعنی ۰ و ۱ را درک کند؛ بنابراین، حرف A در کامپیوتر بهصورت ۸ بیت، (یعنی ۰۱۰۰۰۰۰۱ ) نمایش داده میشود و ۶۵ مقدار ASCII آن است و از اینرو عدد اعشاری ۶۵ به معادل دودویی آن یعنی ۰۱۰۰۰۰۰۱ تبدیل میشود.
برای ذخیره هر دادهای در کامپیوتر، به این قالب ۸ بیتی نیاز داریم و این ۸ بیت کامل، یک بایت نامیده میشود؛ اما به عنوان یک توسعهدهنده، نمایش دادهها در قالب دودویی یعنی با استفاده از ۰ و ۱ برای ما بسیار دشوار است؛ بنابراین، در اینجا، در زبان سی شارپ میتوانیم از قالب اعشاری استفاده کنیم.
کاری که میتوانیم انجام دهیم این است که قالب دودویی را به اعشاری تبدیل میکنیم و کامپیوتر به صورت داخلی قالب اعشاری را به قالب بایت (قالب دودویی) نگاشت میکند و سپس با استفاده از بایت میتوانیم دادهها را نمایش دهیم.
بنابراین، میتوانید مشاهده کنید که نمایش بایتی عدد اعشاری ۶۵ بهصورت ۰۱۰۰۰۰۱ است.
3# دسته بندی انواع داده در سی شارپ
به طور عمده انواع داده در سی شارپ به 3 دسته تقسیم میشوند:
- انواع دادههای مقداری (value Data Type)
- انواع دادههای مرجع (Refrence Data Type)
- نوع داده اشارهگر (Pointer Data Type)
1-3# انواع دادههای مقداری
انواع مقداری در سی شارپ، انواع دادهای هستند که دادههای واقعی را در متغیر ذخیره میکنند.
این بدان معناست که وقتی یک نوع مقداری به متغیر دیگری اختصاص داده میشود، دادههای واقعی کپی میشوند.
متغیرهای نوع مقداری مستقیماً حاوی دادههای مقدار اختصاص داده شده هستند.
در دستهبندی دیگر، انواع داده در سی شارپ در دو حالت داده از پیش تعریف شده و داده تعریف شده توسط کاربر تقسیم میشوند.
انواع مقداری در سی شارپ نیز میتوانند به هر دو دسته تعلق داشته باشند و محدود به انواع داده از پیش تعریف شده نیستند.
هم انواع داده از پیش تعریف شده و هم انواع داده تعریف شده توسط کاربر میتوانند در سی شارپ از نوع مقداری باشند.
در اینجا به تفکیک این دو دسته آمده است:
1) انواع داده مقداری از پیش تعریف شده (Per Defined Data Type)
انواع داده از پیش تعریف شده، انواع دادهای هستند که توسط زبان برنامهنویسی تعریف میشوند.
در سی شارپ، چندین نوع داده از پیش تعریف شده وجود دارد، از جمله:
-
- عدد صحیح (Integer): این نوع از انواع داده در سی شارپ، یک عدد صحیح، مثبت یا منفی، بدون اعشار میباشد.
رایجترین انواع عدد صحیح، int و long هستند. - عدد اعشاری (Floating point): عدد اعشاری، عددی با بخش کسری که شامل یک یا چند رقم اعشار است.
دو نوع داده اعشاری وجود دارد که شامل نقطه اعشار هستند. - Float: این نوع داده، یک نوع داده ممیز شناور ۳۲ بیتی با دقت تکرقمی است.
دقت آن ۷ رقمی است.
برای مقداردهی اولیه یک متغیر float، از پسوند f یا F استفاده کنید.
اگر پسوند F یا f استفاده نشود، به عنوان double در نظر گرفته میشود. - Double: این نوع داده اعشاری ۶۴ بیتی بادقت مضاعف است.
دقت آن ۱۴ تا ۱۵ رقم است.
برای مقداردهی اولیه یک متغیر double، از پسوند d یا D استفاده کنید؛ اما استفاده از پسوند اجباری نیست؛ زیرا انواع داده float به طور پیشفرض از نوع double هستند. - کاراکتر(Char): انواع کاراکتر نشاندهنده یک واحد کد UTF-16 یا کاراکتر یونیکد است که بهصورت یک عدد صحیح ۱۶ بیتی نمایش داده میشود.
- رشته (String): دنبالهای از کاراکترهاست که بین دو علامت نقلقول قرار میگیرند.
- بولی (Boolean): مقداری که میتواند درست (true) یا نادرست (false) باشد.
مقادیر نوع bool به صورت ضمنی یا صریح (با تبدیل نوع) به هیچ نوع دیگری تبدیل نمیشوند؛ اما برنامهنویس میتواند بهراحتی کد تبدیل را بنویسد. - تاریخ و زمان: یک نقطه خاص در زمان را به صورت ترکیبی از سال، ماه، روز، ساعت، دقیقه و ثانیه نشان میدهد.
- عدد صحیح (Integer): این نوع از انواع داده در سی شارپ، یک عدد صحیح، مثبت یا منفی، بدون اعشار میباشد.
2) انواع داده مقداری تعریف شده توسط کاربر (User Defined Data Type)
انواع داده تعریفشده توسط کاربر در سیشارپ شامل ساختارها (structs)، شمارشها (enums)، کلاسها و سایر انواع سفارشی ایجاد شده توسط کاربر میشود.
- ساختار (Struc): نوع ساختار که اغلب بهعنوان struct شناخته میشود، یک نوع مقداری تعریف شده توسط کاربر است که فیلدهای داده مرتبط و عملکردهای مرتبط را در یک موجودیت واحد کپسوله میکند.
از ساختارها برای ایجاد ساختارهای داده سبکوزن استفاده میشود که نیازی به وراثت یا معانی ارجاع ندارند.
ساختارها از نوع مقداری هستند، به این معنی که وقتی یک ساختار به یک متغیر جدید اختصاص داده میشود، یک کپی از مقدار ساختار ایجاد میشود.
این نوع از انواع داده در سیشارپ مشابه کلاسها میتوانند فیلدها، ویژگیها، متدها، سازندهها و سایر اعضا را داشته باشند. - نوع شمارش (Enum): یک نوع شمارشی که اغلب به آن enum گفته میشود، یک نوع مقداری است که مجموعهای از ثابتهای نامگذاری شده را نشان میدهد و معمولاً برای تعریف انتخابها یا گزینهها استفاده میشود.
Enumها راهی برای تعریف مجموعهای متناهی از مقادیری که یک متغیر میتواند بگیرد، ارائه میدهند و خوانایی و قابلیت نگهداری کد را بهبود میبخشند.
هر ثابت نامگذاری شده در یک enum با یک مقدار انتگرالی زیربنایی مرتبط است که معمولاً از صفر شروع میشود و میتواند به طور صریح انتساب داده شود.
از Enumها میتوان در دستورات switch، مقایسهها و سایر عملیات استفاده کرد.
2-3# انواع دادههای مرجع
انواع ارجاعی در سی شارپ مستقیماً حاوی دادههای واقعی نیستند؛ بلکه در عوض حاوی ارجاعی به مکانی از حافظه هستند که دادهها در آن ذخیره میشوند.
آنها به اشیایی اشاره میکنند که در heap تخصیص داده شدهاند.
تغییراتی که در یک متغیر که نوع ارجاعی را در خود جای داده است ایجاد میشود، در متغیرهای دیگری که به همان شی در حافظه ارجاع میدهند، منعکس خواهد شد.
1) انواع دادههای مرجع از پیش تعریفشده (Per Defined Data Type)
انواع داده از پیش تعریف شده، انواع دادهای هستند که توسط زبان برنامهنویسی تعریف میشوند.
در سی شارپ، چندین نوع داده مرجع از پیش تعریف شده وجود دارد، از جمله:
- نوع شی (Object): نوع شی، کلاس پایه نهایی برای همه انواع دیگر در #C است.
این بدان معناست که هر نوع در #C، چه نوع مقداری باشد و چه نوع مرجع، در نهایت از نوع شی ارثبری میکند.
این امر چندریختی و برخورد با انواع مختلف بهعنوان یک نوع پایه مشترک را امکانپذیر میکند.
تغییرات ایجاد شده در دادههای ذخیره شده در یک متغیر نوع شی، در متغیرهای دیگری که به همان دادهها ارجاع میدهند، منعکس میشود.
این معنای مرجع، برای همه انواع مرجع اعمال میشود و قابلیت استفاده مجدد از کد و انعطافپذیری را تسهیل میکند. - نوع پویا (Dynamic Type): نوع پویا به متغیرها اجازه میدهد تا مقادیر هر نوعی را با بررسی نوع در زمان اجرا نگه دارند.
این نوع انعطافپذیری و اتصال دیرهنگام را ارائه میدهد؛ زیرا بررسی نوع در زمان اجرا به جای زمان کامپایل انجام میشود.
تغییرات ایجاد شده در یک متغیر نوع پویا در متغیرهای دیگری که به همان دادهها ارجاع میدهند، منعکس میشود و از معانی مرجع بهره میبرد.
نوع پویا امکان کد تطبیقپذیر را فراهم میکند و بهصورت پویا با انواع مختلف کار میکند.
با بررسی نوع در زمان اجرا و رفتار مبتنی بر مرجع، نوع پویا تطبیقپذیری را برای مدیریت سناریوهای مختلف داده فراهم میکند.
- نوع رشته (string): نوع رشته، متن را بهصورت دنبالهای از کاراکترها نشان میدهد.
در حالی که متغیرهای رشتهای از نوع مرجع هستند، ویژگیهای منحصربهفردی دارند.
رشتهها تغییرناپذیر هستند، به این معنی که مقادیر آنها پس از اختصاص داده شدن قابلتغییر نیستند.
عملیات رشتهای معمولاً بهجای تغییر اشیا موجود، اشیا رشتهای جدیدی ایجاد میکنند؛ زیرا تغییرناپذیر هستند.
این رفتار، یکپارچگی مقادیر رشتهای را تضمین میکند.
نوع رشتهای به طور گسترده برای ذخیره و دستکاری دادههای مبتنی بر متن استفاده میشود و راحتی و کارایی را در مدیریت اطلاعات متنی در برنامههای سیشارپ ارائه میدهد.
2) انواع داده مرجع تعریف شده توسط کاربر (User Defined Data Type)
این نوع از انواع داده در سیشارپ، انواع سفارشی هستند که توسط کاربر یا توسعهدهنده ایجاد میشوند.
این نوعها امکان ایجاد ساختارهای داده تخصصی، انتزاعها و اجزای قابل استفاده مجدد متناسب با نیازهای خاص را فراهم میکنند.
در اینجا چند نمونه رایج از انواع دادههای مرجع تعریف شده توسط کاربر آورده شده است:
- کلاسها (class):در سیشارپ، نوع داده کلاس، یک نوع مرجع تعریفشده توسط کاربر است که به عنوان یک طرح یا الگو برای ایجاد اشیا عمل میکند.
این نوع داده، فیلدهای داده، ویژگیها، متدها، رویدادها و سایر اعضا را در یک موجودیت واحد کپسوله میکند. - رابطها (Interfaces): رابطها در سیشارپ قراردادی را برای کلاسها ایجاد میکنند تا به آن پایبند باشند.
آنها امضاهای اعضا مانند متدها، ویژگیها و رویدادهایی را که کلاسهای پیادهسازی باید ارائه دهند، مشخص میکنند.
رابطها چندریختی را ترویج میدهند و به اشیا کلاسهای مختلف اجازه میدهند تا از طریق یک نوع رابط مشترک به طور یکنواخت رفتار شوند.
این امر راهی برای دستیابی بهنوعی از وراثت چندگانه با پیادهسازی رابطهای چندگانه، فعالکردن قابلیت استفاده مجدد از کد و ایجاد یک قرارداد مشترک برای تعامل با کلاسهای مختلف ارائه میدهد.
3-3# نوع داده اشارهگر (Pointer Data Type)
انواع داده اشارهگر در سیشارپ، نوعی داده هستند که ارجاعی به مکان حافظه متغیر دیگری را ذخیره میکنند.
این بدان معناست که وقتی مقداری را به یک متغیر اشارهگر اختصاص میدهید، خود مقدار را اختصاص نمیدهید؛ بلکه ارجاعی به آن مقدار ایجاد میکنید.
اگرچه سیشارپ از اشارهگرها پشتیبانی میکند؛ اما استفاده از آنها به سناریوهای خاصی محدود شده و عموماً ناامن تلقی میشود.
کلمه کلیدی unsafe برای مشخصکردن بلوکی از کد استفاده میشود که در آن میتوان از اشارهگرها استفاده کرد.
اشارهگرها معمولاً در سناریوهای تعامل با کد مدیریت نشده، مانند فراخوانی توابع در کتابخانههای بومی یا کار با فایلهای نگاشت شده در حافظه، استفاده میشوند.
برای دریافت جزئیات اشارهگر، دو نماد آمپرسند (&) و ستاره (*) را بهصورت زیر داریم:
- علامت(&): & بهعنوان عملگر آدرس شناخته شده و برای تعیین آدرس یک متغیر استفاده میشود.
- ستاره (*): ستاره بهعنوان عملگر غیرمستقیم شناخته میشود و برای دسترسی به مقدار یک آدرس استفاده میشود.
علاوه بر انواع داده در سی شارپ که در بالا ذکر شد، نوع داده دیگری نیز وجود دارد که تحت عنوان انواع تهی پذیر یاد میشود.
بر فرض اگر بخواهید نشان دهید که یک متغیر هیچ مقداری ندارد (مانند یک فیلد پایگاه داده که ممکن است خالی باشد)، انواع Nullable در #C به انواع مقداری اجازه میدهند تا مقادیر null را در خود نگه دارند.
انواع تهیپذیر زمانی مفید هستند که مقدار یک متغیر همیشه قابل تنظیم نباشد و انعطافپذیری بیشتری در کد شما ایجاد کنند.
4# تبدیل نوع در سی شارپ
باوجود گستردگی انواع داده در سی شارپ، ممکن است موقعیتهایی پیش بیاید که نیاز به تغییر نوع یک متغیر داشته باشید.
تبدیل نوع به شما امکان میدهد دادهها را از یک نوع به نوع دیگر تبدیل کنید.
در سی شارپ، دو نوع تبدیل نوع بهصورت زیر وجود دارد:
- تبدیل ضمنی (ایمن): تبدیل ضمنی زمانی که خطر ازدستدادن دادهها وجود نداشته باشد، به طور خودکار اتفاق میافتد.
سیشارپ امکان تبدیل ضمنی را برای انواع سازگار فراهم میکند. - تبدیل صریح: هنگام تبدیل بین انواع ناسازگار، تبدیل صریح لازم است.
این کار با استفاده از تبدیل نوع (casting) انجام میشود.
5# نکاتی برای استفاده از انواع داده در سی شارپ
برای استفاده از انواع داده در سی شارپ، رعایت نکاتی قابل توجه است.
بهترین شیوه برای این کار میتواند به صورت زیر باشد:
- نوع داده مناسب را انتخاب کنید: استفاده از نوع داده صحیح به صرفهجویی در حافظه کمک میکند و برنامه شما را کارآمدتر میسازد.
- وقتی نوع داده واضح است، از var استفاده کنید: این کار خوانایی را بهبود میبخشد و کد را تمیزتر میکند.
- از تبدیلهای نوع غیرضروری خودداری کنید: تبدیل بیش از حد انواع دادهها میتواند عملکرد را کند، کند.
- از const یا readonly برای مقادیر ثابت استفاده نمایید: این موارد به جلوگیری از تغییرات تصادفی در مقادیر مهم کمک میکند.
- برای محاسبات مربوط به پول از decimal استفاده نمایید: دقت بیشتری را برای معاملات مالی فراهم میکند.
6# دلیل اهمیت انتخاب نوع مناسب داده در سی شارپ
درک انواع دادهها در سیشارپ، مسیر را برای درک ساختارهای پیچیدهتر مانند آرایهها و متدها هموار میکند.
متغیرها و انواع دادهها مانند آجرهای یک ساختمان هستند.
برای ساختن یک بنای محکم، آجرها باید محکم و قابل اعتماد باشند.
بسته به اینکه میخواهید با متغیرهایتان چه کاری انجام دهید، شما باید نوع مناسب برای دادههای خود را انتخاب کنید.
تبدیل متغیرها از یک نوع به نوع دیگر نیز میتواند در صورت نیاز انجام شود؛ اما نیاز به درک کاملی از رفتار سیستم در رابطه با تبدیل نوع دارد.
سی شارپ یک زبان قوی است.
این زبان به نوع متغیری که با آن کار میکنید توجه زیادی دارد.
اگر نوع اشتباهی را به یک متغیر اختصاص دهید، منجر به خطای زمان کامپایل خواهد شد.
این حالت دقیق عملکرد برای جلوگیری از مشکلات احتمالی در زمان اجرا ایجاد شده است و فرایند اشکالزدایی شما را کمتر استرسزا میکند.
نتیجهگیری
سی شارپ یک زبان با انواع داده قوی است که نیاز به تعریف صریح انواع داده متغیر دارد.
سی شارپ از انواع داده مختلفی از جمله انواع مقداری، انواع ارجاعی و انواع اشارهگر پشتیبانی میکند.
انواع داده در سی شارپ اساساً برای ذخیره موقت دادهها در کامپیوتر از طریق یک برنامه استفاده میشوند.
در دنیای واقعی، ما انواع مختلفی از دادهها مانند اعداد صحیح، اعداد اعشاری، کاراکترها، بولی، رشتهها و غیره داریم.
برای ذخیره همه این انواع مختلف دادهها در یک برنامه برای انجام عملیات مربوط به تجارت، به انواع داده نیاز داریم.
در برنامهنویسی سی شارپ، انواع دادهها نقش اساسی دارند.
درک آنها اولین گام مهم شما در کدنویسی مؤثر در این زبان قدرتمند و همهکاره است؛ بنابراین، برای تسلط بر این بلوکهای سازنده وقت بگذارید.
این کار پایه محکمی برای سفر شما به سیشارپ فراهم میکند.
نظرتون درباره این مقاله چیه؟
ما رو راهنمایی کنید تا اون رو کامل تر کنیم و نواقصش رو رفع کنیم.
توی بخش دیدگاه ها منتظر پیشنهادهای فوق العاده شما هستیم.