جاوا

1- آشنایی با مبانی جاوا

در این فصل با زبان جاوا، تاریخچه، ویژگی ‎ها و جایگاه آن آشنا خواهیم شد، و در مورد اینکه چرا جاوا زبان مهمی هست صحبت خواهیم کرد. در آخر با نحوه‎ی نصب و راه‎اندازی جاوا برای برنامه‎نویسی آشنا خواهیم شد و اولین برنامه به زبان جاوا را می نویسیم و کامپایل و اجرا می کنیم.

1,1- درباره جاوا

جاوا یک زبان و در واقع یک فن آوری برنامه نویسی است. یکی از پرکاربردترین زبان‎های برنامه نویسی دنیا و ایران در حال حاضر است. استفاده از زبان جاوا برای همگان رایگان است و متن پیاده سازی این زبان نیز به صورت آزاد در اختیار عموم است (اصطلاحا این زبان متن باز یا open source است). برنامه هایی که به این زبان نوشته می شوند روی انواع سیستم های مختلف مستقل از سخت افزار و سیستم عامل آنها قابل اجرا هستند. و در نهایت جاوا زبانی ساده و شی گرا (object oriented) است.

1,2- تاریخچه

طراحی اولیه این زبان در سال 1991 توسط James Gosling در شرکت Sun Microsystem انجام شد. ساختار و گرامر زبان جاوا بسیار شبیه زبان C و C++ است. در ابتدا این زبان Oak (بلوط) نامگذاری شد، به افتخار درخت بلوطی که کنار پنجره اتاق آقای گاسلین روییده بود. اما کمی بعد به علت وجود زبان دیگری که قبلا به این نام ثبت شده بود، این زبان این بار با الهام از فنجان قهوه ی جاوایی که روی میز کار آقای گاسلین قرار داشت، جاوا نام گرفت. همین طور که می بینید طراحان این زبان حتی در نام گذاری هم سخت گیری نکرده اند و سعی کرده اند این سادگی در تمامی این زبان چه برای برنامه نویسان و چه برای کسانی که کدها جاوا را میخوانند رعایت کنند.

شرکت سان اولین نسخه جاوا را در 1995 منتشر کرد، در سال 2010 شرکت سان توسط شرکت Oracle خریده شد و در حال حاضر این شرکت مالک معنوی جاواست و انتشار نسخه های جاوا توسط اوراکل انجام می شود.

1,3- انگیزه طراحی زبان جاوا

انگیزه و طرح اولیه در ذهن طراحان جاوا طراحی زبانی مستقل از سکو (platform independent) بود، یعنی زبانی که مستقل از سخت افزار و سیستم عامل و سایر عوامل محیطی بتواند کار کند و برنامه هایی

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

از طرف دیگر در همان سال ها اینترنت و وب هم در حال رشد و فراگیر شدن بودند و جاوا می توانست برای برنامه نویسی اینترنت هم مورد استفاده قرار بگیرد چرا که اینترنت مجموعه ای سیستم های مختلف (از نظر سخت و نرم افزاری) است و برنامه های جاوا به علت مستقل از سکو بودند برای این منظور مناسب بودند. برای این کاربرد java Applet ها ایجاد شدند و اهمیت پیدا کردند، جاوا اپلت ها برنامه هایی به زبان جاوا با قابلیت استفاده در فضای مجازی بودند.

1,4- امروز و جاوا

اما امروز شرایط تا حدودی تغییر کرده است.

  • نسخه ی سازمانی جاوا (Java Enterprise Edition) در سمت سرور بسیار پر استفاده است، و از آن برای کاربردهای خدمات اینترنت و وب کمک گرفته می شود.
  • در قسمت تلفن های همراه جاوا در قالب سیستم عامل اندروید حضور یافته.
  • و در دستگاه های الکترونیکی به صورت Java Micro Edition استفاده می شود.
  • در کارت های هوشمند نیز به صورت Java Card مورد استفاده قرار می گیرد.

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

  • زبان برنامه نویسی که برای تولید انواع برنامه ها در کاربردهای مختلف مورد استفاده قرار می گیرد.
  • و محیط توسعه شامل کامپایلر (javac)، اجرا کننده (java)، مولد مستندات (Javadoc) و بسیاری امکانات توسعه دیگر که در کنار هم فن آوری جاوا را تکمیل می کنند.

همچنین این اکوسیستم شامل شرکت های مختلف و نرم افزارهای بسیار متن باز و متنوعی هست که این فضا رو برای تولید نرم افزار، بهتر و  پیشرفته تر می کنند.

1,5- جاوا و زبان های سطح بالا

بسیاری از زبان های برنامه نویسی که می شناسیم زبان هایی سطح بالا هستند، زبان های سطح بالا، زبان هایی هستند که از سطح زبان ماشین انتزاعی تر و به سطح تفکر انسان نزدیک تر هستند، همان طور که در شکل می بینید، زبان ماشین، شامل صفر و یک هایی هست که سخت افزار آنها را می فهمد، زبان اسمبلی که بر مبنای زبان ماشین نوشته شده است با استفاده از برچسب هایی برنامه نویسی را برای انسان ساده تر کرده است، اما بسیاری از زبان هایی که ما می شناسیم از این هم انتزاعی تر و به زبان انسان نزدیک تر هستند، مانند C،  Fortran، Pascal و زبان هایی از این دست، از این منظر زبان جاوا هم یک زبان سطح بالاست.

1,6- ماشین مجازی جاوا

در اجرای برنامه های جاوا یک مولفه خاص به نام Java Virtual Machine یا همان ماشین مجازی جاوا وجود دارد که در واقع برنامه های جاوا با کمک این مولفه اجرا می شوند، همان طور که می دانید مهم ترین لایه ی نرم افزاری که روی سخت افزار اجرا می شود سیستم عامل است، مانند ویندوز، لینوکس، مک یا هر سیستم عامل دیگری که روی سخت افزار اجرا می شوند و برنامه های ما را اجرا می کنند. در واقع برنامه های ما معمولا روی سیستم عامل اجرا می شوند، اما برنامه های جاوا دارای یک لایه ی واسط به نام JVM (مخفف ماشین مجازی جاوا)  هستند که این واسط روی سیستم عامل و برنامه های جاوا توسط JVM اجرا می شوند.

اگر ما بخواهیم یک برنامه جاوا را اجرا کنیم، بایست مراحلی مانند زیر را برای کامپایل و اجرا کردن آن طی کنیم. ابتدا برنامه ای به زبان جاوا با پسوند .java نوشته می شود، سپس با کمک کامپایلر جاوا (javac) این برنامه کامپایل و به زبان میانی به نام بایت کد ترجمه می شود، فایل هایی که حاوی بایت کد هستند پسوند .class دارند. این بایت کد ها رو سیستم عامل ها مختلف قابل اجرا هستند. مثلا ما روی یک سیستم با سیستم عامل ویندوز می توانیم یک jvm نصب کنیم و این ماشین مجازی می داند که برنامه ها به زبان میانی (بایت کدها) را چگونه بر روی سیستم عامل ویندوز اجرا نماید، به همین صورت برای سیستم عامل های مختلف jvm های مختلف وجود دارد.

به این دقت کنید که این لایه میانی در زبان هایی مانند C و C++ وجود ندارند و برنامه ای که به این زبان ها نوشته می شود مستقیما بر روی سیستم عامل اجرا می شوند و لایه میانی مانند jvm در این زبان ها وجود ندارد. همچنین در برخی زبان ها مانند خانواده ی .Net Framework مانند C# نیز این لایه میانی وجود دارد و دات نت فریم ورک نقش jvm را برای آنها ایفا می کند و آنجا هم برنامه ها به زبان میانی ترجمه می شوند و زبان میانی توسط دات نت فریم ورک اجرا می شود اما تنوعی که در جاوا وجود دارد برای سیستم هایی که می تواند روی آنها اجرا شود در این زبان ها (خانواده ی دات نت) وجود ندارد و تاکیدی که بر مستقل از سکو بودن در جاوا هست در خانواده دات نت بسیار کم وجود دارد چرا که دات نت مربوط به شرکت مایکروسافت است و این شرکت سیستم عامل ویندوز را ترجیح داده است.

اگر بخواهیم وضعیت اجرا شدن زبان‎های مختلف روی سیستم عامل ها و نهایتا سخت افزار را بررسی کنیم به نتایج زیر خواهیم رسید، همان طور که در شکل می بینید برنامه هایی به زبان پاسکال و یا C++ پس از کامپایل شدن مستقیما به فایل قابل اجرا برای سیستم عامل تبدیل و روی سیستم عامل اجرا می شوند، در حالی که برنامه های نوشته شده توسط زبان های خانواده دات نت و برنامه های جاوایی به زبان میانی ترجمه و سپس توسط ماشین مجازی (jvm برای جاوا و .Net framework برای C# و VB.NET) روی سیستم عامل اجرا می شوند.

1,7- اصطلاحات

در این قسمت به بررسی برخی اصطلاحات که در مورد مستقل از سکو بودن زبان جاوا به کار می روند خواهیم پرداخت. این اصطلاحات به شرح زیر هستند:

  • Platform independence
  • Cross-Platform
  • Portable
  • Architecture Neutral
  • Write Once Run Anywhere

تمامی این اصطلاحات حاوی این معنی هستند که برنامه های جاوا را می توان بدون هیچ تغییری در سیستم های مختلف اجرا نمود (برنامه هایی قابل حمل هستند) و نتیجه ی اجرای برنامه روی این محیط های مختلف یکسان خواهد بود.

1,8- برخی ویژگی های زبان جاوا

  • سادگی: از ابتدا تلاش طراحان جاوا بر این بوده است که این زبان تا حد ممکن ساده باشد و ساختارهای پیچیده ای نداشته باشد.
  • شی گرایی: جاوا زبانی مبتنی بر اشیا است یعنی شهروند و موجودیت درجه اول در این زبان اشیاء هستند.
  • مستقل از سکو: همان طور که در قسمت های قبل اشاره شد، برنامه های جاوا قابل اجرا و حمل بر روی سیستم های مختلف با سخت افزارها و سیستم عامل های مختلف هستند.
  • امنیت: جاوا زبانی امن است به این معنا که دارای امکاناتی برای جلوگیری از بسیار از مشکلات امنیتی می باشد.
  • اجرا به صورت تفسیری (interpreted): یعنی هر برنامه به زبان جاوا در ابتدا به بایت کد ترجمه (کامپایل) شده و سپس این کد میانی خط به خط ترجمه (تفسیر) می شود.
  • چند نخی (multithreaded): این امکان در جاوا وجود دارد که برنامه ها به صورت چند نخی نوشته و به صورت موازی و یا هم روند اجرا شوند.

البته در مورد این ویژگی ها نکاتی هم مطرح است مثلا اینکه آیا با توجه به تغییراتی که جاوا در طی این حدود 20 سال داشته و ویژگی ها و امکاناتی که به آن اضافه شده است، آیا هنوز زبانی ساده به حساب می آید؟

یا اینکه جاوا زبانی شی گراست اما در نسخه های جدید (جاوا 8 به بعد) از امکانات تابعی (Functional) هم پشتیبانی می کند، اما با این وجود هنوز هم این زبان به عنوان یک زبان شی گرا توصیف می شود.

1,9- چرا فن آوری جاوا مهم است؟

ویژگی های مختلفی در این فن آوری وجود دارد که موجب اهمیت آن می شود:

  • اولین علت این است که یادگیری جاوا ساده است.
  • همچنین زبانی شی گرا و مناسب برای کاربردهای امروزی است.
  • این زبان دارای API ها و کلاس های کمکی بسیار غنی است، این امکانات در حوزه های مختلفی مانند کار با ساختمان داده های مختلف، کار با فایل، کاربردهای شبکه، پایگاه داده و بسیاری امکانات متنوع دیگر است.
  • و ابزارهای توسعه بسیار قوی در اطراف این زبان ایجاد شده اند که برنامه نویسی با کمک جاوا را بسیار ساده می کنند، ابزارهایی مانند محیط های توسعه (Eclipse, NetBeans, Intellij Idea ) و سایر ابزارهایی که توسعه را آسان تر می کنند (مانند Ant و Maven)، این ابزارها اگرچه جزو زبان جاوا نیستند، اما کسانی آنها را به صورت رایگان و متن باز در اختیار ما قرار داده اند.
  • جاوا دارای کتابخانه های متن باز بسیار غنی است، این کتابخانه ها که توسط شرکت هایی مانند Apache، google، SourceForge فراهم شده اند و ما می توانیم از آنها استفاده نماییم.
  • جاوا انجمنی بسیار قوی دارد (Java Community) که برنامه نویسان و فعالان این حوزه در آن به تبادل اطلاعات می پردازند. این انجمن اعضای بسیار در دنیا و در ایران دارد و این یکی از نقاط قوت این زبان محسوب می شود، برای پی بردن به این ویژگی کافیست یک سوال جاوایی را در سایتی مانند StackOverflow جست و جو کنید.
  • جاوا رایگان و متن باز است و این دو ویژگی برای یک زبان برنامه نویسی بسیار مهم است.
  • مستندات بسیار خوبی در زمینه این زبان وجود دارد (بسیاری از آنها توسط Javadoc تولید شده اند که در بخش های بعد در مورد آن صحبت خواهیم کرد.
  • جاوا مستقل از سکو است J
  • این زبان زبانی بالغ است و در فراز و فرودهای بیش از دو دهه به خوبی دوام آورده، و زبان جدیدی نیست که تغییرات کسب و کار بتواند به راحتی آن را زمین بزند.
  • سهم مهمی از بازار تولید نرم افزار در اختیار جاواست. برنامه های سمت سرور، برنامه های موبایل و غیر
  • جاوا هم در محیط های دانشگاهی و هم در پروژه های صنعتی محبوب است.
  • همچنین JVM در حال حاضر به زبان های مهمی مانند Groovy و Scala نیز سرویس می دهد و حتی اگر از زبان جاوا استفاده نکنید، می توانید از امکانات ماشین مجازی جاوا برای توسعه برنامه هایی به این زبان ها بهره ببرید. و این مجموعه از زبان ها (زبان هایی که از JVM برای اجرا شدن استفاده می کنند) رو به گسترش هستند.

1,10- ویراست های فن آوری جاوا

زبان جاوا دارای ویراست(edition) های مختلفی است:

  • Java Standard Edition: نسخه ی اصلی جاوا است
  • Java Enterprise Edition: نسخه ی سازمانی این زبان است که برای نوشتن برنامه های بسیار بزرگ که احتمالا کاربران زیادی هم دارد و در بستر وب ارائه می شوند مورد استفاده قرار می گیرد.
  • Java Micro Edition: این ویراست که JME هم گفته می شود برای سخت افزارهای بسیار محدود و کوچک با منابع کم مورد استفاده قرار می گیرد مانند گیرنده های دیجیتال، تلوزیون ها، وسایل الکترونیکی و مواردی مانند اینها
  • و Java Card که برای کارت های هوشمند مورد استفاده قرار می گیرد.

زبان جاوا در Java Standar Edition طراحی و توصیف شده است و ما در این کتاب قصد بررسی همین ویراست را داریم و البته زبانی که در JEE (Java Enterprise Edition) مورد استفاده قرار می گیرد هم همین ویراست است. در واقع زبانی که در ویراست سازمانی مورد استفاده قرار می گیرد هم همین زبان است و تنها در نسخه های JME و Java Card این زبان قدری محدود تر شده است.

1,11- داستان زندگی جاوا

واقعیت این است که جاوا زندگی پر فراز و نشیبی را پشت سر گذاشته است، این زبان با امید استفاده در وسایل الکترونیکی مختلف طراحی شد، و با فراگیر شدن اینترنت با اپلت ها معروف و پر استفاده شد، مدتی بعد با رونق پیدا کردن تلفن همراه، JME روی کار آمد و برای مدتی پیشرفته ترین زبان برنامه نویسی روی تلفن های همراه به حساب می آمد.

این وضعیت امروزه خیلی تغییر کرده است، applet ها تقریبا بی اهمیت شده اند و سهم JME از بازار موبایل تقریبا ناچیز است، اما جاوا همچنان بسیار مهم است و نقش های مختلف دیگری را ایفا می کند، در بخش برنامه نویسی وب، و برنامه نویسی سمت سرور جاوا مهم بوده و هست، و در مورد تلفن های همراه نیز، جاوا با اندروید موفق شد مجددا سهم خودش از بازار موبایل را به دست آورد.

1,12- تاریخچه نسخه های جاوا

همان طور که در بخش های قبل هم اشاره کردیم نسخه های اول جاوا در سال 1995 توسط سان مایکرو سیستم ارائه شد، این نسخه ها، نسخه هایی آزمایشی بودند، نسخه اول این زبان در سال 1996 ارائه شد و بعد از آن تا سال 2014 نسخه های مختلفی از این زبان به مرور منتشر شدند، در این میان نسخه هایی که تغییرات مهم و زیادی داشته اند از اهمیت و شهرت بیشتری برخوردار هستند، نسخه ی دوم جاوا در سال 1998 ارائه شد که علی رغم اینکه نسخه ی 1.2 جاوا بود، به علت اهمیت به نسخه ی 2 جاوا معروف شد، به این نسخه J2SE نیز گفته می شود و بعد از این نسخه این اسم روی زبان جاوا باقی ماند و در نسخه های 1.3 و 1.4 هم به جاوا J2SE گفته می شد، در نسخه ی 1.5 (سال 2004) که بعد ها نسخه ی 5 نام گرفت عدد 2 از نام نسخه حذف شد و دیگر به جاوا J2SE گفته نمی شد و به آن Java SE مخفف نسخه ی استاندار جاوا گفته می شد، قابل ذکر است که نسخه ی 5 هم نسخه ی مهمی به شمار می آید، بعد از آن نسخه ها به همان ترتیب نسخه ی 6، 7، و 8 نام گرفتند، از این میان بیشترین سهم تغییرات را در نسخه های اخیر، نسخه ی 5، 7 و 8 بر عهده داشته اند، در نسخه ی 5 امکاناتی مانند کلاس های عام (Generics) و حاشیه نگاری (Annotation) معرفی و افزوده شدند، در نسخه ی 8 هم عبارات لامبدا و جویبارها(Streams) به زبان اضافه شدند که برنامه نویسی تابعی را ممکن می سازند.

به این نکته دقت کنید که اصطلاحاتی مانند J2SE، J2ME و J2EE اصطلاحاتی هستند که مربوط به نسخه ی 1.2 جاوا هستند، اگرچه هنوز برخی برنامه نویسان و فعالان این حوزه از این عبارات استفاده می کنند، اما بهتر است به جای آن از اسامی Java SE، Java ME و Java EE برای نسخه های فعلی این زبان استفاده کنیم.

1,13- محبوبیت زبان های برنامه نویسی

در عین حال زبان جاوا امروزه زبان محبوب و در بین زبان های برنامه نویسی از رتبه ی بالایی برخوردار است. مراجع مختلفی زبان های برنامه نویسی را از لحاظ محبوبیت و میزان استفاده رتبه بندی کرده اند که در ادامه چهار رتبه بندی را مرور می کنیم:

همان طور که می بینید در هر چهار رتبه بندی زبان جاوا زبان مهمی هست. بیایید به دیگر زبان ها هم نگاهی داشته باشیم، مثلا زبان C یا C++ هم در اکثر رتبه بندی ها در جایگاه بالایی قرار دارد، و برخی از زبان ها هم به تازگی و بیش از پیش دارای اهمیت شده اند، مثلا زبان هایی اسکریپتی مانند Java Script،  Ruby و Python.

  • اما بین این همه زبان برنامه نویسی، آیا زبان جاوا بهترین زبان برنامه
    نویسی دنیا است؟
  • البته که نه! پس چه زمانی بهترین زبان برنامه نویسی دنیاست؟

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

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

1,14- اولین برنامه به زبان جاوا

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

  • دریافت و نصب JDK:

برای برنامه نویسی جاوا ابتدا به نصب و فراهم کردن JDK داریم، Java Development Kit این نرم افزار به شما اجازه می دهد برنامه های جاوا را کامپایل و اجرا نمایید. به این دقت داشته باشید که JDK و JRE با هم متفاوت هستند، JDK مجموعه ای از نرم افزارهاست که به شما امکان اجرای برنامه های جاوا را می دهد و به درد برنامه نویسان جاوا می خورد اما JRE بخش کوچکی از JDK را شامل می شود که تنها برای اجرای برنامه های جاوا کافی هست، بنابر این اگر کسی بخواهد یک برنامه جاوا را فقط اجرا کند، JRE برای این کار کافیست، اما اگر کسی بخواهد برنامه جاوا بنویسد و کامپایل و اجرا و احتمالا دیباگ کند، باید JDK در اختیار داشته باشد. و هر کدام از این دو مورد به صورت مستقل قابل دریافت (دانلود) و نصب کردن هستند.

برای دریافت این پکیج ها می توانید به سایت اوراکل، جاواکاپ و یا سایر سایت های ایرانی یا خارجی مراجعه کنید. هنگام انتخاب پکیج به نسخه آن توجه کنید، چرا که همان طور که در بخش قبل دیدیم، برخی ویژگی ها از نسخه ای به بعد به این زبان اضافه شده اند. همچنین لازم است پکیجی متناسب با سیستم عامل خود دریافت کنید، برای مثال اگر از ویندوز، لینوکس یا مک استفاده می کنید، به راحتی می توانید نسخه ی مورد نظر خود را پیدا کنید، و معمولا JDK در دو نسخه 32 و 64 بیت ارائه می شود که برای انتخاب این ویژگی نیز به وضعیت سخت افزاری سیستم خود رجوع کنید. در شکل زیر بخشی از سایت جاواکاپ (بخش دانلودها) که در آن نسخه های مختلف JDK برای سیستم عامل های مختلف قرار داده شده است را می توانید ببینید:

نصب جاوا به دو طریق میسر است، اول با اجرا کردن فایل های اجرایی مورد نظر (exe برای ویندوز یا rpm برای لینوکس) و راه دیگر از طریق extract کردن فایل فشرده حاوی نسخه جاوا در محل مناسب. همچنین توصیه می کنیم:

  • متغییر محیطی path را با افزودن مسیر قرار گرفتن فایل های اجرایی جاوا به آن ویرایش کنید تا بتوانید به راحتی از دستوراتی مانند javac در تمام دایرکتوری های سیستم خود استفاده نمایید.
  • مسیر نصب جاوا را تا حد امکان در آدرسی بدون فاصله قرار دهید، مثلا در ویندوز: c:/java/jdk به جای c:/program files

برای اجرای اولین برنامه قصد نداریم از محیط های توسعه (IDE) مانند eclipse یا intellij استفاده کنیم، گر چه این محیط ها برنامه نویسی را ساده تر می کنند، اما بخش هایی از روند اجرای برنامه را از دید ما پنهان می کنند و می خواهیم در اولین تمرین ها با استفاده از command line تمامی مراحل کامپایل و اجرای برنامه به زبان جاوا را مشاهده کنیم.

1,15- اولین برنامه

برای نوشتن اولین برنامه به زبان جاوا یک فایل متنی با نام First.java بسازید، برای ساختن این فایل می توانید از برنامه هایی مانند notepad در ویندوز و gedit در لینوکس استفاده کنید. دقت کنید که پسوند این فایل مثلا .txt نباشد و دقیقا پسوند .java داشته باشد. به نحوه ی نام گذاری فایل ها دقت کنید، مثلا اینکه فایل های برنامه نویسی در جاوا با پسوند جاوا هستند.

سپس این خطوط را در این فایل متنی بنویسید:

	
public class First {
   public static void main(String[] args) {
      System.out.println("Salam!!!");
   }
}

این برنامه دارای جزئیاتی است که هنوز در مورد آنها صحبت نکرده ایم و آموزش آنها شروع نشده است، فعلا می توانید حفظ کنید که این برنامه ساده می تواند رشته ای را در خروجی چاپ نماید.

1,16- گام‌های لازم برای اجرای یک برنامه جاوا

هنگامی که برنامه را در فایل متنی نوشتیم، بایست مراحل زیر را برای اجرای آن طی کنیم:

  • ابتدا برنامه باید کامپایل و به بایت کد تبدیل شود. برای کامپایل کردن برنامه های جاوا از دستور javac (java Compiler) استفاده می شود. به این صورت که بعد از این دستور نام فایلی که قصد کامپایل کردن آن را داریم می نویسیم:

Javac First.java

بعد از اجرای این دستور، در صورتی که برنامه شما صحیح و سالم باشد و خطایی نداشته باشد، کامپایل شده و فایل بایت کدی با پسوند .class و هم نام فایل اولیه ساخته می شود (در اینجا First.class)

  • برای اجرا کردن این برنامه از دستور java استفاده می کنیم، به این صورت که بعد از این دستور نام کلاس را بدون هیچ پسوندی می نویسیم:

Java First

این دستور عملا ماشین مجازی جاوا را فراخوانی و برنامه ما را اجرا می نماید.

مثال عملی:

در این قسمت می خواهیم دستوراتی که یاد گرفتیم را در خط فرمان ویندوز اجرا و نتیجه را قدم به قدم مرور کنیم. پنجره خط فرمان در ویندوز را می توانید با جست و جوی عبارت cmd و یا جست و جوی برنامه run و سپس نوشتن عبارت cmd در پنجره run باز کنید. سپس با دستور dir می توانید لیست فایل های موجود در مسیر (دایرکتوری) جاری را ببینید:

همان طور که در شکل می بینید در ابتدا تنها فایل First.java که همان فایل متنی هست که کد آن را در قسمت قبل نوشتیم در این مسیر وجود دارد، (برای رفتن به مسیری که فایل شما در آن واقع است می توانید از دستوراتی مانند cd مخفف  change directory استفاده کنید و در صورت بروز مشکل از جست و جو در اینترنت کمک بگیرید) حال دستور کامپایل را اجرا و مجددا لیست فایل های موجود را مشاهده می کنیم:

خواهید دید که فایل First.class که حاوی بایت کد برنامه ما هست به فایل ها اضافه شده است. و در نهایت با دستور java ماشین مجازی را برای اجرای برنامه خود فراخوانی می کنیم:

در این حالت برنامه ما اجرا و عبارت سلام در خط فرمان چاپ می شود.

همچنین می توانید داخل پرانتز تابع println به جای یک متن، یک عدد صحیح و یا اعشاری بنویسید و برنامه را مجددا کامپایل و اجرا کنید، خواهید دید که پس از اجرای برنامه آن عدد در خروجی نمایش داده خواهد شد. و یا می توانید برای جدا کردن ارقام اعداد از underline استفاده کنید.

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

نکاتی درباره اولین مثال:

  • یک برنامه ساده یک فایل متنی با پسوند .java خواهد بود. این فایل شامل یک کلاس است که در مثال قبل ما اسم آن را First گذاشته بودیم (درباره مفهوم کلاس بعدا صحبت می کنیم)
  • اسم کلاس باید دقیقا با اسم فایل منطبق باشد، بزرگ و کوچک بودن حروف در جاوا مهم است. (اصطلاحا گفته می شود جاوا زبانی case sensitive است) پس اگر نام کلاس با حرف بزرگ نوشته شده است، نام فایل نیز بایست با حرف بزرگ شروع شود.
  • و کلاس ما شامل یک متد main بود که کوچک و بزرگ بودن نام این تابع نیز اهمیت دارد. و هر وقت که ما یک برنامه جاوا را اجرا می کنیم، به صورت اتوماتیک متد main صدا زده می شود و اجرا می شود.

1,17- کویز

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

  • از بین برنامه هایی که نام آنها در زیر آمده است، مشخص کنید کدامشان برنامه های مستقل از سکو هستند؟ (اگر چندتا هستند همه را مشخص کنید) در واقع باید بگویید آیا این برنامه ها را می توان مستقل از سخت افزار و سیستم عامل و سایر عوامل محیطی روی هر سیستمی اجرا کرد یا نه.
  • Microsoft Word
  • JVM
  • Firefox
  • First.java
  • First.class

پاسخ:

  • برنامه Microsoft word برای ویندوز طراحی و ساخته شده است و قابل اجرا در لینوکس یا سایر محیط ها نیست.
  • خود Jvm مستقل از سکو نیست، و برنامه ای است که برای platform های مختلف عرضه شده است و همان طور که دیدیم هنگام دانلود JDK که حاوی JVM هم هست بایست مشخص کنیم که این پکیج را برای کدام سکو و سیستم عامل لازم داریم.
  • Firefox که یک مرورگر صفحات وب هست نیز مستقل از سکو نیست، به این معنا که همان فایرفاکسی که در ویندوز اجرا می شود قابل اجرا و استفاده در لینوکس نخواهد بود، البته فایرفاکس برای لینوکس یا سایر محیط ها هم وجود دارد، اما برنامه اجرایی فایرفاکسی که در ویندوز اجرا می شود با لینوکس با سایر محیط ها متفاوت است.
  • دو مورد آخر یعنی java و First.class مستقل از سکو هستند، البته First.java خودش قابل اجرا نیست ابتدا باید به First.class ترجمه شود و سپس توسط ماشین مجازی جاوا اجرا شود. در واقع همان  First.class ای که در ویندوز اجرا می شود بدون نیاز به هیچ تغییری قابل اجرا در سایر محیط ها هست و نتیجه اجرا در سیستم عامل ها و محیط های مختلف یکسان خواهد بود.
  • برنامه ای که در زیر نوشته شده است، دارای اشکالاتی هست، سعی کنید آنها را پیدا کنید و به جزئیاتی مانند نام فایل و یا سایر نام گذاری ها هم دقت کنید:

پاسخ:

  • اولین اشکال این است که اسم کلاس و نام فایل باید یکسان باشد، مثلا اگر نام فایل java هست، نام کلاس هم باید intro باشد، این یک اشکال نحوی است که کامپایلر آن را نشان خواهد داد.
  • اشکال بعدی این است که باید نام متد main را با حروف کوچک می نوشتیم در حالی که با حروف بزرگ نوشته ایم، اما این یک اشکال نحوی نیست، اصطلاحا syntax error نداریم و برنامه ها بدون خطا قابل کامپایل شدن است. این یک اشکال منطقی است و موجب می شود برنامه ما اجرا نشود.
  • و یک اشکال دیگر هم هست، بهتر است اسم کلاس را با حرف بزرگ شروع کنیم مانند First که قبلا نوشته بودیم، این یک قانون نیست، اما عرفی است که بین برنامه نویسان جاوا وجود دارد. در واقع این یک قرارداد بین برنامه نویسان جاواست.

1,18- جمع بندی

  • ما در این فصل دیدیم که جاوا زبان بسیار مهم و پرکاربردی هست.
  • در مورد تاریخچه و ویژگی های این زبان با هم صحبت کردیم.
  • و دیدیم که جاوا در واقع فراتر از یک زبان برنامه نویسی است، یک فن آوری و بستر برنامه نویسی است. در در حول و حوش این زبان یک اکوسیستم تولید نرم افزار ایجاد شده است که امروزه یکی از مهم ترین رویکرهای تولید نرم افزار در دنیا هست.

1,19- جست و جو کنید و بخوانید

پیشنهاد می کنیم در مورد مفاهیمی که در این فصل در مورد آنها صحبت کردیم، جست و جو کنید و بخوانید، مخصوصا از گوگل و ویکی پدیا استفاده کنید و چند صفحه ای در مورد این مفاهیم بخوانید:

  • جاوا چه مزایایی دارد؟
  • حتی جاوا چه معایبی دارد؟ و منتقدین جاوا چه انقادهایی به این زبان وارد کرده اند؟
  • و طرفداران جاوا چه پاسخ هایی داده اند؟ مثلا آیا جاوا کند است؟
  • و یا اینکه این زبان چه امکاناتی برای افزایش سرعت برنامه ها فراهم کرده است؟ مثلا Hotspot در جاوا چیست؟

و یا کلید واژه های دیگری که به این موضوع مرتبط هستند مانند:

  • Java
  • JVM
  • Byte Code
  • Java Mobile
  • Oracle

و یا در مورد مقایسه این زبان با سایر زبان ها بخوانید:

  • Java & C++
  • Java & C#
  • Java & javascript

1,20- تمرین

  • به عنوان اولین تمرین حتما JDK را دانلود و نصب کنید.
  • برنامه ای بنویسید که اسم شما را در خروجی چاپ کند.
  • این برنامه را کامپایل و اجرا کنید. این کار را مانند آنچه در این فصل یاد گرفتیم بدون استفاده از محیط های توسعه و با کمک دستورات خط فرمان انجام دهید تا این فرآیند را خوب یاد بگیرید و اینکه در هر مرحله چه فایلی تولید می شود را شخصا مشاهده نمایید. ,

2- مفاهیم اولیه زبان جاوا

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

2,1- محیط های توسعه

محیط های توسعه یا محیط های توسعه ی یکپارچه(Integrated Development Environment)، برنامه هایی هستند که ما از آنها برای برنامه نویسی استفاده می کنیم، و در واقع برنامه های خود را در دل آنها می نویسیم. این محیط های مجموعه ای از امکانات مورد نیاز برنامه نویس را گردآوری کرده اند و به صورت یکپارچه در اختیار برنامه نویس قرار می دهند تا بتواند کارش را سریع تر و بهتر انجام بدهد. در واقع IDE ها مانند جعبه ابزاری در دست برنامه نویس هستند.

2,1,1- مزایای محیط های توسعه

استفاده از محیط های توسعه مزایای مختلفی دارد، برنامه نویسی را آسان تر و سریع تر می کند خطای برنامه نویسی را کاهش می دهد و کارهایی که قابل خودکار سازی هستند را اتوماتیک می کنند. البته می توان بدون استفاده از این محیط ها هم برنامه نویسی کرد، مثلا برنامه را درون notepad نوشت و توسط خط فرمان (cmd در ویندوز) آن را کامپایل و اجرا کرد، همان طور که قبل از این جلسه دیده ایم، اما این کار برنامه نویسی را خیلی سخت و احتمال اشتباهات را زیاد می کند.

2,1,2- امکانات محیط های توسعه

محیط های توسعه به ما کمک می کنند تا برنامه را کامپایل و اجرا کنیم، برنامه را رفع اشکال (debug) کنیم و مثلا آن را خط به خط اجرا کنیم و در هر بخش مقدار متغیرها و یا ویژگی های مختلف برنامه مان را چک کنیم و به دنبال اشکال برنامه مان بگردیم. کمک می کنند تا خطاها و هشدارهای مربوط به برنامه مان را راحت تر ببینیم و پی گیری کنیم.

در تولید کد و نیز تکمیل کد به ما کمک می کنند، به این امکان Autocomplete گفته می شود. و همچنین امکانات مناسبی برای جست و جو در بین برنامه ها و فایل ها در اختیار ما قرار می دهند و همچنین برای تغییر بخشی از فایل ها یا پروژه ها و کلاس ها امکانات اتوماتیکی فراهم می کنند.

همچنین امکانات فرعی و جنبی دیگری نیز توسط محیط های توسعه فراهم می شوند مانند اتصال به مخزن کد (Code repositories) و یا سایر امکانات بصری مانند شکل ها و گراف ها و ….

2,1,3- محیط های توسعه در جاوا

محیط های توسعه مختلفی برای جاوا وجود دارند که از بین آنها محبوب ترین محیط ها اینها هستند:

  • Eclipse

این محیط توسط بنیاد اکلیپس توسعه داده و منتشر شده است.

  • Netbeans

که توسط oracle ارائه می شود.

  • Intellij idea

که توسط یک شرکت اروپایی به نام jetbreans تولید شده است.

البته محیط های دیگری هم بوده اند که به مرور زمان محبوبیت خود را از دست داده اند و در حال حاضر بیشتر برنامه نویسان جاوا از یکی از این سه محیط استفاده می کنند.

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

2,1,4- درباره Eclipse

از بین محیط های که در مورد آنها صحبت کردیم، Eclipse در حال حاضر پراستفاده تر است و درصد بیشتری از برنامه نویسان جاوا از این محیط استفاده می کنند، به همین خاطر ما در این بخش کمی با این محیط آشنا می شویم و برخی امکانات آن را گذرا مرور می کنیم. البته محیط های دیگری مانند intellij و neatbeans هم محیط های خوبی هستند اما اکلیپس این روزها محبوبیت بیشتری دارد. شاید علت آن ویژگی های زیر باشد:

  • اکلیپس رایگان است
  • متن باز است و انجمن (Community) بزرگ و قوی آن را پشتیبانی می کند
  • و امکان افزونه پذیری دارد (Plugins)

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

البته شما می توانید دو محیط دیگر را هم امتحان کنید و توجه داشته باشید که Idea نسخه ی رایگان هم دارد و نیازی به کرک کردن آن نخواهید داشت و نسخه ی رایگان خیلی از امکانات مورد نیاز را برآورده می کند.

2,1,5- دانلود و نصب

اکلیپس از سایت eclipse.org قابل دانلود است، همچنین می توانید از طریق CD ها و DVD های حوزه ی جاوا این محیط را دریافت کنید، اگر قصد دانلود آن از سایت مرجع را دارید، پس از وروی به صفحه ی دانلود ابتدا سیستم عامل، نوع سیستم (32 یا 46 بیتی بودن) و سپس نوع اکلیپس مورد نظر خود را انتخاب کنید، اکلیس انواع مختلفی دارد که ساده ترین نوع آن (Eclipse IDE for java Developers) برای مباحتی که ما در این کتاب یاد می گیریم کافی است.

البته نسخه های دیگری هم وجود دارد مانند نسخه ی Java EE که فعلا ما کاری با آنها نداریم.

2,1,6- اولین برنامه (در محیط توسعه)

در این بخش می خواهیم کمی با اکلیپس آشنا شویم، هنگامی که اکلیپس را به صورت یک فایل فشرده دریافت و آن را در مسیر دلخواه خود باز می کنید با ساختاری مشابه زیر مواجه خواهید شد:

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

در این پنجره می توانید آدرس محلی که می خواهید پروژه ی های جاوایی شما در آن ذخیره شوند را مشخص کنید، برای مثال ما آن را درون پوشه ی خود اکلیپس انتخاب کردیم. سپس با تایید این محل به محیط اصلی وارد خواهید شد:

از منوی فایل گزینه ی new و سپس  java project را انتخاب نمایید:

در این قسمت نام پروژه را انتخاب و تایید نمایید:

سپس با انتخاب آیکن restore می توانید پروژه ی خود را مشاهده کنید:

برای نوشتن اولین برنامه روی پوشه ی src کلیک راست کرده و به صورت زیر یک کلاس بسازید:

اگر به یاد داشته باشید ساده ترین برنامه جاوا یک کلاس است که یک متد main در آن وجود دارد، پس این متد را می نویسیم: (به کلمات کلیدی public & static توجه کنید اما معنای آنها را در ادامه خواهیم دید)

حال می توانیم با دستور ساده ی print line یک خروجی ایجاد کنیم:

توجه کنید که این متد باید main نام داشته باشد، هنگامی که شما یک کلاس در اکلیپس ایجاد می کنید، اکلیپس به صورت اتوماتیک آن را کامپایل می کند(javac را اجرا می نماید)، برای دیدن این موضوع بگذارید نگاهی به workspace بیاندازیم:

فایل جاوای کلاسی که ما ایجاد کرده ایم همانطور که در بالا دیده می شود در مسیر workspace//src قرار دارد و در مسیر پروژه فولدر دیگری به نام Bin را می بینیم که شامل برنامه های کامپایل شده است و چون ما کلاس خودمان را save کرده ایم یک فایل کامپایل شده از آن در این مسیر ایجاد شده است:

همانطور که مشاهده می کنید کلاس ما به صورت کامپایل (بایت کد) شده در مسیر worksace//bin ذخیره شده است.

با توجه به اینکه اکلیپس برنامه ی ما را به صورت خودکار کامپایل کرده است، می توانیم آن را اجرا نماییم، برای این کار کافیست برنامه ی کامپایل شده را از منوی run as انتخاب و آن را اجرا کنیم:

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

2,2- انواع داده

در این بخش در مورد متغیرها و انواع اولیه ی داده های صحبت می کنیم.

2,2,1- متغیرها

متغیر یک بخش از حافظه است که یک داده را ذخیره می کند و ما می توانیم در برنامه متغیرهای مختلفی را برای نگهداری داده هایی که برنامه ی ما با آن ها سروکار دارد تعریف کنیم. مثلا یک متغیر می تواند یک عدد اعشار، یک عدد صحیح، یک کاراکتر و یا مجموعه ای از کاراکترها را نگهداری کند:

Int number1=45;

به عنوان مثال در اینجا یک متغیر به نام number1 داریم که مساوی 45 قرار گرفته است و از جنس عدد صحیح است، در واقع هر متغیر، نام، نوع و مقدار دارد. در مثال فوق نام متغیر number1 و نوع آن integer یا عدد صحیح و مقدار آن برابر 45 است.

و در واقع نام هر متغیر با آدرس آن متغیر در حافظه نگاشت می شود به طوری که نام متغیر مشخص می کند آن متغیر در کجای حافظه ذخیره شده است. و نوع متغیر محدوده آن را نیز مشخص می کند، مثلا زمانی که می گوییم متغیر از نوع عدد صحیح است یعنی عدد بین -231 تا +231-1 را نگهداری می کند.

در زبان جاوا برخلاف برخی زبان های دیگر مانند C و C++ محدوده ی هر نوع داده کاملا مشخص است و این بازه به ویژگی های محیط مانند کامپایلر یا سیستم عامل و یا سخت افزار وابسته نیست. این تمحیدی هست که طراحان زبان جاوا برای حفظ ویژگی مستقل از سکو بودن این زبان اندیشیده اند.

2,2,2- انواع اولیه متغیرها (primitive data types)

انواع اولیه داده در زبان جاوا اینها هستند:

  • اعداد صحیح: این اعداد را وابسته به اندازه از کوچک به بزرگ می توان در متغیرهایی با نوع داده ی byte, short, int & long ذخیره کرد.
  • کارکتر: داده هایی از جنس حروف را می توان در این نوع ذخیره کرد که با char نشان داده می شود.
  • اعداد اعشاری: این اعداد را می توان در انواع float و double ذخیره کرد که نوع دوم بازه و دقت بیشتری را نگهداری می کند.
  • مقادیر منطقی (درست|نادرست): این متغیرها با Boolean نشان داده می شوند و تنها مقدار درست یا نادرست را می توانند نگهداری کنند.

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

مثلا نوع کاراکتر در دوبایت یا 16 بیت قابل ذخیره سازی است.

2,2,3- مقادیر ثابت

char ch = 'a';
ch = '4';
double d = 3.14;
d = 4763.129837D;
float f = 12.23F;

مقادیر ثابت یا literal ها به مقادیری می گوییم که قابل انتساب به متغیرها هستند، در مثال زیر عدد 12 و یا مقدار true هر دو ثابت هایی هستند که به متغیرها نسبت داده شده اند.

برای نشان داده ثابتی از نوع کاراکتر مانند رو به رو از کوتیشن

استفاده می کنیم.

در مورد اعداد اعشاری اگر می خواهیم تصریح کنیم که عدد ما

Float و یا double است کافیست F یا D آخر آن قرار دهیم.

و اگر چیزی بعد از اعداد اعشاری قرار ندهیم به صورت پیش فرض Double در نظر گرفته می شوند.

byte a = 12;
short b = 1232;
int c = 190823;
long l = 1233;
l = 293847298347L;
boolean e = true;
e = false;

و اگر عدد ما خیلی بزرگ باشد لازم است حرف L را کنار آن

قرار دهیم تا مشخص شود که این عدد long است و int

نیست.

2,3- عملگرها

حالا می خواهیم ببینیم چه عملیاتی در زبان جاوا ممکن است؟ و چه عملگرهایی در این زبان وجود دارند. عملگر یا operator به ما کمک می کند عملیاتی را روی یک یا مجموعه ای از مقادیر و متغیرها انجام دهیم.

مثال:

  • عملگر انتساب: این عملگر یک مقدار یا متغیر را به متغیر دیگری نسبت می دهد.
A=5;
  • عملگر جمع یا ضرب
a = b + 12 ;

pi = 3.14 ;

circle = 2 * radius * pi ;

سایر عملگرها را در جدول زیر مشاهده می کنید، برای مثال عملگرد درصد نشان دهنده باقیمانده تقسیم دو عدد بر هم است:

در مورد عملگر تقسیم یک نکته وجود دارد که باید به آن دقت کنید وقتی برای مثال A/B انجام می دهید اگر هر دو متغیر B و C عدد صحیح باشند، خروجی نیست حاصل تقسیم صحیح آنها به یکدیگر خواهد بود و تنها خارج قسمت محاسبه می شود (بخش اعشاری محاسبه نمی شود). در نتیجه اگر شما دستور زیر را در برنامه جاوا اجرا کنید خروجی 1 خواهد بود و نه 1.5.

System.out.println(3/2);

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

int b = 3;
int c = 2;
float a = b/c;

اما خروجی دیگر تقسیم های زیر 1.5 خواهد بود:

System.out.println(3.0/2);
System.out.println(3/2.0);
System.out.println(3.0/2.0);

2,3,1- اولویت عملگرها

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

همچنین در صورتی که در یک عبارت ریاضی چند عملگر از یک دسته حظور داشته باشند، ترتیب اجرا از چپ به راست خواهد بود.

مثال: در عبارت زیر مقدار متغیر number چند خواهد بود؟

int number = 2 + 3 * 4 / 2 ;

پاسخ: عملگرهای مختلفی در این عبارت استفاده شده است، چون ضرب و تقسیم دارای اولویت بیشتری هستند، اول اینها انجام می شوند و از چپ به راست پس ابتدا 12 تولید می شود، سپس تقسیم بر دو شده و 6 می شود و در نهایت 8.

البته همیشه توصیه می شود از عبارت هایی مانند مثال فوق پرهیز کنیم و برای حذف ابهام کدهایی که می نویسیم از پرانتز گذاری استفاده نماییم. تا خودمان و نیز دیگران در خواندن کد کمتر به اشتباه بیافتیم. عبارت بالا پس از پرانتز گذاری به صورت زیر خواهد بود:

int number = 2 + ((3 * 4) / 2) ;

تمرین: عبارت زیر با چه ترتیبی اجرا خواهد شد؟

Z = p *r % q + w / x – y;

پاسخ:

2,3,2- عملگرهای مقایسه ای

عملگرهای مقایسه ای در جاوا، به همراه معدل عبارت ریاضی آنها و نیز مثالی برای هر یک در زیر آورده شده است:

2,3,3- شرکت پذیری عملگرها

وقتی دو عملگر با اولویت یکسان در یک عبارت قرار می گیرند، ارزیابی عبارت با توجه به خاصیت شرکت پذیری عملگرها صورت می پذیرد، شرکت پذیری بعضی از عملگرها از چپ به راست است و بعضی از عملگرها از راست به چپ. مثلا در عبارت زیر:

X=y=z=17

به علت اینکه شرکت پذیری عملگر مقداردهی از راست به چپ است این عبارت به صورت زیر اجرا می شود:

x = (y = (z = 17))

اما در عبارت:

72 / 2 / 3

از آنجایی که شرکت پذیری عملگر تقسیم از چپ به راست است، عبارت به صورت زیر اجرا می شود، یعنی ابتدا 72 به 2 تقسیم می شود و سپس نتیجه به 3 تقسیم خواهد شد:

(72 / 2) / 3

شرکت پذیری اغلب عملگرها از چپ به راست است و مهم ترین استثنا در این زمینه عملگر مقداردهی است.

2,3,4- عملگرهای تک عملوندی

برخی عملگرها، تک عملوندی هستند مانند عملگرهای زیر:

A++;
--a;

این عملگرها می توانند سمت راست یا چپ یک متغیر قرار بگیرند، مثلا a++ یعنی یک مقدار به مقدار a اضافه شود. البته تفاوتی بین عملگری که سمت راست متغیر قرار می گیرد و عملگری که سمت چپ متغیر قرار می گیرد وجود دارد، مثلا در کد زیر:

int a = 12;

int b = --a;

b = a--;

b = a++;

b = ++a;

در خط اول b=–a یعنی اول یکی از مقدار a کم شود و سپس مقدار آن (یعنی 11) داخل متغیر b ریخته شود. اما در خط دوم ابتدا مقدار a یعنی 11 داخل b ریخته می شود و سپس مقدار آن یکی کم می شود (می شود 10)، در خط سوم به همان ترتیب ابتدا مقدار a یعنی 10 داخل b ریخته می شود و سپس مقدار a یکی اضافه شده و به 11 تغییر پیدا می کند و نهایتا در سطر آخر ابتدا به مقدار a یکی اضافه شده (12 می شود) و سپس مقدار 12 داخل b ریخته می شود.

عملگرهای تک عملوندی دیگری هم وجود دارند که مثل یک منها که قبل از یک متغیر قرار می گیرد و مقدار آن را منفی می کند (در منفی یک ضرب می کند) و یا یک مثبت که اثر خاصی ندارد.

مثال: برای مثال هنگام اجرای عبارت زیر ابتدا مقدار a یک واحد اضافه می شود و سپس مقدار اضافه شده برای محاسبه ی عبارت استفاده می گردد:

b = ++a - -a;

مثلا اگر مقدار a در این عبارت 1 باشد ابتدا تبدیل به 2 می شود سپس عبارت 2 – (-2) محاسبه می شود.

برخی اپراتورهای یکانی نیز مربوط به نوع Boolean هستند مانند نقیض، برای مثال در عبارت زیر متغیر f مقدار false خواهد گرفت:

boolean t = true;
f = !t;

یا در عبارت f= ! (f==t) با توجه به اینکه نتیجه ی مقایسه منفی است مقدار f برابر true خواهد شد.

2,3,5- عملگرهای منطقی

عملگرهای منطقی هم برای نوع Boolean وجود دارد، مهم ترین آنها عملگر نقیض (!) هست که با هم دیدیم و تک عملوندی بود، دیگر عملگرها در این نوع داده عملگرهای and و or هستند که به ترتیب با && و || نمایش داده می شوند. همان طور که می دانید در and دو عبارت نتیجه تنها در صورت درست بودن هر دو عملوند درست خواهد بود اما در or دو عبارت درست بودن حداقل یکی از عبارات برای درستی نتیجه کفایت می کند.

مثال:

همان طور که می بینید اولویت شرکت پذیری and  از or بیشتر هست. البته تاکید می کنیم که بهتر است هنگام ترکیب کردن عملگرها از پرانتز استفاده کنید تا ابهام کد کمتر شود.

2,3,6- عملگرهای ترکیبی

اگر اولین عملوند در سمت راست مقدار دهی همان عملوند سمت چپ باشد، می توان آنها را به صورت زیر خلاصه نمود:

2,3,7- عملگر سه عملوندی

یک عملگر سه عملوندی هم در زبان جاوا وجود دارد که به صورت زیر می توان از آن استفاده کرد:

TYPE value = CONDITION ? Val_True : Val_False;

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

مثال:


در این مثال در صورتی که شرط ما یعنی area > 10 درست باشد، مقدار value برابر با یک خواهد شد و در غیر این صورت برابر با -1 خواهد شد، پس این اپراتور سه عملوند دارد، عملوند اول یک شرط است، سپس علامت سوال قرار می گیرد، عملوند دوم یک مقدار است که در صورت صحیح بودن مقدار شرط مورد استفاده قرار می گیرد، بعد از آن یک دو نقطه و در نهایت عملوند سوم که مقداری است که در صورت نادرست بودن شرط مورد استفاده قرار می گیرد. در واقع این عبارت دقیقا مثل تکه کد زیر عمل خواهد کرد و در نتیجه ی هر دو عبارت value برابر یک خواهد بود چرا که area بزرگتر از 10 هست:

if(area>10)
   value = 1;
else
   value = -1;

2,3,8- جمع بندی

در جداول زیر خلاصه ای از عملگرهایی که مرور کردیم به همراه نحوه ی شرکت پذیری آن ها برای جمع بندی آمده است:

2,4- چاپ خروجی

ما می توانیم از print و یا println برای چاپ خروجی استفاده کنیم، البته قبلا از println استفاده کردیم و اینجا تنها مرور می کنیم، متد System.out.println() به ما کمک می کند که یک متغیر، یک مقدار و یا نتیجه ی یک عبارت را چاپ کنیم.

مثال:

	System.out.println(a);
	System.out.print(x);
	System.out.println(2+5*a);

به کنسول اصطلاحا خروجی استاندارد (Standard output)  گفته می شود. اولین برنامه ای که قبلا با هم نوشتیم هم همین کار را می کرد و رشته ی سلام را توسط متد println رو کنسول چاپ می نمود.

2,5- کویز

برای مرور مطالبی که با هم دیدیم دو سوال خواهیم داشت، هر سوال را ابتدا با دقت حل کنید و سپس پاسخ خود را با پاسخی که در ادامه ی هر سوال آمده است چک کنید:

2,5,1- نتیجه ی اجرای این برنامه چیست؟

int a;
a = 12;
a+= 2;
int b;
b = 4;
b++;
b = a*b;
System.out.println(b);

پاسخ: عدد 70

2,5,2- خروجی این قطعه برنامه چیست؟

double x;
x = 5 / 2;
System.out.println(x);
x = 7 + 3 * 6 / 2 - 1;
System.out.println(x);
x = 2 % 2 + 2 * 2 - 2 / 2;
System.out.println(x);
x = (3 * 9 * (3 + (9 * 3 / (3))));
System.out.println(x);

پاسخ:

2.0

15.0

3.0

324.0

2,6- تمرین عملی

در این بخش به محیط اکلیپس برمی گردیم و مفاهیم و دستوراتی که تا اینجا یاد گرفتیم را مرور می کنیم، این برنامه ای هست که قبلا نوشتیم و حالا می خواهیم با افزودن متغیرها کمی تمرین کنیم:

از اینجا شروع کنیم که چگونه می توان یک متغیر را تعریف کرد، همان طور که دیدیم برای این کار باید ابتدا نوع و سپس نام متغیر را مشخص کنیم:

پس از آن می توانیم به آن مقداردهی کنیم:

انواع دیگری هم وجود دارد مثل نوع کاراکتر که می تواند مساوی ‘a’ یا ‘1’ و یا حتی ‘#’ باشد، در واقع هر کاراکتر تعریف شده ای می تواند در متغیری از نوع کاراکتر قرار بگیرد به این شرط که در دو طرف آن از کوتیشن استفاده کنیم:

و انواع دیگر، همان طور که دیدید نوع byte برای ذخیره سازی اعداد کوچک که در 8 بیت جای می گیرند وجود دارد، نوع short برای اعداد دو بایتی وجود دارد، و انواع دیگری مانند اعداد اعشاری از نوع float که آنها را با f می توان مشخص کرد و نوع double برای ذخیره اعداد اعشاری با دقت و بازه ی بیشتر:

انواع مختلف اعداد را دیدیم، یک نوع دیگر به نام Boolean هم وجود دارد که برای ذخیره مقادیر درست یا نادرست به کار می روند:

حال می خواهیم ببینیم چگونه می توانیم با اپراتورها کار کنیم، برای مثال:

و همان طور که صحبت شد باید توجه کنید که در صورتی که عملوندهای تقسیم اعداد و یا متغیرهای صحیح باشند خارج قسمت تقسیم برگردانده می شود و قسمت اعشاری نادیده گرفته می شود، برای مثال اگر شما 15 را تقسیم بر 2 کنید و در number قرار دهید، وقتی که این متغیر را چاپ می کنید با مقدار 7 مواجه می شوید و نه 7.5:

اما در صورتی که یکی از عملوندها و نیز متغیری که نتیجه را در آن ذخیره می کنیم از جنس اعشاری می بودند نتیجه نیز اعشاری می شد:

عملگرهای دیگری هم وجود دارند، مثلا عملگر باقی مانده که باقی مانده تقسیم را مشخص می کند:

و نکته ی دیگر بحث اولویت بین اپراتورها و عملگرها هست که باید به آن دقت کنیم، مثلا در عبارت 1 + 2 * 3 آیا ابتدا جمع انجام می شود یا ضرب؟ به چه ترتیب؟ از راست به چپ و یا چپ به راست؟

واقعیت این است که از آنجایی که اولویت ضرب از جمع بیشتر است ابتدا عمل ضرب انجام خواهد شد و سپس نتیجه با 1 جمع می شود و حاصل برابر 7 خواهد بود:

و اگر قصد داشتیم ابتدا جمع انجام شود، بایست از پرانتز گذاری استفاده می کردیم، پرانتز گذاری اولویت ها را تنظیم می کند، با این کار ابتدا 1 + 2 انجام می شود و سپس حاصل در 3 ضرب می شود و خروجی متفاوت خواهد بود:

به همین ترتیب عملگر ++ را دیدیم، در مثال زیر پس از انجام عملیات ++ مقدار a یک واحد افزوده خواهد شد:

نکته ی بعدی این هست که می توانیم از ++ در سایر عملیات ها نیز استفاده کنیم، برای مثال اگر b = a++ قرار دهیم در صورتی که ++ را سمت راست عملوند a قرار دهیم ابتدا مقدار a یعنی 1 داخل b ریخته می شود و سپس به مقدار a یک واحد اضافه می شود، اما در صورتی که ++ را سمت چپ متغیر a قرار دهیم ابتدا به مقدار آن یکی افزوده شده و سپس مقدار جدید در متغیر b ذخیره خواهد شد:

 

به عنوان خاتمه این بخش یادآوری می کنیم که متد println و print متدهایی هستند که به ما کمک می کنند مقدار یک متغیر را در خروجی کنسول چاپ کنیم، اگر از prtinln استفاده کنیم مقدار مورد نظر چاپ شده و به خط بعد می رود اما اگر از prtint استفاده کنیم خط جدید ایجاد نمی شود، برای مشاهده این تفاوت به مثال زیر توجه کنید:

2,7- کنترل جریان برنامه

2,7,1- شرط

در این بخش با ساختارهای کنترل جریان برنامه آشنا می شویم، یعنی دستوراتی که به ما کمک می کنند جریان اجرای برنامه را از جایی به جای دیگری ببریم، ساده ترین راه برای این کار استفاده از دستورات شرطی یا if-else هستند، دستورات شرطی امکانی را فراهم می کنند که اگر مثلا “شرط الف” برقرار باشد یک کار انجام شود و اگر نه، اگر “شرط ب” برقرار باشد کار دیگری و الی آخر. به عنوان مثال به قطعه کد زیر توجه کنید:

if(x>y)
	System.out.println("X is greater than Y");
else if(x==y)
	System.out.println("X is equal to Y");
else
	System.out.println("Y is greater than X");

در این قطعه کد از ساختار شرطی if-else استفاده می کنیم به این صورت که اگر x از y بزرگتر باشد عبارت اول چاپ خواهد شد، اگر برابر باشند عبارت دوم چاپ می شود و در نهایت اگر هیچ یک از این دو شرط برقرار نباشند که به این معناست که x از y کوچکتر است، عبارت سوم چاپ خواهد شد. بنابراین ما ساختاری به نام if، else if و else داریم.

جلوی if در داخل پرانتز بایست یک شرط قرار بگیرد، این شرط می تواند یک اپراتور مانند مقایسه ی x و y باشد مانند مثال قبل و یا یک متغیر Boolean باشد مانند مثال زیر:

boolean condition = x>y;
if(condition)
	System.out.println("X is greater than Y");
else
	System.out.println(“Y >= X");

2,7,2- مفهوم بلوک

فرض کنید بخواهیم در صورت برقرار بودن یک شرط به جای یک کار مجموعه ای از کارها را انجام دهیم یا در حالت برقرار نبودن شرط هم مجموعه ای از کارها انجام شود در این حالت چه باید کرد؟ در این حالت ما از ساختار بلوک استفاده می کنیم. در هر بلاک یک آکولاد شروع و یک آکولاد پایان بلاک را مشخص می کند و تمام دستوراتی که در بلاک هستند با همدیگر اجرا می شوند، به عبارت دیگر در مثال زیر اگر x>y باشد هر سه دستور قرار گرفته در بلاک if و در غیر این صورت هر سه دستور بلاک else اجرا خواهند شد:

 if(x>=y)
{
	a++;
	b = x;
	c = x/y ;
} 
else 
{
	c = y/x;
	a--;
	System.out.println(“Y > X");
}

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

2,7,3- مرحوم goto

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

2,7,4- حلقه ها

حلقه یا loop امکانی هست برای اجرای چند باره ی یک یا چند دستور. وقتی که می خواهیم به تعداد مشخصی یا تا زمانی که یک شرط خاص برقرار نشده است، یک یا تعدادی دستور را اجرا کنیم، می توانیم از حلقه استفاده کنیم. در جاوا حلقه های زیر وجود دارند:

  • For
  • While
  • Do-while

و هر کدام به شکلی می توانند تکرار دستورات را انجام بدهند.

2,7,4,1- While

ساختار این حلقه به شکل زیر است، ابتدا کلمه ی کلیدی while سپس داخل پرانتز شرط حلقه نوشته می شود و در ادامه چند دستور:

تا وقتی که شرطی که جلوی while هست true باشد بدنه ی آن اجرا می شود، بدنه ی حلقه می تواند مثل این حالت یک بلوک باشد یا یک دستور تکی باشد. خوب، به نظر شما در این مثال خروجی برنامه چیست؟

پاسخ:

چاپ اعداد 1 تا 9

2,7,4,2- Do-while

این حلقه دقیقا مشابه while هست با این تفاوت که شرط حلقه در انتهای آن چک می شود.

این حلقه با عبارت کلیدی do آغاز می شود و سپس بلوک دستورات قرار می گیرد و بعد از آن شرط حلقه داخل پرانتز جلوی کلمه ی کلیدی while قرار می گیرد. به نظر شما خروجی این برنامه چیست؟

پاسخ:

چاپ اعداد 1 تا 10. به این صورت که ابتدا counter=0 است، سپس در هر بار اجرای بدنه ی حلقه یکی به مقدار آن اضافه می شود و سپس چاپ می شود و شرط حلقه چک می شود که آیا counter از 10 کمتر هست یا نه، در نتیجه زمانی که counter به مقدار 10 برسد ابتدا عدد 10 هم چاپ می شود و چون دیگر شرط بدنه ی حلقه برقرار نبوده و از حلقه خارج خواهیم شد.

2,7,4,3- For

این حلقه پر استفاده ترین حلقه در زبان جاواست. حلقه ی  for از سه بخش تشکیل شده است:

که بخش های آن با سمیکالن (;) از یکدیگر جدا شده اند، بخش اول یک عملیات است، بخش دوم یک شرط و بخش سوم نیز یک عملیات است و در نهایت یک دستور و یا یک بلوک از دستورات قرار می گیرد.

مثلا:

عملیات اول این است که یک متغیر به نام I  تعریف شود و مقدارش مساوی 1 قرار بگیرد، بعد از آن یک شرط مشخص می کنیم و می گوییم تا زمانی که i از 10 کمتر مساوی است بدنه ی حلقه ( در اینجا مقدار i) چاپ شود. بعد از اینکه بدنه ی حلقه اجرا شد، عملیات ثانویه ای که مشخص کرده ایم (i++) اجرا می شود.

خروجی این برنامه چه خواهد بود؟

پاسخ: چاپ اعداد 1 تا 10

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

2,7,4,4- بازنویسی for با کمک while

ساختار حلقه ی for را می توان با while هم پیاده سازی کرد، به مثال زیر توجه کنید:

در این مثال x بخشی هست که در ابتدا باید انجام شود (مقدار دهی اولیه)، تا زمانی که y برقرار است بایست body()  و سپس بخش z اجرا شود. این مثال شهود بهتری از نحوه ی اجرای حلقه ی for به دست می دهد.

مثال:

به عنوان مثال حلقه ی for که قبلا نوشته بودیم و اعداد 1 تا 10 را چاپ می کرد با while بازنویسی کرده ایم:

البته در موارد خاصی این دو ساختار با هم تفاوت هایی دارند، برای مثال زمانی که از دستوراتی مانند continue استفاده کنیم، که بعدا به آن خواهیم پرداخت.

2,8- آشنایی اولیه با متدها

2,8,1- متد

در این بخش با ساختار و مفهوم متد آشنا می شویم. متد مثل یک ماشین و یا یک دستگاه است که تعدادی ورودی دریافت می کند و بر روی آنها عملیاتی انجام می دهد و در نهایت یک خروجی ایجاد می کند. تعداد ورودی ها می تواند صفر یا بیشتر باشد و تعداد خروجی ها می تواند صفر یا یک باشد. در واقع می توانیم یک خروجی تولید کنیم و یا اصلا خروجی نداشته باشیم. ورودی های متد را اصطلاحا پارامترهای آن و خروجی آن را اصطلاحا مقدار برگشتی یا return value می گویند.

با اسامی دیگری نیز از متد یاد می شود مانند تابع (function) و یا روال یا رویه (procedure) که معمولا در زبان های دیگر استفاده می شوند و در زبان جاوا و سایر زبان های شی گرا معمولا به این مفهوم متد گفته می شود.

مثال:

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

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

بعد از اینکه متد به این شکل تعریف شد می توانیم از آن استفاده کنیم و اصطلاحا آن را فراخوانی کنیم. مثلا کد زیر بخشی از برنامه ما می تواند باشد که از متد تعریف شده استفاده می کند. در این تکه کد sum برابر با مقدار حاصل از فراخوانی متد add با پارامترهای x و y است. پس به این شکل می توانیم متد را فراخوانی و خروجی آن را دریافت کنیم.

خود println نیز در واقع یک متد هست که می تواند یک ورودی بگیرد و آن را چاپ نماید.

نکته: ممکن است متدی پارامتری نداشته باشد و ورودی های آن صفر باشند.

نکته: همچنین ممکن است یک متد خروجی نداشته باشد و چیزی تولید نکند. (return value نداشته باشد) در چنین متدهایی که خروجی ندارند نوع خروجی را اصطلاحا از جنس void تعریف می کنیم. پس اگر خروجی متدی void باشد یعنی خروجی خاصی تولید نمی کند. در این متدها از دستور return برای برگرداندن مقدار استفاده نمی کنیم. اما برای خاتمه دادن به اجرای متدی که چیزی برنمی گرداند می توانیم از دستور return استفاده کنیم.

به عنوان مثال در زیر متدی به نام simple را می بینید که پارامتری ورودی نمی گیرد، و مقداری را نیز برنمی گرداند. پس مقدار خروجی آن را برابر void قرار می دهیم و در پرانتز جلوی نام متد ورودی به آن نمی دهیم.

مثال:

برای فراخوانی متدها یک مثال دیگر را مرور می کنیم، در زیر یک کلاس کامل را می بینید، این کلاس با نام PrimeNumbers نام گذاری شده است، متد main دارد و همان طور که می دانید هنگام اجرای برنامه این متد اجرا می شود و دارای متدی به نام isPrime است. این متد یک پارامتر که یک عدد هست دریافت می کند و یک Boolean برمی گرداند که مشخص می کند آیا پارامتری که گرفته یک عدد اول است یا خیر، این تابع بدنه ی ساده ای دارد، ابتدا چک می کند اگر ورودی از 2 کوچکتر باشد false برمی گرداند یعنی پارامترش عدد اول نیست، وگرنه از 2 شروع می کند و تا خود عدد یک به یک چک می کند که آیا عدد ما به شمارنده بخش پذیر هست یا نه، اگر بخش پذیر باشد مقدار false را همان جا برمی گرداند یعنی عددی که دریافت کرده است قطعا عدد اول نیست، اگر این حلقه به پایان برسد و هیچ گاه مقداری را Return نکند می توانیم در آخر می توانیم مقدار true را برگردانیم و مطمئن باشیم این عدد اول است چرا که به هیچ عددی بین 2 و خودش بخش پذیر نبوده است. به این دقت کنید که هر جا داخل متد دستور return اجرا شود، اجرای متد خاتمه پیدا می کند، برای همین لازم نیست برای خط اول متد از else استفاده کنیم زیرا اگر وارد آن شرط بشویم (اگر number از 2 کوچکتر باشد) دیگر اجرای تابع خاتمه پیدا خواهد کرد و نیازی به else بعد از این if نیست.

هنگامی که isPrime به این شکل تعریف شد، می توانیم از آن در برنامه مان استفاده کنیم، مثلا برنامه ای در اینجا نوشتیم که از عدد 0 تا عدد 19 شمرده و اگر آن عددی که در حال شمارش آن هستیم عدد اول باشد آن را چاپ نموده ایم. پس این برنامه به صورت خلاصه اعداد اول در بازه 0 تا 19 را چاپ می کند.

نکته: فعلا به خاطر داشته باشیم که هرجا متدی تعریف می کنیم در ابتدای تعریف آن از کلمه ی کلیدی static استفاده نماییم، دلیل این موضوع را بعدا مفصلا بررسی خواهیم کرد اما فعلا برای اینکه برنامه های ما به درستی اجرا شوند این کلمه را قبل از تعریف تمام متدها قرار می دهیم.

2,9- تمرین عملی

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

از آنجایی که این برنامه قرار است با محیط دایره ها کار کند، خوب است یک متد ایجاد کنیم برای محاسبه ی محیط دایره، برای مثال متدی با نام circumference ایجاد می کنیم که یک عدد صحیح به عنوان شعاع می گیرد و قرار است محیط را حساب کند، محیط دایره از جنس double و یا float خواهد بود و همان طور که گفتیم فعلا ما فرض می کنیم که یک کلمه ی کلیدی static باید اول متدها قرار دهیم.

در بدنه ی این متد یک متغیر محلی برای محاسبه ی محیط دایره به نام c تعریف می کنیم و محیط را بر اساس فرمول محاسبه و در آن ذخیره می کنیم. سپس این مقدار محاسبه شده را برمی گردانیم.

البته می توانستیم بدون تعریف متغیر دیگری از خود عبارت محاسبه ی محیط هم به صورت زیر استفاده کنیم:

حال ما می خواهیم شعاع هایی به صورت عدد صحیح را چاپ کنیم که محیط دایره ی آنها کمتر از 100 باشد. می توانیم یک حلقه ایجاد کنیم که در آن یکی یکی شعاع های مختلف را در نظر بگیریم و محیط آنها را محاسبه کنیم و اگر کمتر از 100 بود آن را چاپ کنیم. این کد را با حلقه ی do-while پیاده سازی می کنیم.

یک متغیر به عنوان شعاع (r) در نظر می گیریم و هر دفعه یکی به مقدار آن اضافه می کنیم، این متغیر را در بیرون از حلقه تعریف و با 0 مقدار دهی اولیه می کنیم. سپس در حلقه هر بار محیط را با فراخوانی تابعی که نوشتیم حساب کرده و چک می کنیم اگر محیطی که حساب کرده ایم از 100 کمتر باشد شعاع دایره را چاپ می کنیم وگرنه از این حلقه خارج می شویم، پس شرط حلقه ی ما نیز این خواهد بود که محیط دایره کمتر از 100 باشد.

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

پس این برنامه هر بار شعاع دایره را یکی اضافه می کند، محیط دایره را محاسبه می کند، اگر محیط دایره از 100 کمتر باشد، شعاع دایره را چاپ می کند و این کار رو تا زمانی ادامه می دهد که محیط دایره از 100 کوچکتر باشد. حاصل اجرای این برنامه را در زیر مشاهده می کنید:

برای امتحان درستی نتیجه کافیست محیط دایره ای با شعاع 16 را محاسبه کنید.

و همان طور که خواهید دید این محیط از 100 بیشتر خواهد شد. پس اعداد 1 تا 15 باید چاپ می شدند و برنامه به درستی اجرا شده است.

در این تمرین ما روی مفهوم متد، تعریف و فراخوانی آن، تعریف و استفاده از متغیرها، مفهوم حلقه و مفهوم شرط تمرکز کردیم.

نکته: در جاوا و در بین برنامه نویسان جاوا رسم هست که اسم کلاس با حرف بزرگ شروع می شود و اگر چند کلمه در اسم وجود دارد هر کلمه با حرف بزرگ شروع می شود مثلا در این مثال: BasicConcepts با B و C بزرگ.

نکته: در مورد متدها، معمولا نام متدها را با حرف کوچک شروع می کنیم، و اگر نام متد چند کلمه ای باشد کلمات بعدی را با حرف بزرگ شروع می کنیم مثلا: CircumferenceCircle

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

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

تمرین دوم: فرض کنید بخواهیم برنامه ای بنویسیم که محیط دایره هایی که شعاع آنها از 1 تا 10 هست را چاپ نماید. این بار بهتر است به جای حلقه ی do-while از یک حلقه ی for استفاده کنیم چون تعداد تکرارها مشخص است. پس به جای حلقه ی مثال قبل یک for می نویسیم که از 1 تا 10 هر بار یکی به شعاع اضافه می کند و در هر مرحله پس از محاسبه ی شعاع، آن را چاپ می نماید.

شما می توانید برنامه را تغییر دهید و حالت های مختلفی را امتحان کنید.

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

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

2,10- جمع بندی

در انتها به جمع بندی مطالبی می پردازیم که در این جلسه دیدیم.

  • در این جلسه ما در مورد محیط های توسعه یا IDE ها صحبت کردیم و به صورت خاص کمی با Eclipse آشنا شدیم و با آن کار کردیم.
  • در مورد انواع داده اولیه یا Primitive Data Types در جاوا صحبت کردیم و دیدیم چطور می توان متغیرهایی از این انواع ساخت.
  • دیدیم چطور می توانیم با کمک عملگرها روی متغیرها عملیات ها و کارهایی را انجام دهیم. در مورد اولویت و شرکت پذیری عملگرها صحبت کردیم.
  • و با مفاهیمی مانند شرط ها، حلقه ها و متدها آشنا شدیم.

2,11- مطالعه کنید

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

Java How to Program (Deitel & Deitel)

1- Introduction

2- Introduction to Java Applications

4- Control Statements: Part 1

5- Control Statements: Part 2

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

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

2,12- تمرین

2,12,1- درباره تمرین

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

2,12,2- تمرین های عملی

در مورد تمام تمرین هایی که گفته شده است هم متد را پیاده سازی کنید و هم برنامه ای بنویسید که آن را فراخوانی و از آن استفاده کند.

  1. برنامه‌ای بنويسيد که دنباله فيبوناچی را تا اعداد کوچکتر از 1000 چاپ کند
    • در صورت امکان به صورت بازگشتی (recursive) پیاده‌سازی کنید. (متدی بازگشتی است که درون خودش خودش را فراخوانی کند)
  2. متدی بنويسيد که مشخص کند پارامترش يک عدد «از دو سر مساوی» (palindrome) است يا خير
    • يعنی عددی که اگر از انتها بخوانيمش، با خودش مساوی شود
    • مثلاً palindrome(1221) مقدار true و palindrome(122) مقدار false برمی‌گرداند
  3. متدی بنويسيد که مشخص کند آيا پارامترش توانی از دو است؟
    • مثلاً 1 و 2و 8 و 64 توانی از دو هستند، ولی 3 و 6 نيستند
  4. برنامه‌ای بنويسید که کارکترهای ‘a’ تا ‘z’ را یک‌درميان چاپ کند
  5. متدی بنويسيد که پارامترش شعاع دايره است و مقدار برگشتی آن مساحت دايره.
  6. تابعی بنويسيد که با کمک کاراکتر ستاره (*) يک مثلث متساوی الساقين با قاعده‌ای عمودی رسم کند.
    • اندازه قاعده به عنوان پارامتر دريافت شود.
    • مثلاً با پارامتر 5، اين ساختار را چاپ کند:

*

***

*****

***

*

  1. متدی بنويسيد که فاکتوريل پارامترش را برگرداند.
    • هم به صورت حلقه‌ای و هم به صورت بازگشتی پياده‌سازی کنید

2,13- جستجو کنید و بخوانید

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

  • Java Bitwise Operators
  • ببینید چه عملگرهایی برای انجام عملیات بیتی در جاوا وجود دارد.
  • IDE
    • Eclipse
    • IntelliJ IDEA
    • NetBeans
  • GOTO statement

همچنین پیشنهاد می کنیم که هر زمان به خطایی برخوردید آن را نیز در اینترنت جستجو کنید. حتما کسانی هستند که تا کنون به این مشکل برخوردند و آن را در اینترنت مطرح کردند و کسانی هم هستند که به آن پرسش ها جواب داده اند و با جستجو در اینترنت خیلی از وقت ها به پاسخ مورد نظر خود خواهید رسید.

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

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

دکمه بازگشت به بالا