نرم افزارهای اندروید غیر از رابط نرم افزاری و گرافیکیای که دارند در پشت صحنه فعالیتهایی دارند که باید به زبان Java نوشته شود.
مثلا فرض کنید وظیفه یک برنامه اندروید، دریافت وضعیت آب و هوای 24 ساعت آینده است. شاید اولین کاری که برای این برنامه انجام میدهید این باشد که یک رابط کاربری شکیل برای آن طراحی کنید، ولی آیا این کافی است؟
خیر، شما در پشت صحنه نیازمند یک سری کد هستید که بر اساس موقعیت جغرافیایی کاربر به منابع مناسب متصل و اطلاعات آب و هوای 24 ساعت آینده آن موقعیت جغرافیایی را دریافت و به کاربر نمایش دهد. قبل از دریافت اطلاعات ابتدا باید چک شود قابلیت GPS کاربر فعال است یا خیر، و یا این که کاربر به اینترنت متصل است یا خیر.
تمام اعمالی که در پاراگراف قبلی بیان کردیم باید با برنامه نویسی Java پیاده شوند، هر چند که از نظر کاربران مخفی هستند و کاربر هیچ گاه متوجه عملکرد کدها در پشت صحنه نیست.
مبحث برنامه نویسی Java را با انجام عملیات ریاضی ادامه میدهیم.
محاسبات پایه ریاضی در Java
اعمال جمع، تفریق، ضرب، تقسیم و محاسبه باقی مانده در هر زبان برنامه نویسی اعمال محاسباتی پایه محسوب میشود. مثالهای زیر را با هم ببینید:
int number1= 20;
int number2= 10;
int calculation= number1 + number2;
Log.i("Addition: ", "" + calculation);
calculation= number1 - number2;
Log.i("Subtraction: ", "" + calculation);
calculation= number1 * number2;
Log.i("Multiplication: ", "" + calculation);
calculation= number1 / number2;
Log.i("Division: ", "" + calculation);
calculation= number1 % number2;
Log.i("Division: ", "" + calculation);
در سطر اول و دوم دو متغیر به نامهای number1 و number2 تعریف کردیم.
در سطر سوم یک متغیر از نوع int و با نام calculation تعریف کردیم که در مقابل آن دو متغیر را با هم جمع نمودیم.
در سطر چهارم با استفاده از دستور Log.i
سعی کردیم حاصل جمع دو متغیر را که در calculation ذخیره شده بود در Logها نمایش دهیم. توجه کنید که چون ورودیهای متد Log.i باید از نوع رشتهای باشند از رشته "" +
استفاده کردیم.
در سطر 5 با عملیات تفریق دو متغیر number1 و number2 مقدار موجود در متغیر calculation را ویرایش کردیم. توجه کنید که چون متغیر calculation پیش از این یکبار تعریف شده بود، برای بار دوم نیازی به استفاده از int قبل از calculation وجود ندارد.
در سطر 6 مقدار calculation را در Log نمایش دادیم.
در سطر 7 دو متغیر را در هم ضرب و در سطر 8 حاصلضرب دو متغیر را در Log ذخیره کردیم.
در سطر 9 دو متغیر را تقسیم و در سطر 10 حاصل این تقسیم را در Log ذخیره کردیم.
در سطر 10 با استفاده از %
باقی مانده تقسیم number1 بر number2 را بدست آورده و در سطر 11 در Log ذخیره کردیم.
پاسخ اجرای کدهای فوق به شرح زیر است:
عملگرهای ریاضی ویژه
در مثال زیر قصد داریم به مقدار متغیر number عدد یک را اضافه کنیم:
int number= 4;
number= number + 1;
اگر متغیر number را پس از عملیات فوق در Log ببینید خواهید دید number تبدیل به 5 شده است. یک راه دیگر برای انجام عملیات اضافه کردن یک عدد به یک متغیر وجود دارد و آن هم استفاده از عملگر ویژه ++ است. برای کم کردن یک عدد نیز میتوانید از -- استفاده کنید. مانند:
int number= 4;
number++;
Log.i("Operator ++: ", "" + number);
number--;
Log.i("Operator --: ", "" + number);
در بالا ابتدا 5 و در مرحله بعد 4 چاپ میشود.
البته میتوان به عنوان مثال عبارت number++;
را به صورت number+=1;
نیز نوشت. این روش البته برای تمام عملیات ریاضی ممکن است.
سوال: متد Log در زیر چه عددی را چاپ میکند:
int number= 4; number*=5; number/=2; Log.i("
calculation:", "" + number);
پاسخ: عدد 10 است، چون در خط دوم عدد 4 در 5 ضرب شده و در سطر سوم عدد حاصل از محاسبات سطر قبلی بر 2 تقسیم میشود.
شرطها در Java
جزء لا ینفک هر برنامه شرطها هستند، مثلا در مثال اول این بخش گفتیم که برنامه هواشناسی باید وضعیت اینترنت کاربر را بررسی کند، این کار نیازمند یک شرط است که اگر اینترنت کاربر فعال بود فلان کار را بکند و اگر فعال نبود کار دیگری را انجام دهد.
در ابتدا به عملگرهای ویژه شرطها میپردازیم:
==
برای بررسی مساوی بودن دو متغیر!=
برای بررسی مساوی نبودن دو متغیر>
و<
برای بررسی بزرگتر بودن و یا کوچکتر بودن<=
و>=
برای بررسی بزرگتر مساوی و کوچکتر مساوی
برای پیاده سازی شرطها از if استفاده میشود. به مثال زیر توجه کنید:
int number1= 5;
int number2= 8;
if(number1 != number2){
Log.i("Message1: ", "This Message Is Shown");
}
if(number1 == number2){
Log.i("Message2: ", "This Message Not Shown");
}
if(number1 > number2){
Log.i("Message3: ", "This Message Not Shown");
}
if(number1 < number2){
Log.i("Message4: ", "This Message Is Shown");
}
if(number1 <= number2){
Log.i("Message4: ", "This Message Is Shown");
}
if(number1 >= number2){
Log.i("Message4: ", "This Message Is Shown");
}
در سطر سوم عبارت number1 != number2
بررسی میکند که اگر number1 با number2 برابر نبود عبارت داخل براکت دستور if اجرا شود.
در سطر ششم اگر شرط number1 == number2
بر قرار باشد دستور داخل براکت اجرا میشود. و همینطور شرطهای دیگری که در سطرهای 10 و 12 و 15 و 18 بررسی میشوند.
در آخر تنها پیامهای Message1 و Message4 در Log نمایش داده میشوند.
البته برای دستور if میتوان else نیز تعریف کرد که به این معناست که اگر شرط if برقرار نبود عملیات خاصی را انجام دهد. مانند:
if(1 == 5){
Log.i("Message: ", "one is equal five");
}else{
Log.i("Message: ", "one does not equal five");
}
اگر دستورات فوق را در Android Studio وارد کنید بخش درون else اجرا خواهد شد.
البته میتوان از دستور else if
به منظور بررسی شرط در چند مرحله نیز استفاده کرد، مانند زیر:
int number1= 5;
int number2= 8;
if(number1 == number2){
Log.i("Message1: ", "This Message Is Shown");
}else if(number1 != number2){
Log.i("Message2: ", "This Message Is Shown");
}else{
Log.i("Message3: ", "This Message Is Shown");
}
در نتیجه اجرای دستورات فوق Message2 در Logها به نمایش در میآید.
سوال: فکر میکنید Log موجود در دستور شرطی زیر اجرا میشود یا خیر؟
if(true){
Log.i("title", "The Conditon is True");
}
جواب: هر شرطی که استفاده میکنید در نهایت به یکی از دو حالت true و یا false ترجمه میشود، در بالا بدلیل استفاده صریح از true عبارت درون براکت دستور شرطی اجرا خواهد شد.
دستورات شرطی switch case
قالب دیگری از دستورات شرطی وجود دارد که در پایین مثالی از آنها میآوریم:
int number= 3;
switch (number){
case 1:
Log.i("switch case: ", "case 1");
break;
case 2:
Log.i("switch case: ", "case 2");
break;
case 3:
Log.i("switch case: ", "case 3");
break;
default:
Log.i("switch case: ", "default");
break;
}
در سطر اول یک متغیر به نام number و با مقدار 3 تعیین میکنیم. در سطر دو مقابل عبارت case و درون پرانتز نام متغیر number را آورده و در سطرهای 3 و 6 و 9 بررسی میکنیم که number با عدد مورد نظر ما برابر است یا خیر. مثلا در سطر سوم بررسی میکنیم که number با 3 برابر است یا خیر.
با توجه به مثال بالا case 3
اجرا خواهد شد. دستور break
بدین منظور آمده است تا اجرای این شرط در این مرحله به پایان برسد.
default بدین منظور ذکر شده است تا اگر هیچ یک از caseهای فوق بر قرار نبودند مقدار درون default اجرا شود.
شرطهای پیشرفته
در شرطهای جاوا میتوان از قوانین بولی استفاده کرد تا شرطها را در هم ترکیب کرده و شرطهای اختصاصی ایجاد کنیم.
سه دستور عمده در دستورهای بولی عبارتند از:
- AND: در حالتی درست خواهد شد که هر دو طرف AND شرطهای صحیحی بیایند. در جاوا AND به صورت
&
استفاده میشود. - OR: در حالتی درست خواهد شد که یکی از دو طرف OR صحیح باشد. در جاوا OR به صورت
|
نمایش داده میشود. - NOT: صحیح را به غلط و غلط را به صحیح تبدیل میکند و در جاوا با
!
می توانیم حالتهای صحیح و غلط را تغییر دهیم.
مثال زیر را بررسی میکنیم:
boolean status1= true;
boolean status2= true;
if(status1 & status2){
Log.i("title", "The Condition is True");
}
در بالا چون status1 و status2 صحیح و true هستند و در بین این دو از & استفاده شده کل دو عبارت موجود در if صحیح و true تلقی شده است. به مثال زیر توجه کنید:
boolean status1= true;
boolean status2= false;
if(status1 & status2){
Log.i("title", "The Condition is True");
}
در بالا عبارت درون براکت اجرا نمیشود.
boolean status1= true;
boolean status2= true;
if(status1 | status2){
Log.i("title", "The Condition is True");
}
در بالا عبارت درون براکت اجرا میشود چون هر دو متغیر صحیح هستند و برای صحیح بودن رابطه بولی OR تنها کافی است یکی از دو حالت صحیح باشند.
به مثال زیر توجه کنید:
if(!true){
Log.i("title", "The Condition is True");
}
دستورات درون براکت if فوق اجرا نمیشوند چون عبارت !true
به معنای false است.