مشخصات مقاله
-
3711
-
5.0
-
49057
-
1
-
1
آموزش کار با توابع Function در زبان C#
وقتی شروع به یادگیری C# میکنی، بعد از آشنایی با مفاهیم اولیه، خیلی زود به سراغ موضوعاتی مثل تابعها و نحوه استفاده از اونها میری. تابعها یکی از ابزارهای مهم برای مرتب نگه داشتن کد و جلوگیری از تکرار بخشهای مختلف برنامه هستن و تقریباً در هر پروژهای باهاشون سروکار داری.
توی این مطلب قراره با مفهوم Function در زبان C# و نحوه تعریف و فراخوانی اون آشنا بشیم. همچنین میبینیم پارامترها، نوع مقدار بازگشتی و دستور return چه نقشی در یک تابع دارن و چطور میتونیم از اونها داخل کد استفاده کنیم.
آموزش کار با توابع Function در زبان C# :
یک تابع یا Function در C# بهت این امکان رو میده که مجموعهای از دستورات رو داخل یک بخش مشخص قرار بدی و هر زمان که به اونها نیاز داشتی، با استفاده از نام تابع دوباره اجراشون کنی.
در پروژههای برنامهنویسی، گاهی لازمه یک قطعه کد رو در چند بخش مختلف استفاده کنیم. اینجاست که تابعها به کمکمون میان. از طرف دیگه، با استفاده از توابع میتونیم کدهای پروژه رو به بخشهای جداگانه و قابل تفکیک تقسیم کنیم.
در زبان 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 در نظر گرفته میشه. در این حالت، فقط تابعهای همون کلاس میتونن به صورت مستقیم به اون تابع دسترسی داشته باشن.
در درسهای بعدی، به طور کامل درباره میدان دید یا 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; اجرا نمیشه.
مسیر ادامه یادگیری :
اگه میخوای کار با تابعها رو در کنار سایر مفاهیم زبان C# به صورت منظم و مرحلهبهمرحله یاد بگیری، میتونی مسیر یادگیریت رو با دوره آموزش C# ادامه بدی.