در قسمت قبل در مورد دیتا تایپهای کاراکتر و بولین صحبت شد، در این قسمت یکی از سرفصلهای بسیار مهم سی شارپ را مورد بحث قرار میدهیم. در این قسمت از بولین استفادهی زیادی میشود، پس اگر هنوز قسمت قبل را مطالعه نکرده اید، ابتدا به مطالعه قسمت قبل بپردازید.
Program Control Statements
روند کنترلی و منطق برنامه، از مهمترین قسمتهای رفتار پویای یک زبان برنامه نویسی است. برای کنترل قسمتهایی از کد، سی شارپ دستورهای مخصوصی را فراهم کرده است تا برنامه نویس بتواند کنترل و منطق برنامه را در دست بگیرد. اکثر عبارتهای شرطی و حلقهای در #C از C و ++C میآیند.
سه دسته بندی برای Program Control Statement وجود دارد:
- Selection Statements
- Iteration Statements
- Jump Statements
بخش Selection Statements شامل if و switch است و همینطور که از اسم آن مشخص است، در صورت داشتن شروط لازم عمل selection (انتخاب) را انجام میدهد. Iteration Statements شامل حلقههای do-while، while، for و foreach هستند و عملیات تکرار (iteration) را انجام میدهند. Jump Statements هم شامل return، goto continue، break و throw است. هر کدام از این موارد مفصل توضیح داده میشوند. با توجه به اینکه اصطلاحات انگلیسی در مقالات زنگ سی شارپ بسیار هستند، به منظور دانستن هریک از اصطلاحات (اگر با زبان انگلیسی آشنایی کافی ندارید) پیشنهاد میشود از Google Translate ،Fast Dictionary یا Persian Dectionary استفاده کنید.
The if statement
شما میتوانید بخشی از یک برنامه را با استفاده از دستور شرطی if اجرا کنید. دستور if در سی شارپ از لحاظ syntax با سایر زبانهای برنامه نویسی مثل C و ++C و جاوا مشابه است.
ساده ترین شکل دستور if بصورت زیر است:
if(condition) statement;
در اینجا condition یک عبارت بولی (true یا false) است. اگر condition شامل مقدار true باشد، آنگاه statement اجرا میشود. اگر condition شامل مقدار false باشد در اینصورت statement کنار زده شده و اجرا نمیشود.
به نمونه ی زیر دقت کنید:
if (10 < 11) Console.WriteLine("10 is less than 11");
در این مورد، تا زمانی که ۱۰ از ۱۱ کوچکتر باشد، condition برابر مقدار true است و دستور ()Console.WriteLine اجرا میشود. نمونه ی زیر را ببینید:
if (10 < 9) Console.WriteLine("this won’t be displayed");
در این مورد، بدلیل اینکه ۱۰ از ۹ کوچکتر نیست condition شامل مقدار false میشود، بنابراین دستور ()Console.WriteLine اجرا نمیشود. همانطور که در قسمت پنجم ذکر شد عملگرهای مقایسه ای دو آیتم را با هم مقایسه میکنند، یک عبارت که شامل عملگر مقایسه ای است، یک مقدار بولین دارد. از اینرو میتوان از عملگرهای مقایسه ای برای عبارت شرطی (condition) نیز استفاده کرد:
برنامه ی زیر چگونگی کار با دستور if را نشان میدهد:
// Demonstrate the if. using System; class IfDemo { static void Main() { int a, b, c; a = 2; b = 3; if (a < b) Console.WriteLine("a is less than b"); // This won’t display anything. if (a == b) Console.WriteLine("you won’t see this"); Console.WriteLine(); c = a - b; // c contains -1 Console.WriteLine("c contains -1"); if (c >= 0) Console.WriteLine("c is non-negative"); if (c < 0) Console.WriteLine("c is negative"); Console.WriteLine(); c = b - a; // c now contains 1 Console.WriteLine("c contains 1"); if (c >= 0) Console.WriteLine("c is non-negative"); if (c < 0) Console.WriteLine("c is negative"); } }
خروجی تولید شده توسط این برنامه:
a is less than b
c contains -1
c is negative
c contains 1
c is non-negative
همانطور که مشاهده میکنید با توجه به مقادیر متغیرها محاسباتی انجام میشود و سپس با توجه به مقدار بولینی که در قسمت condition قرار میگیرد، statement ها اجرا میشوند.
نکته: برای کوتاه تر شدن خط کد در این برنامه، namespace های اضافی را حذف کردیم و تنها از فضاینام system که برای مثال ما ضروری است استفاده کردیم. همچنین string[] args را از متد ()Main حذف کردیم. اینها به صورت پیش فرض توسط ویژوال استدیو نوشته میشوند و ممکن است در مواقعی که به آنها نیازی نیست، حذفشان کنیم.
فرم کلی دستور if بدین شکل است:
if(condition) statement; else statement;
این در صورتی است که شما برای قسمتهای if یا else تنها یک statement دارید و نیازی نیست از بلاک (براکت باز و بسته) استفاده کنید. عبارت else اختیاری است. همچنین قسمتهای if و else میتوانند در یک بلاک قرار بگیرند. اگر برای هر کدام، یک statement داشته باشیم استفاده از بلاک اختیاری است، اما اگر برای هر کدام، بیشتر از یک statement داشته باشیم استفاده از بلاک اجباری است و فرم کلی آن بشکل زیر است:
if(condition) { statement sequence } else { statement sequence }
در اینجا منظور از statement sequence دنباله ای از statement ها است. اگر condition شامل مقدار true باشد، آنگاه بلوک if اجرا میشود در غیر اینصورت (اگر از عبارت else استفاده کرده باشیم) بلاک else اجرا میشود. هیچگاه هر دو آنها با هم اجرا نخواهند شد. در قسمت condition همیشه باید مقدار بولین تولید شود.
به نمونهی زیر توجه کنید:
using System; public class MyClass { public static void Main() { int num1 = 6; int num2 = 23; int result = num1 + num2; if (result > 25) { Console.WriteLine("Result is more then 25"); } else { Console.WriteLine("Result is less then 25"); } } }
در این مثال، مقدار متغیر num1 و num2 با هم جمع میشوند و نتیجه ی آنها در متغیر result ذخیره میشود که نهایتاً result شامل مقدار ۲۹ میشود. همانطور که میبینید مقدار result با ۲۵ مقایسه شده است و میدانیم که پاسخ true است. بدلیل اینکه مقدار condition برابر با true شده است، بلاک if اجرا میشود و بلاک else نادیده گرفته شده و هیچگاه اجرا نخواهد شد.
به نمونه ی بعدی توجه کنید:
using System; public class ifDemo { public static void Main() { if (2 + 2 == 5) Console.WriteLine("Does not compute"); // this won’t be displayed; else Console.WriteLine("This is False!"); } }
در این مثال، در قسمت condition، حاصل ۲ + ۲ که برابر با ۴ است، توسط عملگر مقایسه ای == با ۵ مقایسه میشود و همانطور که میدانید ۴ و ۵ باهم برابر نیستند، بنابراین مقدار condition برابر با false میشود. با این حساب بلاک دستور if اجرا نمیشود و بلاک دستور else اجرا خواهد شد.
نکته: همینطور که میبینید، هم if و هم else، به دلیل اینکه یک statement بیشتر ندارند، استفاده از بلاک (براکت باز و بسته) اختیاری است. در قسمت بعدی، شرح دستور if کامل میشود و بقیه ی بخشهای Program Control Statement در قسمتهای بعدی بیان میشود.
با توجه به یادداشتهای زیادی که از طریق نظرات و ایمیل به دست ما رسید، کاربران سوالاتی را درباره سطح پیشروی مقالات پرسیده بودند. لازم به ذکر است که مقالات آموزشی زنگ سی شارپ طبق استاندارد جهانی، همه سرفصلهای اصلی را در بر میگیرد و همه مباحثی که برای یک برنامه نویس سی شارپ ضروری است را پوشش خواهد داد و با توجه به تمرینهایی که به شما داده میشود و تلاشهای خودتان، کارهای بسیار زیادی میتوانید انجام دهید و برنامههای بسیاری را میتوانید بنویسید ولی فقط در محیط کنسول، یعنی از ویندوز و وب اپلیکیشین خبری نیست و تا پایان این سری از مقالات برنامهنویسی ما در محیط کنسول است. زیرا این آموزش، آموزش مبانی برنامه نویسی است و شما برای اینکه بتوانید بدون مشکل به سطوح بالاتر بروید، نیاز دارید که سطح پیشنیاز را پشت سر بگذارید. بعد از این سری مقالات شما قادر خواهید بود با اندکی مطالعه به راحتی در محیطهای مختلف برنامه نویسی کنید. پس خوب تمرین کنید و سوالات و مشکلات خود را در قسمت نظرات یا از طریق ایمیل بیان کنید.
پروانه
24 September 2012
یلام آقای درویشیان
ممنون از مطالب آموزشی عالی شما.
یه پیشنهاد داشتم
اگه ممکنش هست که با windows Application دستوراتشو بنویسید
کنسول زیاد کاربرد ندارد.
البته ببخشی من این پیشنهاد را دادم.
مسعود درویشیان
24 September 2012
سلام
ممنون از پیشنهادتون
درسته که کنسول کاربرد نداره (البته در مواقع خاص کاربرد خودش رو هم داره) ولی امر مهم “یادگیری زبان برنامهنویسی سیشارپ” هست که هدف ما هم دقیقاً همینه و انتخاب کنسول به این دلیل بوده که یه محیط ایدهآل و بدون پیشنیاز هست. وقتی شما زبان سیشارپ رو کامل یاد بگیرید دیگه فرقی نمیکنه که توی چه پلتفرمی میخواین کار کنین چون خیلی راحت میتونید با یه مطالعه مختصر و آشنایی با اون پلتفرم، برنامهی مخصوص اون رو بنویسید. اگر قرار باشه ویندوز اپلیکیشن، موبایل، وب، بازی و یا هرچیزه دیگهای کار کنید، تنها امر مهم همین هسته و اصل زبان برنامهنویسی هست. بهعنوان مثال وقتی بحث از کلاسها و متدها هست، هیچ فرقی نمیکنه که شما قصد دارید از اون توی چه محیطی استفاده کنید، بلکه چیزی که مهمه فهم شما از کلاسها و متدها در سیشارپ هست.
یه نکتهی خیلی خیلی جالب وجود داره و اون هم اینه که، وقتی شما یه زبان برنامهنویسی رو تا آخرش یاد برید و یاد بگیرید، اگر قصد داشته باشید یه زبان دیگه (مثلاً جاوا اسکریپت) رو یاد بگیرید، خیلی راحت میتونید اینکارو انجام بدید چون اصل و منطق برنامهنویسی زبانها تقریباً یکی هست و این فقط syntax اونهاست که متفاوته
امیدوارم برای یادگیری سیشارپ تحمل و صبر دیدن این صفحهی سیاه و کوچیک رو داشته باشید :)
موفق باشید
مجتبی
24 September 2012
سلام
ممنون از وقتی که می ذارید.
چند تا سوال:
– کلاس اصلی هم مگه می تونه توی کلاس دیگه ای قرار بگیره؟ اگر بله چه فایده ای داره؟
– این string[] args که حذف کردیم چه کاری انجام میده؟
– لطفا اگر امکانش هست هدرها رو با زمان و کاربرداشون بگیدو مثلا الان هدر system برای چه کارایی باید قرار بگیره.
– دوستمون و شما حرف هابی خوبی زدید. ولی مثلا من c++ رو توی دانشگاه یاد گرفتم و توی برخی مباحث برنامه نویسی با c# گیر دارم. مثلا گزارش گیری،تکنیک ها، دیتابیس و بهینه سازی اون، برنامه نویسی برای پلت فروم های مختلف و از این قبیل در نتیجه مقدمات کمی خسته کننده هست و اگر میشد در کنارش یه چیزایی هم در مورد این چیزا می گفتید بد نبود! فکر کنم منظور دوستمون هم همین بود!
مسعود درویشیان
24 September 2012
سلام
بله کلاسها میتونن داخل هم قرار بگیرن، در مورد کلاسها و متدها توی مقالات آینده بحث مفصلی داریم. string[] args هم توی مقالات آینده همراه با مثال توضیح خواهیم داد.
namespace system برای استفاده از یه سری تایپهای پر استفاده توی داتنت فریم ورک هست. برای بعضی از کارها باید از namespace های دیگه هم استفاده کنیم که بعداً میبینید.
بهعنوان مثال، اگر using system رو بالای برنامهمون ننویسیم باید اینطوری رفتار کنیم:
یا مثلاً برای تعریف int اینکارو کنیم:
بنابراین وقتی using system رو مینویسیم میتونیم مستقیماً به کلاس Console و یا int32 دسترسی داشته باشیم.
محمد
21 August 2014
چرا این جا نمی تونیم بنویسیم اینت خالی وباید سی و دوشو هم بزاریم؟
با تشکّر عالیه عالیه عالیه
با خودم گفتم اگه شما نبودین چی کار می کردم.مطمئن باشین کارتون بی پاسخ نخواهد بود.
خدا(قران):ان الله لا یضیع اجر المحسنین
خدا پاداش محسنین را(حتما)خواهد داد
علی حیدرزاده
25 September 2012
یه درخواست از مدیر سایت داشتم اگر امکان داره یه برنامه آموزشی بر اساس تاریخ ارائه درس ها بدید مثلا زنگ هفتم چهارشنبه، زنگ هشتم و…. اینطوری توی کلندر یادداشت میکنیم و براش برنامه ریزی میشه کرد. ممنون
مسعود درویشیان
25 September 2012
فعلاً مقالات روزهای یکشنبه و چهارشنبه منتشر میشه
اگه تغییری توی انتشار مقالات بهوجود اومد اعلام میکنیم.
داوود
25 September 2012
سلام؛ دستتون بابت وقتی که میذارید درد نکنه؛ دوستتون داریم.
مسعود درویشیان
26 September 2012
سلام
ممنون از شما که اینهمه لطف دارین :)
نسرین
26 September 2012
سلام
واقعا ممنون از مطالبتون خیلی مفید بود من همه رو دنبال میکنم و امیدوارم که تداوم داشته باشه
مسعود درویشیان
26 September 2012
سلام
ممنون که دنبال میکنید.
مطمئن باشید به امید خدا تا انتها با موفقیت پیش میره :)
Alireza
30 December 2012
واقعا دست شما درد نكنه عين درس استمادمونه. آقا واقعا به كارم اومد خيلي ممنونم.
علیرضا
24 January 2013
سلام .
اقا اگه بخواییم یه شرط بزاریم که چندتا کار انجام بده بهنره از کدوم روش استفاده کنیم؟ یا اینکه از وردی فقط عدد یا کاراکتر بگیره باید چی کار کنیم؟.
(ممنونم از سایت خیلی خوبی ک دارین)
hoda
24 January 2013
salam
kheiliy mamno0n babate matalebeto0n
nilgoon
27 February 2013
سلام
خیلی ممنون عالی توضیح دادید.
من ترم پیش مبانی پاس کردم ولی تازه دارم میبینم مبانی یعنی چی:)
مرسییییییییییییییییییییییییییییییییییییی خیلی خووووبید
معین
4 June 2013
salam khaste nabashid .ey kash hamrah ba kod nevisi ye site ro ham tarahi mikrdin ke behtr yad bgirim
fatemeh
2 July 2013
سلام خیلی ممنونم واقعاخوب بود.فقط یه سوال من یه برنامه ی ماشین حساب با سی شارپ ویندوز نوشتم .برنامه اجرا میشه ولی خطا داره num1 = float.Parse(“textBox1.Text”)به این قسمتش ایراد میگیره بهش گفتم عددتوتکس باکس اومد توی نام 1 نگهدار وبعد ادامه ی ماجرا.نمیدونم چیکار کنم یا چه کد آسونتری بنویسم.لطفا کمکم کنید.
باتشکر
مسعود درویشیان
4 July 2013
چه خطایی میگیره؟
fatemeh
4 July 2013
سلام از فرمتش خطا میگیرهInput string was not in a correct format.بایه علامت زردرنگ
مسعود درویشیان
4 July 2013
این error بهخاطر این هست که ورودی شما از نوع num1 نیست! مثلاْ اگر num1 از نوع int باشه، چیزی هم که توی input وارد میکنید باید int باشه تا parse بشه. بهتره از try-catch استفاده کنین که این مشکل بهوجود نیاد یا اینکه بهجای input از button استفاده کنین و عدد بذارید توی button ها و روی کلیکشون عدد رو بگیرید. همینطور میتونید بهجای try-catch از متد ()int.TryParse استفاده کنید:
fatemeh
4 July 2013
من بایدتوبرنامه نویسی سی شارپ تا یه ماه آینده به حدی برسم که هر پروژه ای که دادن بتونم کامپایل کنم الان همزمان هم مقالات شمارو میخونم هم کتاب مرجع قدم به قدم با سی شارپ 2008جان شارپ که به زبان اصلی هست وهم کتاب سی شارپ detelکه ترجمه پاشایی ومهدوی هست ولی واقعا تمرین های کتابش سخته ومن فصل پنجم هستم.شماکه یه برنامه نویس حرفه ای هستی راهنماییم کنید چطوری موفق ترم باتوجه با اینکه زبان انگلیسیم خیلی جالب نیست
باتشکر
مسعود درویشیان
4 July 2013
پیشنهاد میکنم فعلاْ خودتون رو درگیر چندتا کتاب نکنید و بهتره یه کتاب خوب رو انتخاب کنید و تمومش کنید. همینطور روی زبان انگلیسیتون خیلی کار کنید چون بههرحال تا یه حد پایینی میتونید از منابع فارسی استفاده کنید بعدش دیگه باید کتاب و مقالات انگلیسی بخونید. یکم زمان و زحمت لازم داره، برنامهنویسی چیزی نیست که توی یه مدت زمان کم بشه به حد بالایی رسید. تنها چیزی که مهمه، داشتن علاقه، پشتکار و صبر هست. بازم تاکید میکنم انگلیسی خیلی مهمه، هرطوری که احساس میکنید براتون بهتره (کلاس زبان برید یا خودتون توی خونه کار کنید)، زبانتون رو قوی کنید.
fatemeh
4 July 2013
ممنونم ازلطفتون الان بیشترتمرکزم روی ترجمه ویادگیری هست
کوثر
12 September 2013
بازم مثل همیشه خوب بود
ممنون
سایتایی هم که معرفی میشن در حین آموزش خیلی خوبن
غول داس
16 February 2014
thank you
سعید
1 June 2014
خوب بود آقا مسعود
محمد
21 August 2014
اون قضیه پابلیک قبل از کلاس ها چیه؟؟؟
Alireza98
30 March 2015
با سلام
آقا مسعود یه سوال داشتم:میشه یه دستوری با if ینویسید که تشخیص دهد یک عدد (مثل 7)بین دوعدد دیگر (مثلا بین 6و10) قرار دارد یا خیر؟لطفا اگر میشه خیلی زود این دستور رو بهم بدید آخه خیلی لازمش دارم
پیشگامان
31 March 2015
با عرض سلام و خسته نباشید خدمت دوست گرامی –
مقالاتی که نوشتید رو خوندم – اگر نظرتون مثبت باشه و اجازه بدید می خوام مقالات رو توی گروه فیسبوکی به آدرس زیر انتشار بدم . خوشحال میشم موافقت کنید .
با تشکر
https://www.facebook.com/groups/tarrahieweb/
مسعود درویشیان
31 March 2015
سلام، ممنون از لطفتون. با ذکر منبع مشکلی نداره میتونید هرجا که میخواهید منتشر کنید.
رکسانا ایرانمنش
25 August 2016
مرررررررررررررسی بابت آموزشهای عالیـــــــــــــــــــتون
امیرمهدی
10 August 2017
سلام ببخشید من درست مفهوم کلاس رو فک کنم درست متوجه نشدم مگه کلاس رو خود نویسندگان اون زبان ننوشتن یا کلاس هایه دیگه ای هم هست میشه لطفا جواب رو به ایمیل بنده ارسال کنید چون من سرم خیلی شلوغه شاید نتونم به این سایت دوباره سر بزنم