قسمت دوم آموزش جاوا

متغیرها قسمت دوم

در قسمت قبلی نوشتیم که در جاوا هشت نوع متغیر پایه داریم و در این قسمت قراره که در مورد این هشت نوع بیشتر یاد بگیریم !

از هشت نوع متغیری که ذکر شد چهارتاشون مخصوصاً بوجود اومدن که داخلشون فقط عدد صحیح ذخیره بکنیم! چرا میگم فقط ؟ چون اگر بخوایین چیز دیگه ای ذخیره بکنید جاوا براتون خطا میگیره ! این کار شبینه اینکه که بگین من میخوام یخچال رو در کارتن لباس شویی بزارم و همچین کاری شدنی نیست چرا که یخچال کارتن مخصوص خودش رو داره و در کارتن لباس شویی جا نمیشه . اگر فرض کنیم که متغیرها کارتن یا قاب هستن در نتیجه داخل هر قابی میشه جنس مخصوصی گذاشت ، برای مثال شما نمیتونید داخل قاب عکس جارو برقی بزارین چون قاب عکس مخصوصا ساخته شده که داخلش عکس بزارن نه چیز دیگه و متغیرها هم هر نوعشون ساخته شده که داخلشون داده مخصوص خودشون ذخیره بشه ، خب توضیح کافیه شروع کنیم ، از ۸ نوع داده پایه که گفتیم چهارتاشون مخصوص این هستن که داخلشون عدد صحیح ذخیره بکنیم.

حالا چرا چهارتا ؟ یکی نمیشد ؟  یه کارخانه پفک رو در نظر بگیرید ، سه نوع محصول داره ، یکیش از همشون کوچکتره و قیمتش ۵۰۰ تومنه ، یکیش یکم بزرگتره و قیمتش هزار تومنه ! یکیش خیلی بزرگه و قیمتش ۲ هزار تومنه ! حالا بیایین این مثال رو با متغیرهامون تطابق بدیم ، متغیرها رو اگر قاب پفک ها در نظر بگیریم میشه گفت که همشون شبیه هم هستن اما در اندازه تفاوت دارن و در یکیش پفک کمی جا میگیره ولی در یکیش پفک خیلی بیشتر و به همین علت هست که در جاوا ما ۴ نوع متغیر برای ذخیره کردن عددهای صحیح داریم و بنا به بزرگی عددمون باید داخل یکی از اونها ذخیره بکنیم ، راستی اسم این ۴ تا byte , short ,int,long هست . نوع داده یا متغیر byte از ۸ بیت ساخته شده ، short از ۱۶ بیت ساخته شده یعنی برای ساخت این متغیر ۱۶ بیت اشغال میشه ، نوع int از ۳۲ بیت تشکیل شده و نوع long از ۶۴ بیت !

خب حالا از کجا بفهمیم که چه عددهای صحیحی باید داخل هر کدوم از اینها ذخیره بکنیم ؟  

byte = -128 to +127
short = -32768 to +32767
int = -2^31 to +2^31-1
long = -2^63 to +2^63-1

نوشته های بالا رو با دقت ببیند ! بعد از تعریف هر متغیر بازه های عددی رو میبینید ، برای مثال در متغیر نوع short شما میتونید اعدادی رو ذخیره کنید که از بازه -۳۲۷۶۸ تا ۳۲۷۶۷ رو ذخیره کنید حتی یه عدد بیشتر ذخیره کنید جاوا بهتون گیر میده و برنامه شما کار نمیکنه ! راستی اینو بگم خود من هیچ وقت اینا رو حفظ نکردم شما هم نکنید ! بهتون قول میدم بعد یه مدت که افتادین به روال و شروع کردین به نوشتن برنامه و کار کردن عملی همه اینا میره تو مغزتون !!!!!! دقت کرده باشین متغیری از نوع long نسبت به بقیه چاق و چله تره و میتونه عددهای بزرگتری رو در خودش ذخیره کنه ، یعنی چی ؟ یعنی هر وقت خواستین که عددهای خیلی بزرگ ذخیره کنید از متغیر های long استفاده بکنید .

مثال :

byte money = 423434234;

کد بالا غیر ممکنه کار کنه ، چون که در کد بالا ما میخواییم با زور شتر رو از سوزن رد کنیم ، متغیر نوع byte خیلی کوچیکه و ما داخلش فیل ذخیره کردیم چیزی که غیر ممکنه !

مثال :

long age = 23 ;

کد بالا بدون هیچ ایرادی کار میکنه و جاوا برای ما ایراد نمیگیره اما یه ایراد داره ! بنظر شما کار عاقلانه ای هست که یه آدم تک و تنها  داخل خونه ۱۰ هزار متری زندگی کنه ؟ بدون شک کار عاقلانه ای نیست و ما در کد بالا همچین کاری کردیم ، نوع داده long خیلی بزرگه و حافظه زیادی رو اشغال میکنه و ما اومدیم داخلش عدد کوچیکی مثل ۲۳ رو ذخیره کردیم ! بهتره کد رو بالا رو اینطوری بنویسید تا برنامه تون زیاد حافظه رو اشغال نکنه :

int age = 23;

مثال :

int m = 11.50;

کد بالا کار نمیکنه ! آیا میشه در کارتن تلویزیون لباس شویی گذاشت ؟ نه نمیشه چون هر چیزی را بهر کاری ساخته اند و کارتن تلویزیون رو ساختن که داخلش تلویزیون بزارن نه لباس شویی اما ما در مثال بالا لباس شویی رو داخل کارتن تلویزیون گذاشتیم ، قبلا هم گفتم هر متغیر علاوه بر سایزی که داره نوع هم داره و ما در کد بالا فراموش کردیم که نوع متغیر int هست و فقط میشه داخلش عدد صحیح ذخیره کرد اما ما عدد اعشاری ذخیره کردیم برای همین کار نمیکنه !

خب الان که بحث عددهای اعشاری شد بریم سراغ اونا. در زبان جاوا دو نوع متغیر برای عددهای اعشاری داریم :

float , double

float  از ۳۲ بیت ساخته شده و double از ۶۴ بیت.

مثال :

double age = 23;

کد بالا بدون هیچ خطایی کار میکنه ! شاید الان بپرسین لامصب توکه همون بالا گفتی نمیشه داخل متغیری که برای عدد صحیح هست مثلاً int , byte و.. عدد اعشاری ذخیره کنیم پس چرا برعکس میشه و خطا نمیده ؟ چرا وقتی داخل متغیری که فقط میشه داخلش عدد شناور یا اعشاری ذخیره کرد عدد صحیح ذخیره میکنیم خطا نمیده که هیچ خوب کار میکنه ؟ در جواب باید بگم که وقتی در متغیرهای float,double عدد صحیح ذخیره میکنیم خود جاوا تبدیلشون میکنه به عدد اعشاری ، مثلا در کد بالا ما عدد ۲۳ ذخیره کردیم اما جاوا تبدیلش میکنه به : ۲۳٫۰

مثال :

float m = 13.50;

کد بالا کار نمیکنه ! وقتی ما میخواییم نوع داده اعشاری ثابتی تعریف بکنیم جاوا به صورت ذاتی اون رو در داخل متغیری از نوع double ذخیره میکنه چون دقتش در اعداد اعشاری خیلی بیشتره اما برای اینکه بتونیم داخل float هم ذخیره بکنیم میتویم دستور بالا رو به شکل زیر بنویسم که صحیح هست :

float m = 13.5F;

خب شاید اون حرف F که در آخر عدد اعشاری هست توجه شما رو جلب کرده باشه و بپرسین که چی هست ؟ ما با گذاشتن این حرف در آخر عدد اعشاری به جاوا گفتیم که : عمو جون تو فکر میکنی این داده از نوع double هست اما در حقیقت این داده از نوع float هست پس رفتار بی تربیت پیش فرض خودت رو عوض کن !

راستی میتونید بجای کد بالا و نوشتن حرف F در آخر عدد اینکار رو بکنید :

float m = (float) 13.50;

قسمت آبی رنگ چیه ؟ به این کار در برنامه نویسی caste میگن ! یعنی ما داده رو از یک قالب به قال دیگه تغییر میدیم ، مثلاً فکر کنید که یه متغیر از نوع عدد صحیح دارید و یه نوع متغیر دیگه از نوع عدد اعشاری و میخوایین که داخل متغیر عدد صحیح داده متغیر عدد اعشاری رو ذخیره بکنید ، یعنی میخوایین داده double رو در int ذخیره بکنید ، آیا همچین کاری ممکنه ؟ بله !  تو که قسمت بالا گفتی هر نوع متغیری میتونه فقط یجور عدد ذخیره بکنه پس چطور ممکنه متغیری که فقط میتونه عدد صحیح رو ذخیره بکنه عدد اعشاری داخلش ذخیره بکنیم ؟ خب ما عدد اعشاری ذخیره نمیکنیم که ، ما عدد اعشاری رو تبدیل به صحیح میکنیم بعد داخلش ذخیره میکنیم ، مثال:

double m = 13.50;

int myInt = m;

کد بالا اشتباهه و کار نمیکنه . ما میخواییم عدد ۱۳٫۵۰ رو که شناور هست داخل متغیر myInt ذخیره کنیم در حالی که این متغیر از نوع int هست و داخلش فقط میشه عدد صحیح ذخیره کرد ، خب حالا چیکار کنیم که بشه داخلش ذخیره کرد ؟ بالا گفتم باید caste بکنیم :

double m = 13.50;

int myInt = (int) m;

کد بالا بدون هیچ ایرادی کار میکنه ! ما یه متغیر تعریف کردیم از نوع double با نام m و داخلش عدد ۱۳٫۵۰ رو ذخیره کردیم. بعد در خط دوم یه متغیر دیگه تعریف کردیم اما این بار از نوع  int و بعد مقداری رو که متغیر اول ذخیره کرده بود در این هم ذخیره کردیم اونم از طریق قسمت قرمز رنگ یعنی (int) ، ما از طریق این قسمت رنگ به جاوا گفتیم که داده ای رو که متغیر m در خودش ذخیره کرده تبدیلش کن به int ،بعد داخل متغیر myInt  ذخیره کن ! اگر تبدیل نکنید محاله این کد کار بکنه ، چون هیچوقت نمیشه داخل قوطی کبریت گاز فندک ذخیره کنید و هر قابی برای شی مخصوصی ساخته شده !

خب ما یه نوع داده دیگه بنام char هم داریم که مخفف character هست ، کارش چیه ؟ این نوع متغیر از ۱۶ بیت ساخته شده و میتونه یه کاراکتر رو در خودش ذخیره بکنه !

مثال :

char name = ‘h’;

خب ما در مثال بالا یه متغیر از نوع char تعریف کردیم به نام name و داخل اون حرف h رو ذخیره کردیم ، دقت کنید باید کاراکتر رو بین دو علامت ‘ ذخیره بکنید وگرنه کدتون کار نمیکنه ! وقتی کامپایلر جاوا میرسه به علامت ” میفهمه که باید داخل این یه کاراکتر ذخیره شده باشه و اگر این علامت رو نزارین کار نمیکنه !!

مثال :

char me = ‘morteza’;

مثال بالا غلطه ! متغیر از نوع char فقط میتونه یه کاراکتر در خودش ذخیره بکنه و ما در مثال بالا چندین کاراکتر ذخیره کردیم ! انگار داخل یه قوطی کبریت میخواییم با زور یه کیلو چوب کبریت بزاریم!!

مثال :

char start = ‘*’;

char plus =’+’;

char one = ‘1’;

در مثال های بالا ما متغیری از نوع char تعریف کردیم با نام های مختلف و داخلش کاراکترهای مختلف ذخیره کردیم .

مثال :

char ch = 65;

خب به نظر شما مثال بالا کار میکنه ؟؟؟ اصولا چون در بالا گفتیم که در هر نوع متغیر باید داده مخصوص اون نوع متغیر ذخیره بشه پس نباید کار بکنه ! چون ما اومدیم عدد صحیح رو داخل یه متغیر از نوع char که فقط میشه داخلش کاراکتر ذخیره کرد ذخیره کردیم و این کار غلطه اما کد بالا به راحتی کار میکنه ! چرا ؟ چون شما وقتی داخل char عدد ذخیره میکنید در حقیقت دارین کد اسکی اون رو داخلش ذخیره میکنید. فراموش نکنید که کامپیوتر هیچ درک و فهمی از حروف نداره و تنها چیزی که میفهمه صفر و یکه !

خب ما یک نوع متغیر دیگه هم داریم به نام boolean که داخلش میشه فقط دو حالت منطقی درست و غلط رو ذخیره کرد و فقط از یک بیت ساخته شده !

مثال :

boolean me = 0;

boolean you = 1;

مثال :

boolean hello = 66;

کد بالا غلطه و کار نمیکنه چون داخل boolean میتونید فقط آره و نه ذخیره کنید !!

مثال :

boolean yes = true;

boolean no  = false ;

شما در برنامه نویسی میتونید بجای استفاده از عدد صفر از عبارت false (غلط) استفاده کنید و بجای عدد یک هم از true

خب دوستان تا حدودی با متغیرها آشنا شدید و درجلسات بعدی یواش یواش یکم برنامه نویسی قراره جذابتر بشه ، فی امان الله

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