آموزش قدم به قدم جاوا – قسمت چهارم – بخش اول

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

عملگرها (Operators)

همه‌ی ما با چهار عملگر اصلی ریاضی آشنا هستیم و دائما از آن‌ها استفاده می‌کنیم. به طور مثال اگر بخواهیم عدد ۲ و ۳ را با هم جمع کنیم به صورت زیر عمل می‌کنیم:

2 + 3

در عبارت بالا علامت + عملگر (Operator) و اعداد چپ و راست آن عملوند (Operand) های عملگر + هستند.

طرز کار عملگرها در جاوا دقیقا به همین شکل است: هر عملگر باید یک یا دو عملوند (بستگی به نوع عملگر دارد) داشته باشد سپس عملگر مورد نظر با توجه به عملوندهای خود عملیاتی را انجام می‌دهد و نتیجه‌ای را به ما برمی‌گرداند. به همین سادگی!

در جاوا پنج نوع عملگر داریم:

1- عملگرهای ریاضی (Arithmetic Operators)

2- عملگرهای نسبی (Relational Operators)

3- عملگرهای منطقی (Logical Operators)

4- عملگرهای انتساب (Assignment Operators)

5- عملگرهای بیتی (Bitwise Operators)

عملگرهای ریاضی

این عملگرها همانطور که از نام آن معلوم است برای انجام محاسبات ریاضی به کار می‌روند. در جدول زیر عملگرهای ریاضی در جاوا را مشاهده می کنید:

 

طرز کار

کاربرد

عملوند

عملوند + عملوند

جمع

+

عملوند – عملوند

تفریق

عملوند * عملوند

ضرب

*

عملوند / عملوند

تقسیم

/

عملوند % عملوند

باقی مانده

%

++عملوند یا عملوند++

افزایش یک واحدی

++

– -عملوند یا عملوند- –

کاهش یک واحدی

– –

به کد زیر دقت کنید:

در این کد دو متغیر از جنس int تعریف کردیم و به آن‌ها مقدار دادیم و در آخر هم مقدار متغیر را با دادن نام متغیر به دستور چاپ روی صفحه چاپ می‌کنیم (با داشتن نام متغیر می‌توان از مقدار آن استفاده کرد.). همانطور که گفتیم در جاوا بعد از اینکه عملگر کار خودش را روی عملوندها انجام می‌دهد نتیجه را به صورت یک مقدار بر می‌گرداند و بالطبع نتیجه عملگرهای ریاضی یک عدد است. پس همانطور که در شکل زیر می‌بینید ۱۱ با ۲ جمع شده و نتیجه آن در متغیر a قرار می‌گیرد:

jop1

نکته دیگر اینکه عملوندهای این عملگرها الزاما نباید یک مقدار ثابت عددی باشند و اصلا از این شکل نوشتن در برنامه‌نویسی استفاده نمی‌شود چون می‌توانیم به جای 2 + 11 مستقیما عدد 13 را داخل متغیر a قرار دهیم! به کد زیر دقت کنید:

ابتدا دو متغیر تعریف کرده و به آن‌ها مقدار داده‌ایم سپس در دستور چاپ عبارت a % b را قرار دادیم تا باقی‌مانده تقسیم 12 بر 2 به دست آید و چاپ شود. حالا اگر هر مقداری به این دو متغیر بدهیم باقی‌مانده تقسیم متغیر a بر b برای ما چاپ خواهد شد.

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

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

به کد زیر دقت کنید:

مقدار 5 را در متغیری با نام a قرار دادیم. سپس با عملگر ++ یک واحد به این متغیر اضافه کردیم و بعد از آن مقدار متغیر را چاپ کردیم. در کامنتی که در کد می‌بینید عبارت معادل عبارت a++ نیز نوشته شده است.

این دو عملگر را می‌توان هم پشت عملوند آن و هم جلوی آن قرار داد. اما تفاوت a++ و ++a یا a– و –a در چیست؟ در کد قبلی هیچ فرقی نمی‌کند که شما عملگر ++ را قبل از عملوند آن یعنی a بنویسید یا بعد از آن اما وقتی یک دستور کاهشی یا افزایشی خود بخشی از یک دستور بزرگتر باشد، اگر عملگر کاهشی یا افزایشی بعد از عملوند آن بیاید ابتدا دستور بزرگتر (دستوری که دربردارنده دستور کاهشی یا افزایشی است) اجرا می‌شود و سپس یک واحد از عملوند موردنظر کم یا به آن اضافه می‌شود اما اگر عملگر کاهشی یا افزایشی قبل از عملوند آن بیاید آنگاه ابتدا یک واحد از عملوند کم یا به آن اضافه می‌شود سپس دستور بزرگتر اجرا می‌شود. این توضیحات شاید نامفهوم به نظر برسند اما با یک مثال ساده می‌توان به راحتی آن را نشان داد:

ابتدا یک واحد به متغیر x اضافه شده و سپس مقدار آن درون متغیر y قرار می‌گیرد. (در این کد و کد بعدی دستور قرار دادن مقدار متغیر x در y همان دستور دربردارنده دستور ++x است که گفتیم یعنی همان دستور بزرگتر)

اما در این کد:

ابتدا مقدار متغیر x درون متغیر y قرار می‌گیرد و سپس یک واحد به متغیر x اضافه می‌شود. یعنی y برابر با 10 می‌شود یعنی مقدار x قبل از عمل افزایش!

به همین دلیل اگر کد اول را اجرا کنید عدد 11 در کنسول چاپ و اگر کد دوم را اجرا کنید عدد 10 چاپ می‌شود.

عملگرهای نسبی

با این عملگرها هم از قبل آشنا هستید. این عملگرها هم مانند عملگرهای ریاضی دو عملوند دریافت می‌کنند و یک مقدار بر می‌گردانند البته یک مقدار boolean نه عددی.

عملگرهای نسبی در جاوا را در جدول زیر مشاهده می‌کنید:

 

مساوی

==

نامساوی

!=

بزرگتر

>

کوچکتر

<

بزرگتر یا مساوی

>=

کوچکتر یا مساوی

<=

 

عملوندهای این عملگرها بر اساس عملگر خود با هم مقایسه می‌شود و نتیجه این مقایسه یا true است یا false یعنی اگر مثلا دو متغیر عددی را با عملگر بزرگتر با هم مقایسه کنید، اگر عملوند اولی از دومی بزرگتر باشد true و در غیر این صورت false برگردانده می‌شود.

مثال:

در دستور چاپ اول true چاپ می‌شود چون x از y بزرگتر است (باید بزرگتر یا مساوی باشد).

در دستور چاپ دوم هم true چاپ می‌شود چون x با y مساوی نیست.

اما در دستور چاپ سوم false چاپ می شود چون x از y کوچکتر نیست.

نکته: چون نتیجه این عملگرها یک عبارت boolean است بنابراین می‌توان نتیجه آن را در یک متغیر از نوع boolean نیز ذخیره کرد. مثال:

عملگرهای منطقی

عملوندهای عملگرهای منطقی باید یک عبارت boolean باشند. یعنی این عملگرها دو عبارت boolean را می‌گیرند و آن دو را ارزیابی می‌کنند و سپس نتیجه‌ای را برمی‌گردانند. عملگرهای منطقی را در جدول زیر مشاهده می‌کنید:

AND (Short-circuit) &&
OR (Short-circuit) ||
NOT !
AND &
OR |
XOR ^

نکته: Short-circuit را مدارکوتاه ترجمه می‌کنند.

حالا به توضیح این عملگرها می پردازیم:

&& (Short-circuit AND)

اگر هر دو عملوند این عملگر true باشند آنگاه این عملگر true بر می‌گرداند در غیر این صورت نتیجه false خواهد بود. مثال:

این دستور چاپ عبارت true را چاپ خواهد کرد. چگونه؟ به شکل زیر دقت کنید:

jop2

همانطور که در شکل مشخص است ابتدا دو عبارت x > y و x > 5 ارزیابی می‌شوند. با توجه به مقادیر آن ها در کد نتیجه هر دو true است. حالا عملگر && وارد عمل شده و چون هردو عملوند آن true هستند در نتیجه مقدار true بر می‌گردد.

|| (Short-circuit OR)

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

مثال:

نتیجه اجرای این برنامه نمایش عبارت true در کنسول است. اگرچه x با y برابر نیست اما چون x از 5 بزرگتر است بنابراین نتیجه || هم true می‌شود.

! (NOT)

به این عملگر نقض‌کننده گفته می‌شود. این عملگر برخلاف دیگر عملگرهای منطقی یک عملگر تک‌عملوندی است. کار این عملگر این است که مقدار مخالف عملوند خود را بر می‌گرداند یعنی اگر عملوند آن true باشد مقدار false و اگر عملوند آن false باشد مقدار true را بر می‌گرداند.

مثال:

همانطور که واضح است نتیجه عبارت x > 5 برابر با true خواهد بود در نتیجه عملگر ! مقدار true را false کرده و عبارت false در کنسول چاپ خواهد شد. (توجه داشته باشید که عبارت x > 5 درون پرانتز قرار گرفته است)

& و | (AND و OR)

این دو عملگر مانند نسخه مدار کوتاه (Short-circuit) خود عمل می‌کنند (یعنی && و ||) اما با یک تفاوت.

در برنامه زیر:

وقتی عملگر && عملوند سمت چپ خود را بررسی کند می‌بیند که false است و دیگر عملوند دوم خود را بررسی نخواهد کرد چون نتیجه صددرصد false خواهد بود حتی اگر عملوند سمت راست true باشد (به دلیل ماهیت این عملگر). اما اگر در همین کد به جای && عملگر & را قرار دهیم حتی اگر عملوند اول false باشد باز هم عملوند دوم بررسی خواهد شد.

در عملگر || هم به همین صورت است یعنی اگر عملوند اول (سمت چپ) این عملگر true باشد دیگر عملوند دوم بررسی نخواهد شد چون نتیجه صددرصد true می شود حتی اگر عملوند دوم false باشد (به دلیل ماهیت این عملگر). اما اگر از | استفاده کنیم آنگاه همیشه هردو عملوند بررسی خواهند شد حتی اگر عملوند اول true باشد.

نکته مهم: به دلیل بهینه‌تر شدن برنامه و افزایش Performance توصیه می‌شود که تا حد امکان از AND و OR های مدارکوتاه (&& و ||) استفاده شود.

^ (XOR)

طرز کار این عملگر هم ساده است. اگر هر دو عملوند این عملگر هم ارزش باشند (یعنی هردو false یا هردو true) آنگاه این عملگر مقدار false را بر می‌گرداند و اگر عملوندهای این عملگر هم ارزش نباشند آنگاه این عملگر مقدار true را بر می‌گرداند.

مثال:

نتیجه برنامه زیر چاپ عبارت false در کنسول است. چون هر دو عملوند این عملگر true هستند. در عوض اگر مثلا x > 5 را به x > 50 تغییر دهید آنگاه عبارت true چاپ خواهد شد.

جدول رفرنس عملگرهای منطقی

!x

x ^ y

x || y

x && y

y

x

True

False

False

False

False

False

False

True

True

False

False

True

True

True

True

False

True

False

False

False

True

True

True

True

 

امیدوارم که از این قسمت بهره کافی رو برده باشید.

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

مصطفی نصیری

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

همچنین ممکن است دوست داشته باشید ...

۱۴ واکنش

  1. روح گفت:

    خودم: «این مبحث در عین اینکه ساده به نظر میاد ولی زیادی ساده نیست».

    اگر بخوایید یه کتاب آموزش جاوا (انگلیسی) برای کسی که میخواد برای اندروید اپ بنویسه پیشنهاد بدید اسم اون کتاب چیه؟

    • مصطفی نصیری گفت:

      منظورتون از زیادی ساده نیست بحث عملگرها بود؟
      کتاب Java A Beginner’s Guide رو پیشنهاد میدم البته ویرایش ششم که با JDK 8 تنظیم شده. ضمنا ناشر این کتاب شرکت Oracle هست و نویسندش هم هربرت شیلد
      موفق باشید

  2. Ali گفت:

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

  3. علی گفت:

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

  4. Reza Sahebi گفت:

    سلام خسته نباشین خواهشن این بحـ زیبای جاوا رو که شروع کردین ادامه بدین خیلی عالیه بعد از کلی جستجو تو گوگل و سایتای مختلف این حارو پیدا کردم از ساعت ۱۲٫۰۰ دارم میخونم
    حتما ادامه مطالب رو بزارین

  5. مبی گفت:

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

  6. Anahid mansoubi گفت:

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

  7. فاطمه گفت:

    سلام ..تو قسمت عملگرهای کاهشی و افزایشی، قسمت”اگر عملگر کاهشی یا افزایشی قبل از عملوند آن بیاید ابتدا دستور بزرگتر (دستوری که دربردارنده دستور کاهشی یا افزایشی است) اجرا می‌شود و سپس یک واحد از عملوند موردنظر کم یا به آن اضافه می‌شود اما اگر عملگر کاهشی یا افزایشی بعد از عملوند آن بیاید آنگاه ابتدا یک واحد از عملوند کم یا به آن اضافه می‌شود سپس دستور بزرگتر اجرا می‌شود.” دقیقا برعکسه اگه قبلش بیاد اول افزایش یا کاهش میده بعد دستور بزرگتر اجرا میشه و اگر بعدش بیاد اول دستور بزرگتر و بعد کاهش یا افزایش….

پاسخ دهید

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