زنگ سیشارپ – قسمت هشتم
نوشته مسعود درویشیان • 03 تير 1391
در قسمت قبل با if های تودرتو و if-else-if ladder آشنا شدیم. قصد داریم با دستور switch و حلقهی for آشنا میشویم که یکی دیگر از مباحث بسیار مهم و پایهای در برنامهنویسی هستند ولی قبل از اینکه سراغ حلقهها برویم لازم است با یکسری از عملگرهای ریاضی آشنا شویم.
Increment و Decrement
افزایش مقدار نگهداری شده در یک متغیر، یکی از امور رایج در برنامهنویسی است. فرض کنید شما یک متغیر بهاسم counter تعریف کردید و میخواهید هربار که عملیاتی در برنامه شما انجام شد، به متغیر counter شما یک واحد اضافه شود. شما قصد دارید که خطکدی را شبیه خطکد زیر اجرا کنید:
counter = counter + 1;
این عبارت از نظر یک دانشجوی ریاضی، یک عبارت نادرست است اما همانطور که در قسمت سوم بیان شد در سیشارپ علامت تکمساوی (=) برای مقایسه دو مقدار استفاده نمیشود و در واقع، علامت تکمساوی، علامت انتساب است. خطکد بالا اینطور عمل میکند که یک کپی از مقدار سمت راست مساوی را در قسمت سمت چپ قرار میدهد. فرض کنید مقدار counter عدد ۲ باشد، در این خطکد ۱ + ۲ میشود و حاصل آن در سمت چپ مساوی قرار میگیرد که در سمت چپ، خود متغیر counter قرار دارد و این بدین معنی است که: مقدار counter با عدد ۱ جمع شده و مجدداً در خودش ریخته میشود و در نهایت مقدار counter برابر با ۳ است.
از آنجا که افزایش مقدار یک متغیر یکی از کارهای رایج در برنامهنویسی است، سیشارپ چندین راه میانبر برای این منظور دارد. برای مثال، دو خطکد زیر دقیقاً یک معنی را میدهند:
counter += 1; counter = counter + 1;
عملگر =+ بهطور همزمان عملیات "اضافهکردن و اختصاصدادن" را انجام میدهد. این عملگر، عملوند سمت راست را با عملوند سمت چپ جمع میکند و نتیجهی آن را به عملوند سمت چپ اختصاص میدهد. علاوهبر عملگر =+ عملگرهای =- و =* و =/ نیز وجود دارند که برای منظورهای دیگری استفاده میشوند.
- عملگر =- از لحاظ طریقهی عملکرد مشابه =+ است با این تفاوت که بهجای جمع، عمل تفریق را انجام میدهد. برای مثال در دستور counter -= 1 مقدار عملوند سمت راست از مقدار عملوند سمت چپ کم میشود و حاصل آن در عملوند سمت چپ ذخیره میشود.
- عملگر =* به طریقی مشابه عمل "ضربکردن و اختصاصدادن" را انجام میدهد.
- عملگر =/ نیز به همین روال عمل میکند. برای مثال counter /= 2 معادل با counter = counter / 2 است.
بهخاطر داشته باشید که نباید بین دو علامت این عملگرها فاصله بگذارید. فاصله گذاشتن قبل و بعد از آنها اختیاری است.
هنگامی که میخواهید دقیقاً ۱ واحد به متغیر خود اضافه کنید میتوانید از دو عملگر پیشوندی و پسوندی برای افزایش مقدار متغیر استفاده کنید. برای استفاده از عملگر افزایشی پیشوندی (prefix increment operator) کافی است از دو علامت + قبل از اسم متغیر استفاده کنید. بهعنوان مثال، در نمونهی زیر متغیر someValue در نهایت مقدار ۷ را در خود نگه میدارد:
using System; class Example { static void Main() { int someValue = 6; ++someValue; Console.WriteLine(someValue); } }
متغیر someValue در ابتدا مقدار ۶ را در خود نگه میدارد ولی پس از اینکه عملگر ++ روی آن اعمال شد، مقدار متغیر ۱ واحد افزایش پیدا میکند. برای استفاده از ++ پسوندی، از دو علامت پلاس (+) بعد از اسم متغیر استفاده میکنیم. به نمونهی زیر دقت کنید:
using System; class Example { static void Main() { int anotherValue = 56; anotherValue++; Console.WriteLine(anotherValue); } }
در این مثال مقدار متغیر anotherValue برابر با ۵۶ است و پس از اعمال عملگر ++ پسوندی، مقدار آن برابر با ۵۷ میشود. ++ پیشوندی و پسوندی را میتوانید بهروی متغیرها اعمال کنید و اعمال آنها بهروی اعداد ثابت نادرست است. برای مثال، 56++ نادرست است زیرا عدد ۵۶ ثابت است و تغییر نمیکند ولی اگر عدد ۵۶ را در یک متغیر قرار دهید میتوانید از این عملگر برای افزایش مقدار آن استفاده کنید. برای نمونه، int val = 56 و سپس میتوانید بنویسید val++ یا ++val و مقدار متغیر را افزایش دهید.
هنگامیکه از ++ پیشوندی و پسوندی برای افزایش مقدار یک متغیر استفاده میکنید، بهظاهری متوجه تفاوتی نمیشوید زیرا هر دوی آنها یک واحد به متغیر اضافه میکنند ولی این دو عملگر متفاوت عمل میکنند. هنگامیکه از ++ پیشوندی استفاده میکنید، ابتدا تغییرات روی متغیر مربوطه اعمال میشود، نتایج محاسبه شده و ذخیره میشود سپس متغیر مورد استفاده قرار میگیرد.
بهمثال زیر توجه کنید:
using System; class Example { static void Main() { int b, c; b = 4; c = ++b; Console.WriteLine("{0} {1}", b, c); } }
هنگامیکه برنامهی بالا را اجرا میکنید میبینید که در خروجی “5 5” چاپ میشود. در این مثال، ابتدا مقدار ۴ به b اختصاص داده میشود سپس مقدار b یک واحد اضافه شده و برابر با مقدار ۵ میشود و در نهایت مقدار b به c اختصاص داده میشود. روند این پروسه بهاین دلیل بود که از ++ پیشوندی استفاده کردیم.
در مقابل، وقتیکه از ++ پسوندی استفاده میکنید ابتدا متغیر مورد استفاده قرار میگیرد سپس نتایج محاسبه شده و ذخیره میگردد. برای مثال در نمونهی زیر، ابتدا b شامل مقدار ۴ است سپس در خط بعد مقدار b به c اختصاص داده میشود و پساز اینکه مقدار b به c اختصاص داده شد، مقدار b یک واحد افزایش پیدا میکند و برابر با ۵ میشود:
b = 4; c = b++; Console.WriteLine("{0} {1}", b, c);
خروجی این برنامه برابر با “4 5” است. بهعبارت دیگر، اگر b = 4 باشد آنگاه مقدار ++b همچنان برابر با ۴ است و هنگامیکه مقدار b به c اختصاص داده شد سپس مقدار b یک واحد افزایش پیدا میکند.
علاوهبر عملگر پیشوندی و پسوندی افزایشی، میتوانید از عملگر پیشوندی و پسوندی کاهشی (–) نیز استفاده کنید. عملگر ماینِس ماینِس (—) دقیقاً یک واحد را از متغیر کم میکند و طریقهی عملکرد آن بهصورت پیشوندی و پسوندی، بهشکلی مشابه با پلاس پلاس (++) است با این تفاوت که بهجای عمل افزایش، عمل کاهش را انجام میدهد.
توجه: زین پس انتشار مقالات زنگ سیشارپ در وبلاگینا متوقف و از ابتدا در وبتارگت منتشر میشود و حدوداً تا صد قسمت همراه با دانلود مقالات در قالب فایل پیدیاف پیش خواهد رفت.
Hooshyar
خیلی عالی بود , با تشکر از آقای درویشیان عزیز …
prolearn-vs
عالی بود. ممنون
siagol
خیلی عالی بود خسته نباشید
راستی چرا سایت گراواتار قیلتره؟
Hamzeh
con vezarate ershad mige !
bad amozi dar :)))))))))))))))))
4nafar ke nemidonam internet chiye rajebesh tasmim migiran
master
گل کاشتی
عالی بود
خرید اینترنتی
باز هم یک آموزش خوب دیگه از مسعود عزیز
متشکرم
صمد
خیلی عالی و مفیده این آموزش هیچ وقت نباید قطع بشه
ولی خواهش میکنم کمی مرتب تروبابرنامه تراین آموزشها
قرار داده بشه.خیلی دیر وبا فاصله زمانی زیادی آپدیت میشه
مسعود درویشیان
ممنون از اینکه دنبال میکنید
مطمئن باشید آموزشها قطع نمیشه، مقالات روزهای شنبه و سهشنبه منتشر میشه اما این چند وقت بهدلیل مشکلاتی، یهکم تاخیر داشته، اما توی تابستون سرعت و ججم زیادتری پیدا میکنه که پیشرفت بهتری داشته باشه
موفق باشید
عبداللهی
از آقای درویشیان عزیز تشکر میکنم.واقعآ مطلبتون فوق العاده بود
مهدی
آقا سلام عرض شد. بسیار هم سایتتون خوبه فقط سرعت آپلود مطالب اگر بیشتر هم بشه دیگه بی نظیره !
CoDesign
جناب تعطیل کردین پروژه رو؟
مسعود درویشیان
salam, in moddat be dalile ye seri moshkelat yekam aghab oftad
ensha’allah az shanbe dobare shoroo mishe
mamnun babate bordbaritoon
movafagh bashid
hadi
سلام
اقای درویشیان ادامه درس چی شد ؟
sdfvvfsdfv
این سری مقالات هم مثل خیلی چیزهای دیگه اولش خوب اجرا شد …
مهدی
سلام
یک سئوال داشتم من برای پروژه ام تیاز به یک منوی viwe دارم که مثلا با زدن تیک menu bar به من نشون بده با برداشتن تیک menu bar از برنامه من حذف بشه
امیر
همیشه این گونه آموزش ها روی بلاگ ها نصف کاره میمونن … این اولین بار نیست و آخرین بار هم نیست …
علی
دم وبلاگینا و آقای درویشیان گرم. آموزشها خیلی عالی، با کیفیت و جذاب بود.
خیلی وقته آموزش جدیدی اضافه نشده، اما منتظر ادامه اش هستیم. خدا قوت. مرسی. (هر چند ادامه هم پیدا نکنه ما تا همینجاشو هم یه دنیا سپاسگذاریم.)
سارا
سلام
چرا ادامه نمیدین؟؟؟؟؟؟؟؟
محمد
سلام چی شد..اتفاقی افتاده که ادامه درس رو نمیدین…کار را که کرد آن که تمام کرد
دستگاه حضورغیاب
ممنون از درس دادنتون
اکبر قره باغی
بسیار ممنون
کیوان
با سلام .. تاثیر گذار بود ممنون فقط اگه ممکنه ادامه بدید
منصوره
با سلام
اگر میدونستم ادامع نداره شروع نمیکردم
تا اینجا اومدم قطع شد 🙁
بازم دستتون درد نکنه عالی بود
آرش
سلام
مسعود جان،
این وبسایت webtargert تو دسترس نیست، متاسفانه!!!
پی دی اف های این آموزش و از کجا میشه گیر آورد؟
من چند قسمت اولش و دیدم، عالی بود روش آموزشش ولی الان دیگه نمیتونم ادامه بدم.
اگه ممکنه راهنمایی کن.
یا حق
آرش
مجددا راه افتاد.