آموزش سی شارپ-صفر تا 100
سلام با آموزش برنامه نویسی سی شارپ قسمت سوم در خدمت شما عزیزان هستیم, در قسمت قبلی با انواع داده ای Data Types , ساختار شرطی if و کار با دستور Switch در سی شارپ آشنا شدیم
آموزش کار با ساختارهای تکرار حلقه Loops در C#
یکی دیگر از تکنیک های اصلی در زمان نوشتن نرم افزارها، امکان ایجاد حلقه ها دستوری یا looping است. این نوع دستورات امکان تکرار بلوک هایی از کد برای دفعات دلخواه را می دهند. برای مثال ما می خواهیم گروهی از دستورات تا زمانی که مقدار یک متغیر مثلا کمتر از 10 است، تکرار شود، در این حالت بایستی از حلقه ها در C# استفاده کنیم.
در زبان C#، چهار نوع حلقه اصلی داریم که در ادامه به تشریح هر یک از آن ها با ارائه مثال های عملی خواهیم پرداخت .
حلقه loop While :
حلقه While loop آسان ترین نوع حلقه در زبان C# بوده و به همین دلیل آموزش حلقه ها را از این حلقه شروع می کنیم. حلقه While loop مجموعه بلوک دستورات تعیین شده برای آن را تا زمانی که شرط تعیین شده برای حلقه درست true باشد، اجرا می کند. کد زیر یک مثال ساده از کاربرد حلقه While را نشان می دهد، در ادامه به تشریح بیشتر کد می پردازیم :
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number = 0;
while(number < 5)
{
Console.WriteLine(number);
number = number + 1;
}
Console.ReadLine();
}
}
}
برنامه را اجرا نمایید. لیستی از اعداد 0 تا 4 برای شما نمایش داده خواهد شد. متغیر number که درواقع شمارنده حلقه While مثال نیز هست، از عدد 0 شروع شده و هر بار که دستورات حلقه یک بار اجرا می شوند، مقدار آن یک واحد افزایش پیدا می کند.
تا زمانی که مقدار متغیر number کمتر از 5 و نه خود 5 باشد، اجرای دستورات ادامه پیدا کرده و با رسیدن عدد number به 5، اجرای حلقه متوقف شده و برنامه به خط کد بعد از حلقه While پرش می کند.
آموزش سی شارپ
حلقه do loop :
کارکرد حلقه do loop کمی متفاوت با حلقه While loop است. در حلقه do loop ابتدا دستورات بدنه حلقه یک بار اجرا شده و در پایان شرط حلقه چک می شود. در صورت درست بودن شرط، باز هم دستورات حلقه تکرار می شود.
نکته مهم در مورد حلقه do loop این است که اگر حتی شرط حلقه از ابتدا درست نباشد، دستورات حلقه حداقل یک بار اجرا می شوند.
کد زیر یک مثال عملی از کار با حلقه do loop را نشان می دهد :
do
{
Console.WriteLine(number);
number = number + 1;
} while(number < 5);
خروجی حلقه do loop مثال فوق اعداد 0 تا 5 را چاپ کرده و با رسیدن شماره حلقه به 6، اجرای آن متوقف می شود.
حلقه for loop :
مکانیزم حلقه for loop با حلقه های قبلی کمی متفاوت است. از این حلقه بهتر است زمانی استفاده شود که می دانیم حدودا حلقه چند بار ممکن است تکرار شود. حلقه for loop دارای یک عدد به عنوان شمارنده است که با هر بار اجرای حلقه، مقدار آن به اندازه واحد تعیین شده کم یا زیاد می شود. اجرای حلقه تا زمانی که شرط آن درست باشد، ادامه داشته و شرط در ابتدای اجرای حلقه تست می شود. کد زیر یک مثال عملی از حلقه for loop را نشان می دهد :
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number = 5;
for(int i = 0; i < number; i++)
Console.WriteLine(i);
Console.ReadLine();
}
}
}
کد مثال فوق خروجی همانند حلقه While loop ایجاد می کند اما همانطور که شماهده می کنید، این حلقه کمی متراکم تر از حلقه های قبلی است. حلقه for از سه بخش اصلی تشکیل شده است :
ابتدا یک مقدار متغیر را برای شمارش اجرای حلقه تعریف و مقداردهی می کنیم، یک شرط برای اجرای حلقه بر مبنای متغیر شمارنده تعیین شده و یک گام افزایش یا کاهش جهت شمارش اجرای حلقه و کنترل گام آن مثل ++ یا – تعیین می گردد.
در کد مثال فوق، در مرحله اول شمارنده حلقه را به نام i تعریف و با مقدار 0 مقداردهی کرده ایم، این بخش حلقه فقط یک بار و در هنگام شروع حلقه اجرا می شود.
دو قسمت بعدی حلقه، در هر بار تکرار حلقه، اجرا می شوند. در هر بار، مقدار متغیر i با متغیرهای عددی number مقایسه شده و در صورتی که کوچکتر از آن باشد، دستورات حلقه یک بار دیگر اجرا شده ومقدار i یک واحد افزایش می یابد.
آموزش سی شارپ
نکته 1 :
اگر برای متغیر حلقه ، گام افزایش یا کاهش تعیین نکنید، در صورت درست بودن اولیه شرط حلقه، حلقه for به صورت نامحدود اجرا می شود.
نکته 2 :
گام افزایش یا کاهش شمارنده حلقه را به جای پرانتز جلوی for، در درون بدنه دستورات حلقه نیز می توان قرار داد.
حلقه foreach loop :
حلقه آخری که در این بخش بررسی خواهیم کرد، حلقه foreach loop است. از این حلقه معمولا در هنگام کار با مجموعه ای از آیتم ها مثل آرایه ها (Arrays) و یا متغیرهای لیستی استفاده می شود. در کد مثال حلقه foreach از یک متغیر لیستی به نام ArrayList استفاده می کنیم.
به کد مثال عملی حلقه foreach loop دقت کنید :
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("John Doe");
list.Add("Jane Doe");
list.Add("Someone Else");
foreach(string name in list)
Console.WriteLine(name);
Console.ReadLine();
}
}
}
در ابتدای مثال، ابتدا یک نمونه از متغیر لیستی ArrayList به نام list را ایجاد و سپس چندین مقدار متنی را به عنوان اعضای آن، به آرایه خود اضافه کرده ایم.
با استفاده از حلقه foreach loop به درون هر یک از آیتم های آرایه رفته و مقدار آن عضو را برابر با متغیر name قرار داده ایم. سپس مقدار متغیر name را در خروجی چاپ کرده ایم.
همانطور که در کد مثال مشاهده می کنید، ما به حلقه foreach اعلام کرده ایم که متغیر name از نوع متنی string می باشد. در هنگام کار با حلقه foreach حتما بایستی نوع داده ای که می خواهید حلقه درون آن حرکت کند را اعلام کنید.
در مواردی که نوع داده ای اعضای آرایه شما ممکن است با هم متفاوت باشد، بهتر است از یک متغیر شی کلاس object class برای حرکت درون اعضای آرایه استفاده کنید.
نکته :
در هنگام کار با متغیرهای آرایه ای، حتما از حلقه foreach استفاده کنید. زیرا ساختار بسیار ساده تری نسبت به سایر حلقه ها در زبان C# دارد.
آموزش سی شارپ
آموزش کار با توابع Function در زبان C#
یک تابع یا Function در C#، به شما امکان می دهد مجموعه ای از دستورات را درون یک ظرف مشخص قرار داده و در هر جای برنامه که لازم داشتید، با به کار بردن نام تابع آن ها را فراخوانی کنید.
در برنامه نویسی پروژه ها، شما گاهی مجبور می شوید تا یک قطعه کد را در چندین محل مختلف مورد استفاده قرار دهید، در این حالت است که تابع ها (Function) به کمک شما می آیند. از طرف دیگر، به وسیله توابع شما می توانید کدهای پروژه خود را به بخش های مجزا و قابل تفکیک از هم تبدیل کنید.
در زبان C#، یک تابع (Function) به صورت کلی زیر تعریف می شود :
< visibility > < return type > < name > ( < parameters > )
{
< function code >
}
برای فراخوانی یک تابع، کافی است نام آن را نوشته و سپس یک پرانتز باز و بسته در مقابل آن قرار دهید. اگر تابع شما دارای یک یا چند پارامتر باشد، لیست پارامترها را هم در همین پرانتز قرار می دهید. به صورت زیر :
FunctionName ( Parameter1 , Parameter2 ,… ) ;
در کد مثال زیر یک تابع به نام Dostuff را فراخوانی کرده ایم :
public void DoStuff()
{
Console.WriteLine("I'm doing something...");
}
در کد تابع فوق، اولین بخش فراخوانی تابع، یعنی کلمه public، تعیین کننده میدان دید تابع در سطح برنامه بوده و تعیین آن اختیاری است. میدان دید یک تابع مشخص می کند آیا سایر توابع و کلاس های موجود در برنامه امکان مشاهده و دسترسی تابع مورد نظر را خواهند داشت یا خیر. Public به معنای عمومی بوده و یعنی سایر کلاس ها و توابع دیگر برنامه می توانند به تابع فوق دسترسی داشته باشند.
نکته :
اگر میدان دید برای یک تابع تعیین نشود، به صورت پیش فرض Private یا خصوصی در نظر گرفته می شود. Private تابع های هم کلاس تابع مورد نظر امکان دسترسی مستقیم به تابع را دارند.
در درس های بعدی به طور کامل به بررسی میدان دید یا Scope توابع خواهیم پرداخت.
بخش بعدی قسمت فراخوانی تابع تعیین نوع داده ای مقدار خروجی تابع است. این مقدار می تواند هر نوع داده ای خاص در C# بوده و یا Void تعیین شود. به کار بردن کلمه Void به این معناست که این تابع هیچ مقدار خاصی را بر نمی گرداند.
از طرف دیگر همانطور که می بینید پرانتزهای مقابل نام تابع خالی هستند و به این معناست که این تابع هیچ پارامتری را دریافت نمی کند.
بیایید کمی تابع فوق را به صورت زیر تغییر دهیم :
public int AddNumbers(int number1, int number2)
{
int result = number1 + number2;
return result;
}
در کد جدید تقریبا همه بخش ها را تغییر دادیم. تابع اکنون یک مقدار عددی integer را به عنوان خروجی برمی گرداند، در پارامتر عددی integer دریافت کرده و به جای چاپ متن در خروجی، یک عملیات ریاضی انجام داده و خروجی آن را به عنوان متغیر result بر می گرداند.
این کار به این معناست که هر موقع نیاز داشتیم، در هر بخشی از کد برنامه می توانیم تابع فوق را فراخوانی کرده و با ارسال دو عدد مورد نظر به آن، حاصل جمع آن ها را به صورت خروجی دریافت کنیم، تا این که هر بار لازم باشد کد عملیات ریاضی را مجددا بنویسیم.
تابع AddNumber() را می توانیم به راحتی توسط کد زیر در هر جای برنامه فراخوانی کرد ه و در حجم و زمان کدنویسی خود صرفه جویی زیادی بکنیم.
int result = AddNumbers(10, 5);
Console.WriteLine(result);
همانطور که اشاره کردیم، این تابع یک مقدار عددی را باز می گرداند. هنگامی که در یک تابع، هر نوع داده ای غیر از Void را تعیین می کنیم، به این معناست که تابع را مجبور نموده ایم تا یک مقدار برگشتی داشته باشد.
نکته :
اگر خط کد return را از کد مثال فوق بردارید، خواهی دید که در هنگام اجرای برنامه، کامپایلر بر بروی این تابع ارور داده و پیام زیر را صادر می کند :
'AddNumbers(int, int)': not all code paths return a value
پیام فوق به ما یادآوری می کند که تابع فوق، علی رغم این که یک مقدار خروجی برای آن در نظر
گرفته شده، اما هیچ خروجی را بر نمی گرداند. اما می خواهیم خروجی تابع را کنترل کنید، می توانید کدی مثل کد زیر را به تابع اضافه کنید :
public int AddNumbers(int number1, int number2)
{
int result = number1 + number2;
if(result > 10)
{
return result;
}
}
اما باز هم پیام خطایی همانند مثال قبل صادر می شود، چرا؟ به این دلیل که هیچ ضمانتی وجود نداشته که شرط دستور if درست از آب در بیاید و برنامه خروجی داشته باشد (دستور return اجرا بشود). می توانید مشکل فوق را با تعیین یک مقدار پیش فرض برای عبارت return به صورت زیر حل کنید :
public int AddNumbers(int number1, int number2)
{
int result = number1 + number2;
if(result > 10)
{
return result;
}
return 0;
}
کد اضافه شده فوق، مشکل برنامه ما را حل کرده و از طرف دیگر نشان می دهد می توانیم بیش از یک دستور return را در بدنه تابع خود تعریف کنیم. به محض اجرای دستور return در هر جای کد برنامه، خروجی تابع ارسال شده و اجرای مابقی دستورات تابع لغو می شود. در مثال فوق، اگر مقدار متغیر خروجی return بزرگتر از 10 باشد، هیچ گاه دستور return 0; اجرا نمی شود.
پایان قسمت سوم آموزش برنامه نویسی سی شارپ
با ادامه آموزش سی شارپ همراه ما باشید
منتظر آموزش برنامه نویسی پایتونتون هستم ....
خسته نباشید
محصول جدید ما منتشر شده دوست داشتین به ما هم سر بزنید:
مشاهده قیمت و خرید انگشتر طلای نگین دار کد 541