قسمت پنجم : عملگر ها, اعداد, رشته ها, تاریخ و زمان, ساختارهای تصمیم و تکرار
عملگر ها
جاوا فراهم می کند مجموعه ای کامل از عملگر ها را برای تغییر و دستکاری داده ها. عملگر ها در جاوا به گروه های زیر تقسیم میشوند :
- عملگر های حسابی
- عملگر های رابطه ای
- عملگر های بیتی
- عملگر های منطقی
- عملگر های انتساب
- عملگر های متفرقه
عملگر های حسابی(Arithmetic Operators)
عملگر های حسابی در عملیات محاسباتی و ریاضی مورد استفاده قرار می گیرد.
* فرض: دو متغیر از نوع int بنام های A و B داریم.
عملگر |
شرح |
مثال |
+ |
جمع مقدار دو متغیر |
A + B |
- |
تفریق عملوند سمت راست(B) از عملوند سمت چپ(A) |
A - B |
* |
دو عملوند را در هم ضرب می کند |
A * B |
/ |
تقسیم عملوند سمت چپ بر عملوند سمت راست(بدست آوردن خارج قسمت) |
A / B |
% |
تقسیم عملوند سمت چپ بر عملوند سمت راست(بدست آوردن باقیمانده) |
A % B |
++ |
افزایش یک واحدی عملوند |
A++ |
-- |
کاهش یک واحدی عملوند |
A-- |
عملگر های رابطه ای(Relational Operators)
عملگر های رابطه ای شامل موارد زیر است :
عملگر |
شرح |
مثال |
== |
بررسی می کند که آیا مقدار دو عملوند با هم برابر است یا خیر, اگر برابر بودند مقدار True برگردانده می شود |
(A == B) |
!= |
بررسی می کند که آیا مقدار دو عملوند با هم مخالف است یا نه, اگر برابر نبودن مقدار True بر می گرداند |
(A != B) |
> |
بررسی می کند که آیا عملوند سمت چپ از عملوند سمت راست بزرگتر است یا نه, اگر بزرگتر بود مقدار True برگردانده می شود |
(A > B) |
< |
بررسی می کند که آیا عملوند سمت چپ از عملوند سمت راست کوچکتر است یا نه, اگر کوچکتر بود مقدار True برگردانده می شود |
(A < B) |
>= |
بررسی می کند که آیا عملوند سمت چپ از عملوند سمت راست بزرگتر یا مساوی است یا نه, اگر بزرگتر یا مساوی بود مقدار True برگردانده می شود |
(A >= B) |
<= |
بررسی می کند که آیا عملوند سمت چپ از عملوند سمت راست کوچکتر یا مساوی است یا نه, اگر کوچکتر یا مساوی بود مقدار True برگردانده می شود |
(A <= B) |
عملگر های بیتی(Bitwise Operators)
عملگر های بیتی روی بیت ها کار می کنند و عملیات را بصورت بیت به بیت انجام می دهند.
عملگر |
شرح |
مثال |
& |
AND دودویی را انجام می دهد |
(A & B) |
| |
OR دودویی را انجام می دهد |
(A | B) |
^ |
XOR دودویی را انجام می دهد |
(A ^ B) |
~ |
عمل NOT را انجام می دهد |
(~A) |
<< |
شیفت چپ دودویی |
(A << 2) |
>> |
شیفت راست دودویی |
(A >> 2) |
>>> |
شیفت به راست همرا با صفر |
(A >>> 2) |
عملگر های منطقی(Logical Operators)
برای مقایسه بولی(منطقی) می باشد.
عملگر |
شرح |
مثال |
&& |
عمل AND منطقی را انجام می دهد |
(A && B) |
|| |
عمل OR منطقی را انجام می دهد |
(A || B) |
! |
عمل NOT منطقی را انجام می دهد |
!(A && B) |
عملگر های انتساب(Assignment Operators)
عملگر |
شرح |
مثال |
= |
انتساب مقدار عملوند سمت راست به عملون سمت چپ |
C = A + B |
+= |
مقدار عملوند سمت راست را با مقدار عملوند سمت چپ جمع می کند |
C += A که برابر است با : C = C + A |
-= |
مقدار عملوند سمت راست را از عملوند سمت چپ چپ کم می کند |
C -= A که برابر است با : C = C - A |
*= |
مقدار عملوند سمت راست را در مقدار عملوند سمت چپ ضرب می کند |
C *= A که برابر است با : C = C * A |
/= |
نمایش خارج قسمت حاصل تقسیم عملوند سمت چپ بر عملوند سمت راست |
C /= A که برابر است با : C= C / A |
%= |
نمایش باقیمانده حاصل تقسیم عملوند سمت چپ بر عملوند سمت راست |
C %= A که برابر است با : C = C % A |
<<= |
شیفت چپ منطقی و انتساب |
C <<= 2 که برابر است با : C = C << 2 |
>>= |
شیفت راست منطقی و انتساب |
C >>= 2 که برابر است با : C = C >> 2 |
&= |
انجام عمل AND بیتی |
C &= 2 که برابر است با : C = C & 2 |
^= |
انجام عمل XOR منطقی |
C ^= 2 که برابر است با : C = C ^ 2 |
|= |
انجام عمل OR منطقی |
C |= 2 که برابر است با : C = C | 2 |
عملگر های متفرقه(miscellaneous Operators)
- عملگر شرطی یک خطی (? :) : می توان شرط if else را بصورت یک خطی هم نوشت. بدین صورت:
مثال:
خروجی:
Value of b is : 30
Value of b is : 20
2. عملگر های دیگری هم وجود دارد که بررسی و مطالعه آن به خواننده واگذار می شود, از قبیل instanceof و ... .
اعداد
بطور معمول, وقتی ما با اعداد کار می کنیم در حقیقت ما در حال استفاده از Primitive Data Type ها هستیم, از قبیل byte, int, long, double و ... .
مثال :
در حین توسعه برنامه ها ما به سناریو هایی بر می خوریم که ما نیار داریم به Object بجای Primitive Data Type ها. در جهت رسیدن به این منظور جاوا کلاس های Wrapper را برای هر نوع داده Primitive فراهم می کند.
همه کلاس های Wrapper از قبیل Integer, Long, Byte, Double, Float, Short از کلاس انتزاعی(Abstract) Number مشتق می شوند(یا بعبارتی از کلاس انتزاعی(Abstract) Number ارث بری(Inheritance) می کنند و بعنوان زیرکلاس(SubClass) و فرزند(Child) کلاس Number هستند).
این Wrapping توسط کامپایلر مراقبت می شود, که به این پروسه Boxing گفته می شود. بنابراین زمانی که یک نوع داده Primitive بعنوان یک Object مورد استفاده قرار می گیرد, کامپایلر Box می کند نوع داده Primitive را در کلاس Wrapper خودش. عکس این عمل نیز Unboxing نام دارد. کامپایلر Unbox می کند یک Object را به نوع داده Primitive .
یک مثال برای عمل Boxing و Unboxing :
و در نهایت خروجی :
زمانیکه مقدار Integer به متغیر x انتساب داده می شود, کامپایلر Integer را Box می کند زیرا متغیر x یک شیء از کلاس Integer می باشد. در نهایت این متغیر(x) Unboxes می شود بطوریکه می تواند به عنوان Integer اضافه شده باشد.
در ادامه نگاهی به تعدادی از Instance Method ها می اندازیم که همه زیر کلاس های Number این متد ها را پیاده سازی(Implement) کرده اند :
* xxxValue() : تبدیل مقدار یک Object از یک کلاس مانند Integer, … به Data Type مورد نظر.
* compareTo() : مقایسه شیء عددی جاری با آرگومان داده شده.
* equals() : بررسی می کند که شیء عددی جاری آیا با آرگومان داده شده برابر است یا خیر.
* valueOf() : یک شیء از نوع Integer بر می گرداند نگهداری می کند مقدار نوع داده Primitive مشخص شده.
* toString() : یک شیء String ای بر می گرداند که مقدار نوع Integer یا int مشخص شده را نمایش می دهد.
* تعدادی متد دیگر می باشد که مطالعه و بررسی آنها به خواننده واگذار می گردد.
رشته
رشته ها(String) در توسعه App ها بسیار پر کاربرد می باشد ؛ در حقیقت رشته ها مجموعه ای(دنباله ای) از کاراکتر ها می باشد. در جاوا رشته ها شیء(Object) می باشند و String یک کلاس می باشد برای ایجاد(Create) و دستکاری(Manipulate) داده.
مثال. ایجاد یک متغیر رشته ای :
زمانیکه کامپایلر در کد به یک متغیر رشته ای بر خورد می کند, یک شیء از کلاس String همراه با مقدار آن رشته ایجاد می کند.
کلاس String دارای چندین نوع(Overload) سازنده(Constructor) مختلف می باشد که به شما این امکان را می دهد مقدار دهی اولیه(Initial Value) را فراهم کنید.
و خروجی :
- نکته : کلاس String تغییر ناپذیر(Immutable) است, یعنی وقتیکه یکبار شیء ای از کلاس String ایجاد شد دیگر نمی تواند تغییر داده شود. در این مواقع باید از کلاس String Buffer و String Builder استفاده شود.
لیست تعدادی از متد ها که توسط کلاس String پشتیبانی می شود :
* concat(String str) : الحاق رشته داده شده به انتهای رشته جاری.
* compareTo(String str) : مقایسه دو رشته
* length() : طول رشته را برمی گرداند.
* تعدادی متد دیگر می باشد که مطالعه و بررسی آنها به خواننده واگذار می گردد.
تاریخ و زمان
کلاس Date در بسته (Package) java.util می باشد. این کلاس متد های کار با تاریخ و زمان را کپسوله می کند.
سازنده کلاس تاریخ دو نوع Overload دارد که سازنده اول یک شیء از کلاس Date ایجاد و همرا با تاریخ و زمان جاری آنرا مقداردهی اولیه(Initialize ) می کند.
حال به تعدای از متد هایی که برای یک شیء از کلاس Date در دسترس می باشد نگاهی می اندازیم :
نام متد |
شرح عملکرد متد |
||
boolean after(Date date) |
اگر شیء ای که این متد را فراخوانی کرده است شامل تاریخی باشد که این تاریخ, بعد از تاریخ آرگومان ورودی متد باشد مقدار True بر میگرداند. در غیر اینصورت مقدار False بر می گرداند. |
||
|
اگر شیء ای که این متد را فراخوانی کرده است شامل تاریخی باشد که این تاریخ, قبل از تاریخ آرگومان ورودی متد باشد مقدار True بر میگرداند. در غیر اینصورت مقدار False بر می گرداند. |
||
int compareTo(Date date) |
مقایسه دو تاریخ. اگر با هم برابر بودند متد مقدار صفر بر می گرداند و اگر برابر نبودند متد مقدار منفی بر می گرداند. |
||
boolean equals(Object date) |
اگر مقدار تاریخ و زمان هر دو شیء با هم شبیه بودند مقدار True برمی گرداند در غیر اینصورت مقدار False بر می گرداند |
||
long getTime( ) |
زما سپری شده بر حسب میلی ثانیه |
||
int hashCode( ) |
هش کد شیء جاری را بر می گرداند |
||
void setTime(long time) |
تاریعخ و زمان شیء جاری را بر حسب آرگومان داده شده تنظیم می کند. |
||
String toString( ) |
تبدیل شیء تاریخ جاری با رشته |
مثال:
خروجی :
فرمت دهی تاریخ و زمان : با استفاده از کلاس SimpleDateFormat می توان تاریخ و زمان مورد نظر خود را فرمت دهی کنید. این کلاس یک کلاس Concrete می باشد(کلاس غیر Abstract).
مثال :
خروجی :
تعدادی از الگو های فرمت دهی :
ساختار های تصمیم
دو نوع ساختار های تصمیم در جاوا وجود دارد :
- If statements
- Switch statements
1. if statement : یک شرط if شامل یک عبارت بولی(Boolean Expression) می شود.
نحو کلی آن به شکل زیر می باشد :
مثال :
خروجی :
ساختار تصمیم if چند شرطی :
2. switch statement : با این ساختار می توان چندین مقدار را برای یک متغیر چک کرد. هر مقدار یک case می باشد.
ساختار کلی آن بدین صورت می باشد :
مثال :
خروجی :
ساختار های تکرار
گاهی اوقات سناریو هایی وجود دارد که ما نیاز داریم یک بلاک از کد چندین بار اجرا شوند که بیشتر با نام حلقه یا loop شناخته شده هستند. جاوا دارای چهار مکانیسم حلقه تکرار می باشد :
- while Loop
- do...while Loop
- for Loop
- Enhanced for loop
1. while loop :
While یک ساختار کنترلی می باشد که به شما این امکان را می دهد یک قطعه از کد به تعداد معینی تکرار شود.
تا زمانیکه شرط حلقه(boolean_expression) مقدار True داشته باشد, کدهای داخل بلاک حلقه اجرا می شوند.
نحو کلی یک حلقه while :
مثال :
و خروجی آن :
. do…while loop :
Do…while هم While یک ساختار کنترلی می باشد که به شما این امکان را می دهد یک قطعه از کد به تعداد معینی تکرار شود. عملکرد این حلقه هم همانند حلقه while معمولی می باشد, فقط تفاوت آن در این است که تضمین می کند : حداقل یکبار کد های داخل بلاک حلقه اجرا می شوند.
نحو کلی یک حلقه do…while :
مثال:
و خروجی آن:
حلقه for هم یک ساختار کنترلی می باشد که به شما این امکان را می دهد یک قطعه از کد به تعداد معینی تکرار شود. این حلقه زمانی کاربرد دارد که که شما می دانید حلقه باید چند بار اجرا شود.
نحو کلی یک حلقه for :
مثال :
و خروجی آن :
4. Enhanced for loop :
این حلقه تکرار از جاوا 5 معرفی شد که برای پیمایش مجموعه هایی(Collections) مانند آرایه, لیست مورد کاربرد می باشد و معمولا در دیگر زبان های برنامه نویسی با نام Foreach loop شناخته شده می باشد.
نکته : در حقیقت این حلقه , یک Implicit iterator هست. iterator یک شیء می باشد که برنامه نویس را قادر می سازد یک مجموعه(مانند لیست) را پیمایش کند. از لحاظ رفتاری iterator شبیه به cursor(یک ساختار کنترلی است که از طریق آن می توان یک مجموعه از رکوردهای دیتابیس را پیمایش کرد) در دیتابیس است.
نحو کلی آن بدین صورت می باشد :
مثال:
و در نهایت خروجی آن:
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.