Skip to main content

کار با متغیرهای اولیه

Working with primitive variables

همانطور که مستحضرید اساسی‌ترین واحد ذخیره‌سازی در یک برنامه جاوا متغیر میباشد و در این درس توضیحات مختصری درمورد اینکه چطور متغیرها را با نوع داده‌های اولیه اعلان کنیم، و همچنین متغیرهای اولیه و کلاسهای کمکیِ پیچیده آنها توضیح داده‌ایم.

لینک کمکی (official link) – آموزش کامل کار با متغیرهای اولیه (primitive variables) در جاوا

نوع داده‌های اولیه

در یک برنامه جاوا، متغیر، اساسی‌ترین واحدِ ذخیره‌سازی است. یک متغیر به وسیله ترکیبی از یک شناسه، یک نوع و یک مقداردهیِ اولیه اختیاری، تعریف میشود. علاوه براین، کلیه متغیرها دارای یک قلمرو هستند که رؤیت‌پذیریِ آنها را تعریف میکند و یک زمان حیات هم دارند که متعاقباً این اجزاء را مورد بررسی قرار خواهیم داد.
در این بخش از آموزش میخواهم نوع داده‌های مختلف و ویژگیهای هر کدام از آنها را به شما نشان بدهم. نوع داده یک متغیر در واقع جنس آن داده و مقدار حافظه‌ای که اشغال میکند را نشان میدهد.
تقریباً مثل همه زبانهای برنامه نویسی، جاوا هم، استفاده از متغیرها را برای ذخیره داده‌ها در حافظه یا باصطلاح memory پشتیبانی میکند. دو دسته اصلی از متغیرها یا نوع داده‌ها در جاوا وجود دارند، که با عنوان متغیرهای اولیه، یا (primitives)، و اشیاء یا آبجکتها از آنها یاد میشود.

منظور از نوع داده‌های اولیه چیست؟

متغیرهای اولیه که اصطلاحاً به آنها Primitive variables میگویند یا نوعهای داده که به آنها هم اصطلاحاً data types میگویند، برای ذخیره سازیِ اعداد، تک کاراکترها و مقادیرِ بولین استفاده میشوند.
و در سریعترین حافظه در دسترس ذخیره میشوند، تا بتوانید با بالاترین سرعتِ ممکن داده‌ها را بدست بیاورید.
نکته‌ای که اینجا باید بگویم این است که اسامیِ نوعهای داده اولیه را باید همه حروف آنرا به صورت حرف کوچک انگلیسی تایپ کنیم و این یک راه برای تشخیصِ آنها از نوعهای داده کلاسهای پیچیده است، و همانطور که قبلاً گفتم کلاسها همیشه حرف اولشان یک حرفِ بزرگ است.
پس تا اینجا متوجه شدیم که در جاوا دو دسته نوع داده وجود دارد، یکی نوع داده‌های اولیه برای ذخیره اعداد، رشته‌ها یا string ها و مقادیر بولین و دسته بعدی کلاسها یا اشیاء هستند. یعنی میشود یک متغیری از جنس آن کلاس یا شیءای که از قبل وجود داشته ایجاد کرد. اگر کمی صبر کنید در ادامه بیشتر با این نوعهای داده آشنا میشوید.
بیشتر مقادیر ساده‌ای که ممکنِ است در کدهای جاوا ذخیره سازی کنید از جنس نوع داده‌های اولیه یا primitive هستند. ولی یک نوع داده‌ای هم وجود دارد؛ که اصلاً جزء نوع داده‌های اولیه محسوب نمیشود و آن نوع داده string است که در واقع یک آبجکت یا شیء پیچیده است.

تعیین اعلان متغیرهای اولیه

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

int myVar = 5;

قسمتِ اولِ این عبارت همان نوع داده یا data type است.
و میگوید که این یک مقدارِ اینتیجر است. لازم به ذکر است که وقتی متغیری به عنوان یک اینتیجر تنظیم میشود، دیگر نمیتواند تغییر کند. در جاوا اسکریپت، مثلاً، میتوانید با چیزی مثل یک عدد شروع کنید و بعد میتوانید مقدار آنرا به string تغییر بدهید و میشود مقدار آنرا در زمانِ ران تغییر بدهید. ولی در جاوا، نمیتوانید اینکار را کنید، چونکه کامپایلر به این اعلان نگاه میکند و حافظه را براساس نوع داده‌ای که شما اعلان کردید اختصاص میدهد.
قسمت بعدیِ این اعلان شناسه متغیر، یا نام آن است، که اصطلاحاً هم به آن identifier میگویند.
بر اساس کنوانسیون و قردادهای نامگذاریِ جاوا، باید نام متغیرها یا شناسه‌ها همیشه با کاراکترها یا حروف کوچک شروع شوند. و بعد میتوانید برای کاراکترهای بعدی از حروفِ بزرگ هم استفاده کنید، مثلاً برای اینکه در یک شناسه اسامی را از هم متمایز کنید میتوانید از حروفِ بزرگ در وسط آنها استفاده کنید. در حقیقت، باید برای نامگذاریِ شناسه‌ها در کدنویسی در IDE هایی مثل برنامه IntelliJ IDEA، دقت کنید که نحوه خواندن آن درست باشد. باید حروف آنرا اسپل کنید تا مطمئن شوید که چیزی را بد تایپ نکرده باشید، بطوری که بقیه موقعِ خواندن کدها بتوانند به درستی متغیرهای مختلف را بخوانند و متوجه محل قرارگیری حروفِ بزرگ شوند.
درنهایت، مقداری که در سمتِ راستِ علامتِ مساوی قرار گرفته، اعلانِ دو قسمتِ اولِ این عبارت ضروری است. به سادگی میتوانید بگویید int myVar و عبارت را با یک semicolon تمام کنید، و میتوانید قسمتِ مقداردهی اولیه را حذف کنید. اگر خواستید مقداردهی اولیه کنید، فقط علامتِ مساوی را اضافه کنید و هر مقداری که دوست داشتید را بعد از علامت مساوی به متغیر اختصاص بدهید.
لازم به ذکر است که یک متغیر فقط در بلوکی که آنرا تعریف کردیم قابلِ دسترس است، یعنی مثلاً اگر متغیری در قلمرو کلاسِ main تعریف شود، در سایرِ کلاسها قابل دسترسی نخواهد بود. یک قلمرو تعیین کننده این است که چه اشیایی برای سایر بخشهای برنامه قابل رؤیت و قابل دسترسی هستند.

نوع داده‌های اولیه اعداد

در اینجا من نوع داده‌های اولیه را برای اعداد برای شما آوردم، که از کوچکترین مقدار حافظه شروع میشود تا بیشترین مقدارِ حافظه.
همه مقادیرِ اولیه علامتدار هستند، یعنی رنجِ هر کدام از این نوع داده‌ها از یک مقدار منفی تا یک مقدار مثبت است. نوع داده “بایت” هشت بیت از حافظه را اشغال میکند. به طوری که کمترین مقدار آن -128 و بیشترین مقدار آن 127+ است.
همچنین نوع داده short، int و long را برای اعدادِ صحیح داریم.
که هر کدام از اینها به صورت صعودی یک مقدار خاصی در حافظه را اشغال میکنند و یک رنجِ خاص رو به صورت صعودی برای خود دارند. رایجترینِ این نوع داده‌ها که بیشتر هم دیده میشود int است.
و مقدارِ حافظه‌ای که اشغال میکند 32 بیت است و رنجِ اعدادی که میتواند بگیرد هم از -2 billion شروع میشود تا مثبتِ 2 billion. البته اگر خواستید یک عدد صحیح خیلی بزرگ را در حافظه ذخیره کنید، میتوانید به جای آن از نوع داده long استفاده کنید.
دو نوع داده هم است که میتوانید برای ذخیره اعدادِ اعشاری از آنها استفاده کنید، float و double.
Float 32 بیتی است و double 64 بیتی است. مثل بقیه این دو نوع داده هم، مقادیر مینیمم و ماکسیمم در رنجِ اعداد منفی و مثبت را ساپورت میکنند، و میتوانید برای دیدن رنجِ دقیقِ مقادیری که ساپورت میکنند یک نگاهی به اطلاعات داکیومنشن آنها در جاوا بیندازید.
نوع داده دابل بیشتر موردِ استفاده قرار میگیرد. چون هم رنجِ وسیعی را در بر میگیرد و هم از بالاترین سطح از دقت برخوردار است.

کلاسهای کمکی معادل

هر کدام از این نوع داده‌های اولیه چیزی به نامِ کلاسِ کمکی یا helper دارند که بخشی از کتابخانه رانتایم جاوا محسوب میشود.
هر کدام از این کلاسها میتوانند با استفاده از یک منطقِ خیلی ساده برای تبدیلِ مقادیر از یک نوع داده اولیه به نوع داده دیگر و همینطور برای تغییر ساختار و فرمتِ این مقادیر استفاده شوند.
اینجا من کلاسهای کمکی را برای شما آوردم.
خب؛ نوع داده اولیه بایت است که کلاسِ کمکی آن کلاسِ Byte میباشد.
توجه داشته باشید که نامِ کلاس همیشه با یک حرف بزرگ شروع میشود و این بخاطر این است که بتوانیم بین نامِ کلاس و نامِ نوع داده تفاوت قائل شویم و بتوانیم آنها را از هم تشخیص بدهیم.
کلاس کمکی برای نوع داده short؛ هست Short، و کلاس کمکیِ نوع داده int هم Integer است.
و بقیه نوع داده‌ها، Long برای long و Float هم برای float.
در حقیقت، همانطور که میبینید بیشترِ کلاسهای کمکیِ نوع داده‌های اولیه، اسم آنها دقیقاً همان اسمِ نوع داده است، البته با این تفاوت که حرف اول آنها بزرگ است.
البته این گفته برای نوع داده اولیه int صدق نمیکند چون کلاسِ کمکی آن Integer است.

مثال از کلاس کمکی

حالا برای روشنتر شدنِ این مسئله یک مثال می‌آورم تا ببینید چطور میشود از کلاسهای کمکی استفاده کنیم.

java.lang.Double supports double values.

هر کدام از این کلاسهای کمکی عضوی از پکیجی با نامِ java.lang هستند. کلاسهای جاوا هم دقیقاً مثلِ کد شما، در کتابخانه رانتایم در پکیجها سازماندهی و قرار داده شدند. همه کلاسهایی که عضوی از پکیجِ java.lang هستند، همیشه در دسترس شما هستند؛ بدونِ اینکه نیازی به اعلانِ خاصی داشته باشند. یعنی برای استفاده از این کلاسها نیازی نیست که در بالا کد آنها را اعلان و فراخونی کنید. اگر خاطرتان باشد گفتم که قسمت بالا کد یکسری کلاسها هستند که باید ایمپورت شوند، منظور از اعلان هم همان ایمپورت کردنِ کلاسها است.
کلاسِ Double مقادیرِ از جنسِ نوع داده اولیه double را پشتیبانی میکند.
یک مثالی از اعلانِ یک مقدارِ double را اینجا برای شما آوردم.

double doubleValue = 156.5d;

قسمتِ اول آن double است، که میشود همان نوع داده. قسمت دوم هم شناسه متغیر یا نامِ متغیر است، که مثلاً اینجا نام آن doubleValue است، و قسمتِ سوم که مقدارِ متغیر است و من یک مقدار برای آن مشخص کردم. اگر دقت کنید یک حرف d در آخرِ این عبارت گذاشته شده. ببینید یک متغیر میتواند وقتی که دارد توسط کامپایلر تفسیر میشود به صورت float یا double تفسیر شود. و اینجا وقتی که در آخرِ عبارت حرف d به کار رفته یعنی به صراحت بیان شده که این متغیر از جنس double باشد.
بعداً میبینید که هر وقت که کامپایلر خودش به تنهایی نمیتواند نوع داده را تشخیص بدهد، از این کاراکترهای آلفا استفاده میشود.
خب؛ حالا من مقداری دارم با نامِ doubleValue و میخواهم که آنرا به مقدار دیگری تبدیل کنم.

byte byteValue = Double.byteValue(doubleValue);

پس یک متغیر با نامِ byteValue از جنس byte ایجاد و اعلان میکنم و بعد از یک متد از کلاسِ کمکیِ دابل با نامِ byteValue استفاده میکنم و متغیرِ doubleValue را به آن میدهم تا تبدیل به یک بایت شود. و در صورت لزوم مقادیر اعشاری گرد میشوند. یعنی اینکه اگر عددی اعشاری را خواستیم به عدد صحیح تبدیل کنیم قسمت اعشاری آن حذف میشود و عدد گرد شده را ایجاد میکند.
به صورت مشابه، کلاسِ دابل یک متد intValue، یک floatValue، و یک متد toString هم دارد.

int intValue = Double.intValue(doubleValue);
float floatValue = Double.floatValue(doubleValue);
String stringValue = Double.toString(doubleValue);

toString یک مورد خاص است. همه کلاسهای جاوا، یک متد با نامِ toString دارند که مسئول تبدیل یک شیء به نوعی رشته هستند، حالا چه آن شیء یک عدد باشد یا یک مقدارِ بولین یا یک شیء پیچیده‌تر. متدِ toString از کلاسِ کمکیِ دابل، دابل را به یک مقدار ساده رشته‌ای تبدیل میکند.

مقادیر پیشفرض عددی اولیه

همه متغیرهای عددی از جنس نوع داده‌های اولیه، مقادیرِ پیشفرضی دارند و همیشه مقدار پیشفرض آنها صفر است.
در اینجا تعدادی کد آوردم و یک متغیر با نامِ myInt هم تعریف و اعلان کردم. که نوع داده آن یک اینتیجر با مقدارِ 32 بیت است. ولی هیچ مقداری برای آن مشخص نکردم. و بعد آن مقدار را به عنوان بخشی از یک رشته در خروجی نمایش میدهم، به طوریکه اول یک رشته را مینویسم و بعد آن مقدارِ int یعنی myInt را به آخر آن الحاق و اضافه میکنم.

int myInt;
System.out.println("The value of myInt is " + myInt);

چونکه مقدارِ پیشفرض آن صفر است، خروجی به این شکلی است که میبینید: یعنی 

The value of myInt is 0

وقتی با یک علامتِ به علاوه یک مقدارِ عددی را به یک مقدارِ رشته‎‌ای متصل کنیم کلِ عبارت به صورت رشته در می‌آید و خروجی به این شکلی میشود که میبینید. در زبان جاوا، هنگامی که یک متغیر عددی با استفاده از علامت بعلاوه (+) با یک رشته (String) ترکیب میشود، بالطبع تمام عبارت ما به رشته تبدیل میشود. خب؛ در این بخش از آموزش  توضیحات مختصری دادم درمورد اینکه چطور متغیرها را با نوع داده‌های اولیه اعلان کنیم، و کمی هم در موردِ متغیرهای اولیه و کلاسهای کمکیِ پیچیده آنها توضیح دادم. در ویدئوی آموزشیِ بعدیِ به شما نشان میدهم که چطور میشود برخی از متغیرهای از جنس نوع داده‎‌های اولیه را اعلان و معرفی کرد و مقادیر آنها را در خروجی console برنامه IntelliJ IDEA نمایش داد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دوره ها
درس ها
طهاکو من
0