برنامه نویسی جاوا – قسمت چهارم

جمعه, ۶ام آذر , ۱۳۸۸ | ۸ دیدگاه

در این قسمت به بحث در مورد داده ها در زبان برنامه سازی جاوا می پردازیم. این نام آشنا که در تمام زبان های برنامه سازی مدرن وجود دارد یکی از عناصر پایه جاوا هست. جاوا از انواع داده ها پشتیبانی می کند که از این داده ها می توانید برای تعیین انواع متغیر ها و ایجاد آرایه ها استفاده کنید.

جاوا زبانی است که نوع داده ها به شدت در آن کنترل می شود و در واقع بخشی از امنیت و استحکام جاوا از این امر ناشی می شود. این کار یعنی اینکه: نخست  هر متغیر نوعی دارد؛ هر عبارت نوعی دارد و هر یک از انواع داده ها به دقت تعریف شده اند و دوم اینکه هنگام تخصیص تمام مقادیر چه به طور صریح و چه از طریق ارسال پارامتر در حین فراخوانی متد ها سازگاری نوع داده ها بررسی می شود. بر خلاف برخی از زبانها ؛ تبدیل خودکار انواع داده های سازگار در جاوا انجام نمی گیرد. کامپایلر جاوا تمام عبارتها و پارامتر ها را جهت حصول اطمینان از سازگاری انواع داده ها بررسی می کند. عدم نطبیق نوع داده ها ؛ خطاهایی هستند که می بایست پیش از پایان کامپایل شدن هر کلاس تصحیح شوند.

انواع داده های پایه

هشت نوع داده پایهPrimary  در جاوا تعریف شده است: byte,short,int,long,char,float,double,Boolean که به آنها داده های ساده نیز گفته می شود.ما در این درسنامه این نوع داده ها را در چهار گروه تقسیم می کنیم:

۱-     اعداد صحیح: شامل byte,short,int,long که اعداد کامل علامت دار را شامل می شود

۲-     اعداد اعشاری با ممیز شناور: شاملfloat و double که نمایانگر اعداد اعشاری هستند

۳-     کاراکترها: شاملchar که نمایانگر انواع داده ها در مجموعه کاراکتر ها است از قبیل حروف و ارقام

۴-     بولی: شاملboolean که نوع ویژه ای برای نمایشtrue وfalse است

شما می توانید برای این نوع داده ها دسته بندی مخصوص به خودتان را داشته باشید اما متوجه می شوید که دسته بندی داده ها در جاوا کم اهمیت ترین کار است هر چند خود داده ها و زیر مجموعه های آنها بسیار مهم هستند.

انواع داده های پایه؛ نمایانگر مقادیر واحد هستند و نه شی های مرکب. گرچه جاوا کاملا شی ء گرا است اما انواع داده های پایه اینگونه نیستند و مشابه انواع داده های پایه ای هستند که در اکثر زبانهای غیر شی ء گرا یافت می شود. دلیل این امر کارایی و بازدهی است. تبدیل انواع داده های پایه به شی ء ها فقط باعث از دست رفتن کارایی می شود. انواع داده های پایه به گونه ای تعریف می شوند تا محدوده و رفتار ریاضی معین داشته باشند. زبانهایی مانندC و C++ امکان تغییر اندازه اعداد صحیح را بر اساس شرایط محیط اجرا دارند اما جاوا اینطور نیست. به دلیل نیاز به داشتن قابلیت انتقال؛ محدوده انواع داده ها ثابت است. شاید این روش کارایی برنامه را تا حدودی کم کند اما برای داشتن قابلیت انتقال ضروری است.

۱- اعداد صحیح

در زبان جاوا ۴ نوع عدد صحیحinteger تعریف شده است: byte,short,int, long  . تمام این انواع علامت دار هستند یعنی شامل بازه های اعداد مثبت و منفی می باشند.

طول اعداد صحیح ؛ مقدار فضای مصرفی آنها در حافظه نیست بلکه رفتار متغیر ها و عبارتهای آن نوع را مشخص می کند. محیط زمان اجرای جاوا می تواند از هر اندازه ای استفاده کند مشروط به این که متغیر ها و عبارتها متناسب با نوع داده تعریف شده رفتار نمایند.

جدول اعداد صحیح:

نام طول محدوده مقادیر
long ۶۴ -۹٫۲۳۳٫۳۷۲٫۰۳۶٫۸۵۴٫۸۰۸ تا-۹٫۲۳۳٫۳۷۲٫۰۳۶٫۸۵۴٫۸۰۷
int ۳۲ -۲٫۱۴۷٫۴۸۳٫۶۴۸ تا ۲٫۱۴۷٫۴۸۳٫۶۴۷
short ۱۶ -۳۲٫۷۶۸ تا  ۳۲٫۷۶۷
byte ۸ -۱۲۸ تا ۱۲۷

Byte

کوچکترین نوع اعداد صحیح است. متغیرهای نوع بایت به خصوص هنگام کار با جریانی از داده های یک شبکه یا فایل مفید می باشند .همچنین هنگام کار با داده های باینری خاص که ممکن است مستقیما با سایر انواع داده های تو کار جاوا سازگار نباشند؛ مفید هستند.

Byte b,c;

Short

این نوع داده ها احتمالا کمترین استفاده را در جاوا دارند زیرا تعریف آنها به گونه ای است که نخستین بایت سمت راست آنها بیشترین ارزش را دارد(فرمتbig-ending ). این نوع داده ها در کامپیوتر های ۱۶ بیتی که در حال کم شدن هستند کاربرد دارند.

Short   s;

نکته:

Endianness واژه ای است که چگونگی ذخیره سازی داده های چند بایتی از قبیل short, int,long در حافظه را توصیف می کند. اگر ۲ بایت برای داده های نوع short لازم باشد بایت با ارزش بیشتر یا بایت با ارزش کمتر در ابتدا قرار می گیرد؟ این که گفته می شود کامپیوتری big-ending است یعنی ابتدا بایت با ارزش بیشتر ذخیره می شود و سپس بایت با ارزش کمتر قرار می گیرد. کامپیوتر هایی مانند SPARC وPowerPC هز این نوع هستند و کامپیوتر های نوع  اینتل و سریX86 از نوع  little-ending .

Int

متغر های نوع int علاوه بر کاربردهای دیگر برای کنترل حلقه ها و به عنوان شاخص  آرایه ها نیز به کار برده می شوند. هرگاه با عبارتی متشکل از داده های نوعbyte,short  و int و لیترال سروکار داشتید کل عبارت پیش از انجام محاسبات به int ارتقا می یابد.

Long

این نوع داده برای شرایطی مفید واقع می شود که int برای نگهداری مقدار مورد نظر به اندازه کافی بزرگ نباشد.

به قطعه برنامه زیر توجه کنید. این برنامه مسافتی که  نور در مدت روزهای مشخص شده طی می کند را نشان میدهد.

//compute distance light travels using long variables.
Class Light{
Public Static Void main(String args[]) {
Int lightspeed;
long days;
long seconds;
long distance;
//approximate speed of light in miles per second
lightspeed=186000;
days=1000; //specify number of days here
seconds=days*24*60*60;// convert to seconds
distance=lightspeed*seconds; // comute distance
System.out.print(“In” +days);
System.out.print(“days light will travel about”);
System.out.println(distance+”miles.”);
}
}

Out put:

In 1000 days light will travel about 16070400000000 miles.

واضح است که خروجی را نمی توان در قالب int نگهداری کرد.

۲- انواع داده های اعشاری با ممیز شناور

این نوع داده ها را real نیز می نامیم و برای ارزیابی عبارتهایی مفید هستند  که نگهداری قسمت اعشاری آنها ضروری باشد. مجموعه استاندارد(IEEE-754) عملگر ها و داده های اعشاری با ممیز شناور در جاوا پیاده سازی شده است.

رایه ا

نام طول بر حسب بیت محدوده تقریبی مقادیر
double ۶۴ ۱٫۸* e308 تا ۴٫۹* e-324
float ۳۲ ۱٫۴*e-45 تا ۳٫۴*e38

Float

Float نمایانگر مقادیر اعشاری با دقت ساده است. دقت ساده sigle-precision در برخی از پردازنده ها سریعتر است و به اندازه نصف دقت مضاعف به فضای ذخیره سازی نیاز دارد اما برای مقادیر خیلی بزرگ یا خیلی کوچک نتایج نادرست میدهد. این نوع برای زمانی مفید است که جزء اعشاری نیاز باشد.

Float hightemp, lowtemp ;

Double

از این نوع برای دقت مضاعف double-precision استفاده می شود. دقت مضاعف در برخی ار پردازنده های مدرن که برای محاسبات ریاضی با سرعت بالا ؛ بهینه شده اند سریعتر است. از double برای زمانی که نیاز به حفظ دقت محاسبات در محاسبات تکراری است و یا هنگام پردازش و مدیریت اعداد بسیار بزرگ  استاده می شود.

۳- کاراکتر ها

در جاوا برای دخیره سازی کاراکتر ها از char استفاده می شود اما برنامه سازان C/C++ باید بدانند که char در C/C++ عدد صحیحی به طول ۸ بیت است اما در جاوا اینطور نیست.

جاوا از یونی کد برای نمایش کاراکتر ها استفاده می کند. یونی کد مجموعه  کاراکتر های کاملا بین المللی است که می تواند نمایانگر تمامی کاراکتر های موجود در تمامی زبانها باشد. یونی کد در واقع شامل کاراکتر های بیشماری مانند لاتین ؛ یونانی ، عربی؛ اسلاو ؛ ژاپنی و … است به همین دلیل به ۱۶ بیت نیاز دارد. محدوده char از صفر تا ۶۵۵۳۶ است و char منفی وجود ندارد. مجموعه کاراکتر های استاندارد اسکی در محدوده صفر تا ۱۲۷ است و مجموعه کاراکتر های ۸ بیتی گسترش یافته (ISO-Latin-1) در محدوده صفر تا ۲۵۵ است.

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

//char variables behave like integers.
class CharDemo2{
public Static Void main(String args[]) {
char ch1;
ch1=’x’;
System.out.println(“ch contains”+ch1);
Ch1++; //increment ch1
System.out.println(“ch1 is now” +ch1);
}
}
Out put: ch1 contains x
Ch1 is now y

ابتدا مقدارx به ch1 داده می شود و بعد ch1 افزایش داده می شود که این کار موجب ذخیره شدن y درch1 می شود. یعنی کاراکتر بعد ازx در مجموعه اسکی و کد یونی.

۴- داده های بولی

این نوع داده برای مقادیر منطقی است و تنها یکی از دو مقدار true یا false را میتوان به آنها نسبت داد.

نگاهی دقیقتر به لیترال

اگه شما هم مثل من تو تعریف لیترال مشکل دارید این تعریف رو بخونید. من همیشه از لیترالها استفاده می کردم ولی راستشو بخواین کمتر می دونستم لیترال واقعا چیه تا اینکه استاد محترمی به من یه تعریف جدید داد.

اگه شما از یک نوع مثلint,char یا هر نوع دیگه ای ؛بدون ذکر نوعش استفاده کنید در واقع لیترال اون نوع رو استفاده کردید و برنامه به طور خودکار اون نوع را برای  شما در نظر میگیره, مثلا اگه بنویسید

‘x’;

X++;

کامپایلر x رو از نوع char در نطر میگیره و محاسباتو روش انجام میده. پس خیلی طبیعی که به تعداد انواع ؛ لیترال تعریف کنیم پس لیترال صحیح؛ لیترال اعشاری؛ لیترال بولی؛ لیترال کاراکتری و لیترال رشته ای خواهیم داشت که در اینجا به بررسی اونا می پردازیم:

لیترال های صحیح

اعداد صحیح متداولترین نوع داده ها در برنامه ها هستند و هر مقدار عددی کامل یک لیترال صحیح به شمار می آید مثل ۱و ۲ یا ۲۴٫

تمامی این مقادیر دسیمال(مبنای ۱۰) هستند. دو مبنای اکتال(مبنای هشت) و هگزادسیمال(مبنای ۱۶) هم در لیترال های صحیح قابل استفاده هستند. در جاوا رقم صفر در ابتدای اعداد اکتال قرار می گیرد. وجود صفر در ابتدای اعداد دسیمال بی معنی است از این رو مقدار به ظاهر درست۰۹ ایجاد مشکل می کند و کامپایلر خطا می دهد زیرا ۹ در خارج  از محدوده  صفر تا اکتال قرار دارد.

هگزا دسیمال به خوبی با word های مضرب ۸ مثل ۸؛۱۶؛۳۲ و ۶۴ بیت مطابقت دارد. مشخصه اعداد هگزا دسیمال وجود۰x در ابتدای آنها است. محدوده این اعداد از صفر تا ۱۵ است بنابراین A تاF (aتاf) جایگزین ۱۰ تا ۱۵ می شوند.

//توهین به رشته های تحصیلی دیگه نمی کنم این تعریف یک خاطره است. تمام مواردی که در بالا گفته شد بر میگرده به اطلاعات ریاضی. یه استاد محترم در طول دوران تحصیل داشتیم که  می گفت این مبنا ها رو در سوم دبستان یاد گرفتیم و می فرمودن که اگه اینارو بلد نیستید برید تغییر رشته بدید و برید رشته کتابداری که براش کار باشه. من که یادم نمی یاد اینارو تو پایه سوم برامون گفته باشن و تازه اگه هم گفته باشن با این سطح بالای آلزایمر که یادم نمی مونه اما یه جورایی بهتره پایه ریاضیمونو قوی کنیم. امیدوارم تمام استادا و معلم ها زنده باشن و سلامت.//

متن بالا همون طور که می بینید یه comment بود و ربطی به مطالب درس نداره.

لیترال ها ی صحیح موجب ایجاد مقادیر int می شوند که در جاوا ۳۲ بیتی هستند . چون نوع مقدار متغیر ها به شدت در جاوا کنترل میشه ممکن هست این سوال پیش بیاد که چطور ممکن است یک لیترال صحیح را بدون بروز خطای عدم تطبیق به سایر داده های نوع صحیح مثلbyte یا long تخصیص داد؟ وقتی یک مقدار صحیح به یک متغیر byte یا short نسبت داده میشه اگر لیترال در محدوده نوع مقصد باشه  هیچ خطایی پیش نمیاد  همچنین یک متغیر صحیح رو همیشه می تونیم به یه متغیرlong نسبت بدیم  اما برای استفاده از یک لیترال long باید صراحتا برای کامپایلر مشخص کنید که از نوع long است.این کار با اضافه کردن یک L یا lبه انتهای سمت راست مقدار لیترال انجام میشه. بزرگتریم مقدار لیترال long است.

لیترالهای اعشاری

اعداد اعشاری با ممیز شناور نمایانگر اعداد دسیمال با بخش اعشاری هستند. این اعداد را می توان به صورت استاندارد یا با نماد علمی نمایش داد. در حالت استاندارد یک عدد اعشاری با ممبز شناور را اینطور می نویسیم: مثلا ۲٫۵ در نماد علمی از مقدار استاندارد؛ عدد اعشاری با ممیز شناور و پسوندی که نمایانگر توانی از ۱۰ است استفاده می شود. توان به صورت E یا e و یک عدد دسیمال نمایش داده می شود که یا مثبت است یا منفی: ۶۰۰۲۲e23 . در جاوا به طور پیش فرض از دقت مضاعف برای لیترال های اعشاری با ممیز شناور استفاده می شود و برای مشخص کردن لیترال های float باید یکF یاf به انتهای آنها بیفزاییم. البته می توانید با افزودنD(d) لیترالdouble بسازید اما این کار ضرورتی ندارد چون گفتیم که به طور پیش فرض لیترالهای اعشاری با ممیز شناورdouble فرض می شوند.

لیترالهای بولی

این لیترالها تنها دو مقدار منطقی true یا false را می پذیرند که به هیچ وجه به نمایش عددی تیدیل نمی شوند. لیترالtrue در جاوا برابر۱ نیست و false هم برابر ۰ نیست این مقادیر در جاوا تنها؛ متغیر های بولی قابل تخصیص هستند و یا در عبارتهای بولی همراه با عملگر های بولی قابل استفاده هستند.

لیترالهای کاراکتری

کاراکتر ها در جاوا ایندکس های مجموعه کاراکتر های یونی کد به شمار می آیند. کاراکتر ها مقادیر ۱۶ بیتی هستند که قابل تبدیل به اعداد صحیح بوده و با عملگرهایی مانند”+” و “-” قابل پردازش و مدیریت هستند. هر لیترال کاراکتری در بین علامت double quote یا(” “) نمایش داده می شوند. تمام کاراکتر های اسکی قابل رویت را می توان به این صورت نوشت و آنهایی را هم که مستقیما قابل نوشتن نیستند می توان از”escape sequence” استفاده نمود که امکان وارد کردن کاراکتر های مورد نیاز را فراهم می کند. مثلا’\” به جای کاراکتر علامت نقل قول تکی و’\n\ به جای کاراکتر نمایانگر سطر جدید.

برای وارد کردن کاراکتر به صورت اکتال یا هگزا دسیمال هم مکانیزمی وجود دارد: برای کاراکتر های اکتال از’\’ و سپس عدد سه رقمی مانند ‘\۱۴۱’  نمایانگر حرف ‘a’ است.برای هگزا دسیمال هم ‘\u’ و سپس چهار رقم هگزا دسیمال مانند ‘\u0061’ حرف ‘a’ در مجموعه کاراکترهایISO-Latin-1 است زیرا بایت اول ۰ است.

فهرست این کاراکتر ها را به عنوان یه homework در بیارید.

لیترال های رشته ای

لیترال های رشته ایstring هم چون زبانهای دیگر اینطور نوشته می شوند:

“Hello World”

“I Like computer programming”

تمامی قراردادهایی که در مورد لیترالهای کاراکتری گفتیم برای لیترالهای رشته ای هم صدق می کند. نکته مهم درباره رشته ها در جاوا این است که رشته ها باید در یک سطر آغاز و خاتمه بیابند و هیچ گونه کاراکتر ادامه خط وجود ندارد.

نکته:

رشته ها در زبانهایی مانند C\C++ به صورت آرایه ای از کاراکتر ها هستند اما در جاوا این گونه نیست. رشته ها در واقع شی ء هستند و چون جاوا رشته ها را به صورت شی ء پیاده سازی می کند قابلیت های زیادی برای مدیریت آن دارد که هم قدرتمند هستند و هم آسان.

کاراکتر های Escape Sequence

Escape Sequence شرح
\ddd Octal Character(ddd)
\uxxxx Hexadecimal Unicode character(xxxx)
\’ Single quote
\” Double quote
\\ Backslash
\r Carriage return
\n New Line(also known as line feed)
\f From feed
\t Tab
\b Backspace

خوب اینم از Unit4 . درسنامه های جاوا  درسنامه های طولانی هستند و در این درسنامه ها من می خوام برای کسانی که جاوا اولین زبانی هست که یاد می گیرن ؛ مطالب جامع بذارم و خوب دوست دارم همه چیزو کامل توضیح بدم .حتی خیلی از ما ها که پیشینه یه زبان دیگه رو داریم هم اکثرا خیلی از سر فصل های اون زبان رو طوطی وار یاد گرفتیم و از پیشینه اش خبر نداریم پس بد نیست که اینجوری اطلاعاتمونو تکمیل کنیم.

مثل سابق اگه سوالی داشتید به این آدرس برام بفرستید:

shoneDame2294@yahoo.com

موفق باشید

مینا هوشمند

پستهای مرتبط :

آموزش جاوا – قسمت ۳

آموزش جاوا – قسمت ۲

آموزش جاوا – قسمت ۱

Be Sociable, Share!


۸ دیدگاه


  1. هادی
    ۷ آذر ۱۳۸۸

    خسته نباشید!
    کم کم داشتم از ادامه نا امید می شدم و یادگیریش رو به انبار چیزهائی که میخواستم و نمی شده می فرستادم.
    داداش من ولی اینبار ترکوندی!
    موفق باشی




  2. کامران
    ۸ آذر ۱۳۸۸

    نه هادی جان خیالت راحت، مینا خانم تا آخر این راه رو ادامه میده




  3. امید
    ۱۳ آذر ۱۳۸۸

    سلام بر جناب کامران خان و سرکار خانم هوشمند.
    امشب اتفاقی گذرم اینحا افتاد . وقتی مطلب آموزش جاوا رو دیدم کنجکاو شدم به نگاهی بندازم. استفاده بردیم. ممنون میشم در صورتی که فرصت داشتید مطالب رو به طور مرتب در یک بازه زمانی مشخص ارائه بدید. مثلا هر هفته با دو هفته!
    به هر حال خسته نباشید و خدا قوت.




  4. کامران
    ۱۳ آذر ۱۳۸۸

    سلام ممنون امید جان
    روالش هفته ای یکبار هست جمعه ها یا پنجشنبه شب.
    فردا قسمت بعدی آپلود میشه
    ممنون از تذکری که دادی




  5. ali
    ۱۹ آذر ۱۳۸۸

    سلام
    خسته نباشید،مطالب بسیار مفیدی ارائه میدین.

    میخواستم بدونم چرا قالب وبلاگم با فایرفاکس مشکل داره؟




  6. کامران
    ۱۹ آذر ۱۳۸۸

    در طراحی و کد نویسی قالب باید نکاتی رعایت بشه و مخصوصا در CSS نویسی و خیلی از مواقع پیش میاد که قالب با یکی از مزوزگرها مشکل داشته باشه
    اما اگر قالب شما با فایرفاکس مورد داره یعنی قالب استانداردی استفاده نمیکنی




  7. reza belon
    ۲۶ آذر ۱۳۹۰

    merci khaste nabashi mina khanom kheily be dardam khord merci merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii




  8. shima
    ۱۷ بهمن ۱۳۹۰

    salam, be ghovle Mr.reza vaghean merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii



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