ساخت یک برنامه ساده
اجازه بدهید یک برنامه بسیار ساده به زبان سی شارپ بنویسیم. این برنامه یک پیغام را در محیط کنسول نمایش میدهد. در این درس میخواهم ساختار و دستور زبان یک برنامه ساده سی شارپ را توضیح دهم. برنامه Visual Studio Community را اجرا کنید. از مسیر Create New Project یک پروژه جدید ایجاد کنید:
سپس صفحه ای به صورت زیر به شما نمایش داده می شود که در آن شما می بایست گزینه Console App را انتخاب کرده و سپس بر روی گزینه Next کلیک کنید:
حال با یک صفحه مواجه میشوید که از شما میخواهد نام پروژهتان را انتخاب و آن را ایجاد کنید (شکل زیر):
نام پروژهتان را MyFirstProgram بگذارید. یک Console Application برنامه ای تحت داس در محیط ویندوز است و فاقد محیط گرافیکی میباشد. بهتر است برنامه خود را در محیط کنسول بنویسید تا بیشتر با مفهوم برنامه نویسی آشنا شوید. بعد از اینکه آموزش مبانی زبان به پایان رسید، برنامه نویسی در محیط ویندوز و بخش بصری سی شارپ را آموزش خواهیم داد. بعد از فشردن دکمه Create، برنامه Visual C# یک solution در یک فولدر موقتی ایجاد میکند. یک solution مجموعه ای از پروژههاست، اما در بیشتر تمرینات شامل یک پروژه میباشد. فایل solution دارای پسوند .sln میباشد و شامل جزییاتی در مورد پروژهها و فایلهای وابسته به آن میباشد. پروژه جدید همچنین حاوی یک فایل با پسوند .csproj میباشد که آن نیز شامل جزییاتی در مورد پروژهها و فایلهای وابسته به آن میباشد. حال میخواهیم شما را با محیط کد نویسی آشنا کنیم.
محیط کدنویسی جایی است که ما کدها را در آن تایپ میکنیم. کدها در محیط کدنویسی به صورت رنگی تایپ میشوند، در نتیجه تشخیص بخشهای مختلف کد را راحت میکند. منوی سمت چپ (شماره 1) شامل نام پروژه ای که ایجاد کردهاید، منوی وسط (شماره 2) شامل لیست کلاسها، ساختارها، انواع شمارشی و منوی سمت راست (شماره 3) شامل اعضای کلاسها، ساختارها، انواع شمارشی و… میباشد. نگران اصطلاحاتی که به کار بردیم نباشید آنها را در فصول بعد توضیح خواهم داد. همه فایلهای دارای کد در سی شارپ دارای پسوند .cs هستند. در محل کد نویسی کدهایی از قبل نوشته شده که برای شروع شما آنها را پاک کنید و کدهای زیر را در محل کدنویسی بنویسید:
1: namespace MyFirstProgram 2: { 3: class Program 4: { 5: static void Main() 6: { 7: System.Console.WriteLine("Welcome to Visual C# Tutorials!"); 8: } 9: } 10: }
ساختار یک برنامه در سی شارپ
مثال بالا سادهترین برنامه ای است که شما میتوانید در سی شارپ بنویسید. هدف در مثال بالا نمایش یک پیغام در صفحه نمایش است. هر زبان برنامه نویسی دارای قواعدی برای کدنویسی است. اجازه بدهید هر خط کد را در مثال بالا توضیح بدهیم. در خط اول فضای نام (namespace) تعریف شده است که شامل کدهای نوشته شده توسط شما است و از تداخل نامها جلوگیری میکند. درباره فضای نام در درسهای آینده توضیح خواهیم داد.
در خط دوم آکولاد (}) نوشته شده است. آکولاد برای تعریف یک بلوک کد به کار میرود. سی شارپ یک زبان ساخت یافته است که شامل کدهای زیاد و ساختارهای فراوانی میباشد. هر آکولاد باز (}) در سی شارپ باید دارای یک آکولاد بسته ({) نیز باشد. همه کدهای نوشته شده از خط 2 تا خط 10 یک بلوک کد یا بدنه فضای نام است.
در خط 3 یک کلاس تعریف شده است. درباره کلاسها در فصلهای آینده توضیح خواهیم داد. در مثال بالا کدهای شما باید در داخل یک کلاس نوشته شود. بدنه کلاس شامل کدهای نوشته شده از خط 4 تا 9 میباشد. خط 5 متد Main() یا متد اصلی نامیده میشود. هر متد شامل یک سری کد است که وقتی اجرا میشوند که متد را صدا بزنیم. درباره متد و نحوه صدا زدن آن در فصول بعدی توضیح خواهیم داد. متد Main نقطه آغاز اجرای برنامه است. این بدان معناست که ابتدا تمام کدهای داخل متد Main() و سپس بقیه کدها اجرا میشود. درباره متد Main() در فصول بعدی توضیح خواهیم داد. متد Main() و سایر متدها دارای آکولاد و کدهایی در داخل آنها میباشند و وقتی کدها اجرا میشوند که متدها را صدا بزنیم. هر خط کد در سی شارپ به یک سمیکالن (;) ختم میشود. اگر سمیکالن در آخر خط فراموش شود برنامه با خطا مواجه میشود. مثالی از یک خط کد در سی شارپ به صورت زیر است:
System.Console.WriteLine("Welcome to Visual C# Tutorials!");
این خط کد پیغام Welcome to Visual C# Tutorials! را در صفحه نمایش نشان میدهد. از متد WriteLine() برای چاپ یک رشته استفاده میشود. یک رشته گروهی از کاراکترها است، که به وسیله دابل کوتیشن (“) محصور شده است. مانند:“Welcome to Visual C# Tutorials!”.
یک کاراکتر میتواند یک حرف، عدد، علامت یا … باشد. در کل مثال بالا نحوه استفاده از متد WriteLine() است که در داخل کلاس Console که آن نیز به نوبه خود در داخل فضای نام MyFirstProgram قرار دارد را نشان میدهد. توضیحات بیشتر در درسهای آینده آمده است. سی شارپ فضای خالی و خطوط جدید را نادیده میگیرد. بنابراین شما میتوانید همه برنامه را در یک خط بنویسید. اما اینکار خواندن و اشکال زدایی برنامه را مشکل میکند. یکی از خطاهای معمول در برنامه نویسی فراموش کردن سمیکالن در پایان هر خط کد است. به مثال زیر توجه کنید:
System.Console.WriteLine( "Welcome to Visual C# Tutorials!");
سی شارپ فضای خالی بالا را نادیده میگیرد و از کد بالا اشکال نمیگیرد. اما از کد زیر ایراد میگیرد.
System.Console.WriteLine(; "Welcome to Visual C# Tutorials!");
به سمیکالن آخر خط اول توجه کنید. برنامه با خطای نحوی مواجه میشود چون دو خط کد مربوط به یک برنامه هستند و شما فقط باید یک سمیکالن در آخر آن قرار دهید. همیشه به یاد داشته باشید که سی شارپ به بزرگی و کوچکی حروف حساس است. یعنی به طور مثال MAN و man در سی شارپ با هم فرق دارند. رشتهها و توضیحات از این قاعده مستثنی هستند که در درسهای آینده توضیح خواهیم داد. مثلاً کدهای زیر با خطا مواجه میشوند و اجرا نمیشوند:
system.console.writeline("Welcome to Visual C# Tutorials!"); SYSTEM.CONSOLE.WRITELINE("Welcome to Visual C# Tutorials!"); sYsTem.cONsoLe.wRItelIne("Welcome to Visual C# Tutorials!");
تغییر در بزرگی و کوچکی حروف از اجرای کدها جلوگیری میکند. اما کد زیر کاملاً بدون خطا است:
System.Console.WriteLine("WELCOME TO VISUAL C# TUTORIALS!");
همیشه کدهای خود را در داخل آکولاد بنویسید.
{ statement1; }
این کار باعث میشود که کدنویسی شما بهتر به چشم بیاید و تشخیص خطاها راحت تر باشد. یکی از ویژگیهای مهم سی شارپ نشان دادن کدها به صورت تو رفتگی است بدین معنی که کدها را به صورت تو رفتگی از هم تفکیک میکند و این در خوانایی برنامه بسیار مؤثر است.
ذخیره پروژه و برنامه
برای ذخیره پروژه و برنامه میتوانید به مسیر File > Save All بروید یا از کلیدهای میانبر Ctrl+Shift+S استفاده کنید. همچنین میتوانید از قسمت Toolbar بر روی شکل کلیک کنید. برای ذخیره یک فایل ساده میتوانید به مسیر File > Save (FileName) بروید یا از کلیدهای میانبر Ctrl+S استفاده کنید. همچنین میتوانید از قسمت Toolbar بر روی شکل کلیک کنید. برای باز کردن یک پروژه یا برنامه از منوی File گزینه Open را انتخاب میکنید یا بر روی آیکون در toolbar کلیک کنید. سپس به محلی که پروژه در آنجا ذخیره شده میروید و فایلی با پسوند sln یا پروژه با پسوند .csproj را باز میکنید.
کامپایل برنامه
همانطور که قبلاً ذکر شد، کدهای سی شارپ قبل از اجرا، ابتدا به زبان میانی ترجمه میشوند. برای کامپایل برنامه از منوی Debug گزینه Build Solution را انتخاب میکنید یا دکمه F6 را بر روی صفحه کلید فشار میدهیم. این کار همه پروژههای داخل solution را کامپایل میکند. برای کامپایل یک قسمت از solution به Solution Explorer میرویم و بر روی آن قسمت راست کلیک کرده و از منوی باز شوند گزینه build را انتخاب میکنید. مانند شکل زیر:
اجرای برنامه
وقتی ما برنامه مان را اجرا میکنیم سی شارپ به صورت اتوماتیک کدهای ما را به زبان میانی مایکروسافت کامپایل میکند. دو راه برای اجرای برنامه وجود دارد:
- اجرا همراه با اشکال زدایی (Debug)
- اجرا بدون اشکال زدایی (Non-Debug)
اجرای بدون اشکال زدایی برنامه، خطاهای برنامه را نادیده میگیرد. با اجرای برنامه در حالت Non-Debug سریعاً برنامه اجرا میشود و شما با زدن یک دکمه از برنامه خارج میشوید. در حالت پیش فرض حالت Non-Debug مخفی است و برای استفاده از آن میتوان از منوی Debug گزینه Start Without Debuging را انتخاب کرد یا از دکمههای ترکیبی Crl + F5 استفاده نمود:
Welcome to Visual C# Tutorials! Press any key to continue...
به این نکته توجه کنید که پیغام Press any key to continue… جز خروجی به حساب نمیآید و فقط نشان دهنده آن است که برنامه در حالت Non-Debug اجرا شده است و شما میتوانید با زدن یک کلید از برنامه خارج شوید. دسترسی به حالت Debug Mode آسان تر است و به صورت پیشفرض برنامهها در این حالت اجرا میشوند. از این حالت برای رفع خطاها و اشکال زدایی برنامهها استفاده میشود که در درسهای آینده توضیح خواهیم داد. شما همچنین میتوانید از break points و قسمت Help برنامه در مواقعی که با خطا مواجه میشوید استفاده کنید. برای اجرای برنامه با حالت Debug Mode میتوانید از منوی Debug گزینه Start Debugging را انتخاب کرده و یا دکمه F5 را فشار دهید. همچنین میتوانید بر روی شکل در toolbar کلیلک کنید. اگر از حالت Debug Mode استفاده کنید برنامه نمایش داده شده و فوراً ناپدید میشود. برای جلوگیری از این اتفاق شما میتوانید از کلاس و متد System.Console.ReadKey() برای توقف برنامه و گرفتن ورودی از کاربر جهت خروج از برنامه استفاده کنید. (درباره متدها در درسهای آینده توضیح خواهیم داد.)
namespace MyFirstProgram { class Program { static void Main() { System.Console.WriteLine("Welcome to Visual C# Tutorials!"); System.Console.ReadKey(); } } }
حال برنامه را در حالت Debug Mode اجرا میکنیم. مشاهده میکنید که برنامه متوقف شده و از شما در خواست ورودی میکند، به سادگی و با زدن دکمه Enter از برنامه خارج شوید. من از حالت Non-Debug به این علت استفاده کردم تا نیازی به نوشتن کد اضافی Console.ReadKey() نباشد. از این به بعد هر جا ذکر شد که برنامه را اجرا کنید برنامه را در حالت Non-Debug اجرا کنید. وقتی به مبحث استثناءها رسیدیم از حالت Debug استفاده میکنیم.
وارد کردن فضای نام در برنامه
فضای نام (Namespace) در برگیرنده کدهایی است که شما در برنامهتان از آنها استفاده میکنید. در برنامه فوق ما یک فضای نام در برنامه مان با نام MyFirstProgram داریم، اما دات نت دارای هزاران فضای نام میباشد. یکی از این فضاهای نامی، فضای نام System است که شامل کدهایی است که در یک برنامه ابتدایی #C به کار میروند. کلاس Console که ما از آن در برنامه بالا استفاده کردیم در این فضای نام قرار دارد.
System.Console.WriteLine("Welcome to Visual C# Tutorials!"); System.Console.ReadKey();
اینکه قبل از استفاده از هر کلاس ابتدا فضای نام آن را مانند کد بالا بنویسیم کمی خسته کننده است. خوشبختانه دات نت به ما اجازه میدهد که برای جلوگیری از تکرار مکررات، فضاهای نامی را که قرار است در برنامه استفاده کنیم با استفاده از دستور using در ابتدای برنامه وارد نماییم:
using namespace;
دستور بالا نحوه وارد کردن یک فضای نام در برنامه را نشان میدهد. در نتیجه به جای آنکه به صورت زیر ابتدا نام فضای نام و سپس نام کلاس را بنویسیم:
System.Console.WriteLine("Hello World!");
میتوانیم فضای نام را با دستوری که ذکر شد وارد برنامه کرده و کد بالا را به صورت خلاصه شده زیر بنویسیم:
Console.WriteLine("Hello World");
دستورات using که باعث وارد شدن فضاهای نامی به برنامه میشوند عموماً در ابتدای برنامه و قبل از همه کدها نوشته میشوند، پس برنامهی این درس را میتوان به صورت زیر نوشت:
using System; namespace MyFirstProgram { class Program { static void Main() { Console.WriteLine("Welcome to Visual C# Tutorials!"); Console.ReadKey(); } } }
هنگامی که یک برنامه در ویژوال استودیو ایجاد میکنید، اگر وجود برخی از فضاهای نام الزامی نباشد، ویژوال استودیو 2017 آنها را به صورت کم رنگ نمایش میدهد، و شما میتوانید بدون هیچ مشکلی این فضاهای نام را پاک کنید:
در نسخههای قبلی ویژوال استودیو هم برای پاک کردن فضاهای نام غیر قابل استفاده، ابتدا بر روی یکی از آنها راست کلیک کرده و سپس بر روی Remove and Sort Usings کلیک کنید:
اگر از کلاسی استفاده کنید که از قبل فضای نام مربوط به آن را وارد برنامه نکرده باشید در زیر آن کلاس خط قرمز کشیده میشود:
برای رفع این مشکل، اگر از قبل نام فضای مربوطه را بلد باشید که باید آن را در قسمت فضای نام وارد کنید. در غیر اینصورت، بر روی نام کلاس با ماوس کمی مکث کنید تا یک پنجره popup ظاهر شده و آن را به شما معرفی کند:
در این صورت با کلیک بر روی آن، ویژوال استودیو به طور خودکار فضای نام را وارد برنامه میکند:
در مورد فضای نام در درسهای آینده بیشتر توضیح میدهیم. همانطور که قبلا هم ذکر شد، با ورود نسخه های جدید سی شارپ، قابلیت های جدیدی به این زبان اضافه می شود که کدنویسی را راحت تر می کنند. مثلا کد این درس را در نسخه های جدید می توان به صورت زیر نوشت:
1: using static System.Console; 2: 3: namespace MyFirstProgram 4: { 5: class Program 6: { 7: static void Main(string[] args) 8: { 9: WriteLine("Welcome to Visual C# Tutorials!"); 10: ReadKey(); 11: } 12: } 13: }
به این حد توضیح در مورد کد بالا بسنده می کنیم که شما در نسخه های جدید کافیست یکبار عبارت System.Console را در قسمت فضاهای نام بنویسید تا هر بار لازم نباشد که آن را در خطوط 9 و 10 ذکر کنید. در مورد تمامی کلمات گفته شده در این درس که برای شما نامفهوم هستند در درس های آینده توضیح می دهیم. حال که با خصوصیات و ساختار اولیه سی شارپ آشنا شدید در درسهای آینده مطالب بیشتری از این زبان برنامه نویسی قدرتمند خواهید آموخت.