توابع و متدها در #C
توابع و متدها در C#
در C#، توابع و متدها برای انجام عملیات خاص و سازماندهی کد استفاده میشن. متدها (که به اونها تابع هم گفته میشه) کدهایی هستند که میتونن ورودی دریافت کنن، عملیاتی رو انجام بدن و خروجی برگردونن.
۱. ساختار متد (تابع) در C#
یک متد شامل سه قسمت اصلی هست:
- نوع برگشتی: نوع دادهای که متد به عنوان خروجی برمیگردونه (مثلاً int، void، string و غیره).
- نام متد: اسم متد که برای فراخوانی اون استفاده میشه.
- پارامترها (اختیاری): ورودیهایی که متد دریافت میکنه.
ساختار کلی متد:
{
// بدنه متد
// کدهایی که در اینجا اجرا میشوند
}
۲. مثالهای متد در C#
🔹 متد بدون پارامتر و بدون بازگشت (void)
اگر متد نیازی به پارامتر نداشته باشه و هیچ مقداری رو هم برنگردونه، از نوع void استفاده میکنیم.
class Program
{
// متدی بدون پارامتر و بدون بازگشت
static void SayHello()
{
Console.WriteLine("سلام دنیا!");
}
static void Main()
{
// فراخوانی متد SayHello
SayHello();
}
}
🔹 توضیح: این متد هیچ پارامتری دریافت نمیکنه و هیچ مقداری هم برنمیگردونه، فقط پیامی رو در کنسول چاپ میکنه.
خروجی:
🔹 متد با پارامتر و بدون بازگشت
اگر متد نیاز به دریافت ورودی داشته باشه (یعنی پارامتر داشته باشه) ولی بازگشتی نداشته باشه، میتونیم از void به عنوان نوع برگشتی استفاده کنیم.
class Program
{
// متدی با پارامتر و بدون بازگشت
static void Greet(string name)
{
Console.WriteLine("سلام " + name + "!");
}
static void Main()
{
// فراخوانی متد Greet با پارامتر
Greet("علی");
}
}
این متد یک پارامتر از نوع string دریافت میکنه و از اون برای چاپ پیامی استفاده میکنه.
خروجی:
🔹 متد با پارامتر و با بازگشت (return)
اگر متد بخواد مقداری رو به فراخوانیکننده برگردونه، باید یک نوع دادهای مشخص کنه و در بدنه متد از دستور return برای برگردوندن مقدار استفاده بشه.
class Program
{
// متدی با پارامتر و با بازگشت
static int Add(int a, int b)
{
return a + b;
}
static void Main()
{
int result = Add(5, 3); // فراخوانی متد و دریافت مقدار برگشتی
Console.WriteLine("نتیجه جمع: " + result);
}
}
این متد دو پارامتر از نوع int دریافت میکنه، اونها رو با هم جمع میکنه و نتیجه رو برمیگردونه.
خروجی:
🔹 متد با بازگشت و استفاده از انواع مختلف داده
متدها میتونن انواع مختلف دادهها رو برگردونن، نه فقط اعداد یا رشتهها. مثلاً میتونیم متدی بسازیم که یک مقدار اعشاری (float) رو برگردونه.
class Program
{
// متدی با بازگشت از نوع double
static double Divide(double a, double b)
{
if (b == 0)
{
Console.WriteLine("تقسیم بر صفر امکانپذیر نیست.");
return 0; // جلوگیری از تقسیم بر صفر
}
return a / b;
}
static void Main()
{
double result = Divide(10, 2); // فراخوانی متد و دریافت نتیجه
Console.WriteLine("نتیجه تقسیم: " + result);
}
}
این متد دو عدد اعشاری را دریافت میکند، آنها را تقسیم کرده و نتیجه را برمیگرداند.
خروجی:
۳. استفاده از متدهای بازگشتی
متدهای بازگشتی، متدهایی هستند که میتونن خودشان را فراخوانی کنند. این نوع متدها معمولاً برای حل مسائل بازگشتی (مثل فاکتوریل، سری فیبوناچی و غیره) استفاده میشن.
مثال: محاسبه فاکتوریل با متد بازگشتی
class Program
{
// متد بازگشتی برای محاسبه فاکتوریل
static int Factorial(int n)
{
if (n == 0 || n == 1) // شرایط پایه
return 1;
else
return n * Factorial(n - 1); // فراخوانی خود متد
}
static void Main()
{
int result = Factorial(5);
Console.WriteLine("فاکتوریل 5: " + result);
}
}
این متد از خود متد برای محاسبه فاکتوریل استفاده میکنه تا به نتیجه برسیم.
خروجی:
۴. پارامترهای پیشفرض (Default Parameters)
در C# میتوانیم به پارامترهای یک متد مقدار پیشفرض بدیم، به طوری که اگر وقتی متد فراخوانی میشه، این پارامترها مقداردهی نشه، از مقدار پیشفرض استفاده بشه.
مثال:
class Program
{
static void Greet(string name, string greeting = "سلام")
{
Console.WriteLine(greeting + " " + name);
}
static void Main()
{
Greet("علی"); // استفاده از مقدار پیشفرض برای greeting
Greet("محمد", "صبح بخیر"); // استفاده از مقدار سفارشی برای greeting
}
}
خروجی:
صبح بخیر محمد
۵. پارامترهای خروجی (ref و out)
در C#، میتوانیم با استفاده از ref و out پارامترهایی رو به متد ارسال کنیم که میتوانند مقادیر جدیدی رو بعد از انجام عملیات در متد برگردونند.
🔹 پارامتر ref
برای استفاده از ref، باید قبل از فراخوانی متد مقدار اولیه به پارامتر داده شده باشد.
class Program
{
static void Increment(ref int x)
{
x++;
}
static void Main()
{
int a = 5;
Increment(ref a);
Console.WriteLine(a); // نمایش مقدار جدید a
}
}
خروجی:
🔹 پارامتر out
با out، نیازی به مقداردهی اولیه پارامتر قبل از فراخوانی متد نیست، ولی باید در داخل متد حتماً مقداردهی بشه.
class Program
{
static void GetValues(out int x, out int y)
{
x = 10;
y = 20;
}
static void Main()
{
int a, b;
GetValues(out a, out b);
Console.WriteLine("a: " + a + ", b: " + b);
}
}
خروجی:
جمعبندی
- توابع (متدها) در C# برای انجام عملیات خاص استفاده میشوند.
- نوع برگشتی (مثل void، int، string و غیره) مشخص میکند که متد چه چیزی رو برمیگردونه.
- میتوانیم متدها رو با پارامترهای ورودی و بازگشتی بنویسیم.
- متدهای بازگشتی به خودشان فراخوانی میکنند.
- میتوانیم از پارامترهای پیشفرض، ref و out برای انعطاف بیشتر استفاده کنیم.
