در این مقاله، به بررسی عملگرهای میانبر حسابی در زبان برنامه نویسی جاوا می پردازیم و نکاتی را پیرامون این عملگرها متذکر می شویم.
برنامه نویسان معمولاً نیاز دارند مقدار یک متغیر را در یک برنامه افزایش دهند. همان طور که در مقاله ی قبلی مشاهده کردید، بسیاری از حلقه ها، با اضافه کردن مداوم 1 به برخی متغیرها، کنترل می شوند، مانند دستور زیر:
count = count + 1;
به افزایش دادن یک متغیر در یک حلقه، برای پیگیری تعداد رخداد های برخی رویدادها، شمارش(counting) نیز گفته می شود. به طور مشابه،در برنامه موجودی بانکی که در تصویر 6.8 نشان داده شد، این برنامه نه تنها مغیر year را با اضافه کردن 1 به آن، افزایش داد، بلکه با استفاده از دستور زیر، موجودی حساب بانکی را با یک مقدار سود، نیز افزایش داد:
balance = balance + balance * INT_RATE;
به عبارت دیگر، مقدار موجودی بانکی، برابر شد با آخرین مقدار آن، بعلاوه ی یک مقدار سود جدید. به فرآیند افزایش مکرر یک مقدار، با مقداری دیگر، انباشته شدن(accumulating) گفته می شود.
چونکه افزایش دادن مقدار یک متغیر خیلی رایج است، جاوا به ما امکان می دهد تا برای افزایش(incrementing) و انباشته شدن(accumulating) از چند میانبر استفاده کنیم. عبارت count += 1
از نظر معنی، با عبارت count = count + 1
یکسان است. عملگر =+ از بعلاوه و هم از انتساب تشکیل شده است. این عملگر در یک عملیات، هم (چیزی را) اضافه می کند و هم انتساب می دهد.
به همین ترتیب، عبارت balance += balance * INT_RATE;
موجودی حساب(balance) را با درصد INT_RATE افزایش می دهد.
علاوه بر استفاده از عملگر +=
می توانیم از عملگر تفریق و انتساب(-=
) و عملگر ضرب و انتساب(*=
) و عملگر تقسیم و انتساب(/=
) و عملگر باقی مانده و انتساب(%=
) استفاده کنیم. از هریک از این عملگرها برای انجام عملیات مورد نظر و انتساب نتیجه، در یک گام استفاده می شود. بعنوان مثال، در دستور balanceDue -= payment
مقدار payment از balanceDue کم می شود و نتیجه در balanceDue ذخیره می شود.
وقتی می خواهید مقدار یک متغیر را دقیقاً یک واحد افزایش دهید، می توانید از دو عملگر میانبر دیگر استفاده کنید: اول، پیشوند ++ که به آن عملگر افزایش پیشوندی می گوییم. دوم، پسوند ++ که به آن عملگر افزایش پسوندی می گوییم.
برای استفاده از پیشوند ++ می توانیم دو علامت بعلاوه(یعنی ++) را قبل از نام یک متغیر قرار دهیم. فرض کنید یک دستور someValue = 6;
داشته باشیم؛ حالا نتیجه ی دستور ++someValue;
می شود 7. یعنی یک واحد بیشتر از قبل بیشتر شده است.
برای استفاده از پسوند ++ می توانیم دو علامت بعلاوه(یعنی ++) را پس از نام یک متغیر قرار دهیم. بعنوان مثال، دستور زیر باعث می شود، مقدار 57 در متغیر anotherValue قرار گیرد:
anotherValue = 56;
anotherValue++;
تصویر 6.12 چهار راه را برای افزایش دادن یک مقدا با 1 نشان می دهد. هر روش، یک نتیجه ی یکسان را ایجاد می کند. شما هرگز مجبور نیستید از عملگرهای میانبر استفاده کنید. استفاده از آنها فقط برای راحتی کار انجام می شود.
(تصویر 6.12 : چهار را برای اضافه کردن 1 واحد به یک مقدار)
نکته: ما می توانیم از پیشوند و پسوند ++ به همراه متغیرها استفاده کنیم، نه ثابت ها. یک عبارت، مانند 84++ غیرقانونی است زیرا 84 باید همیشه 84 باقی بماند. اما ما می توانیم یک متغیر به نام int val = 84
ایجاد کنیم و آنگاه با استفاده از دستورات val++ یا ++val مقدار این متغیر را تغییر دهیم.
نکته: عملگرهای افزایش پیشوندی و پسوندی، یگانی(unary) هستند، زیرا از آنها با یک مقدار استفاده می شود. همان طور که در فصل 2 آموختید، اکثر عملگرهای محاسباتی، مانند آنهایی که برای جمع و ضرب ازشان استفاده کردیم، دوتایی یا باینری(binary) هستند. زیرا به دو مقدار اعمال می شوند. مثال دیگری از عملگرهای یگانی، عملگر cast به همراه (+) و (-) است؛ وقتی که از آنها برای مشخص کردن مقادیر مثبت و منفی استفاده می کنیم.
وقتی که می خواهیم مقدار یک متغیر را با 1 افزایش دهیم، فرقی نمی کند که از عملگر افزایش پیشوندی یا پسوندی استفاده کنیم. بعنوان مثال، در تصویر 6.12، وقتی که مقدار value برابر با 24 باشد، هردوی value++
و ++value
برابر با 25 می شوند. هریک از این عملگرها باعث می شوند مقدار 1 به متغیر مورد نظر اضافه شود. اما این عملگرها از لحاظ قرار گیری در سمت راست یا چپ به طور متفاوتی عمل می کنند.
اگر ما از پیشوند ++ استفاده کنیم، ابتدا نتیجه محاسبه می شود و در متغیر ذخیره می شود؛ سپس متغیر مورد استفاده قرار می گیرد. بعنوان مثال، اگر b = 4
و c = ++b
نتیجه این می شود که هردوی b و c برابر با مقدار 5 می شوند. اما وقتی که از پسوند ++ استفاده کنیم، ابتدا متغیر مورد استفاده قرار می گیرد و پس از آن، نتیجه محاسبه می شود و در متغیر ذخیره می شود. بعنوان مثال، اگر b = 4
و c = b++
، مقدار 4 در c قرار می گیرد و آنگاه پس از اینکه انتساب انجام شد، مقدار b افزایش می یابد و برابر با مقدار 5 می شود.
به عبارت دیگر، اگر b = 4
، مقدار ++b نیز برابر با 4 است اما پس از اینکه دستورات کامل شدند، مقدار b برابر با 5 قرار می گیرد. اگر d = 8
و e = 8
ارزش هردوی عبارت های ++d == 9
و e++ == 8
برابر با true است.
تصویر 6.13 یک اپلیکیشن را نشان می دهد که تفاوت کار کردن عملگرهای پیشوند و پسوند افزایشی را نشان می دهد. به خروجی، در تصویر 6.14 توجه کنید که وقتی عملگر پیشوندی افزایشی روی myNumber استفاده می شود، مقدار myNumber از 17 به 18 افزایش می یابد و نتیجه در answer ذخیره می شود. پس از اینکه مقدار مورد نظر، به 17 ریست شد، از عملگر افزایش پسوندی استفاده می شود. و مقدار 17 در answer قرار می گیرد و myNumber به 18 افزایش می یابد.
همین منطق را می توانیم وقتی که می خواهیم از عملگرهای کاهشی پیشوندی و پسوندی استفاده کنیم، به کار ببریم. بعنوان مثال، اگر b = 4
و c = b––
آنگاه مقدار 4 در c ذخیره می شود و سپس پس از انتساب، مقدار b کاهش یافته و برابر با 3 می شود. اگر b = 4
و c = ––b
مقدار b به 3 کاهش می یابد و مقدار 3 در c قرار می گیرد.
(تصویر 6.13 : اپلیکیشن IncrementDemo)
(تصویر 6.14 : خروجی اپلیکیشن IncrementDemo)
دو عبارت صحیح و یک عبارت اشتباه
موضوع: استفاده از عملگرهای میانبر محاسباتی
1. فرض کنید x = 4
و y = 5
. مقدار ++y + ++x
برابر با 11 است.
2. فرض کنید x = 4
و y = 5
. ارزش y == x++
برابر با true است.
3. فرض کنید x = 4
و y = 5
. مقدار y += x
برابر با 9 است.
پاسخ:
گزینه ی 2 اشتباه است. اگر x برابر با 4 باشد و y برابر با 5 باشد، انگاه مقدار x++ برابر با 4 و بنابراین، y برابر با 4 نمی باشد.