الگوریتم اول

لطفا صبر کنید...

توابع و متدها در #C

توابع و متدها در C#

در C#، توابع و متدها برای انجام عملیات خاص و سازماندهی کد استفاده می‌شن. متدها (که به اون‌ها تابع هم گفته می‌شه) کدهایی هستند که می‌تونن ورودی دریافت کنن، عملیاتی رو انجام بدن و خروجی برگردونن.

۱. ساختار متد (تابع) در C#

یک متد شامل سه قسمت اصلی هست:

  1. نوع برگشتی: نوع داده‌ای که متد به عنوان خروجی برمی‌گردونه (مثلاً int، void، string و غیره).
  2. نام متد: اسم متد که برای فراخوانی اون استفاده می‌شه.
  3. پارامترها (اختیاری): ورودی‌هایی که متد دریافت می‌کنه.

ساختار کلی متد:

returnType MethodName(parameters)
{
    // بدنه متد
    // کدهایی که در اینجا اجرا می‌شوند
}

۲. مثال‌های متد در C#

🔹 متد بدون پارامتر و بدون بازگشت (void)

اگر متد نیازی به پارامتر نداشته باشه و هیچ مقداری رو هم برنگردونه، از نوع void استفاده می‌کنیم.

using System;

class Program
{
    // متدی بدون پارامتر و بدون بازگشت
    static void SayHello()
    {
        Console.WriteLine("سلام دنیا!");
    }

    static void Main()
    {
        // فراخوانی متد SayHello
        SayHello();
    }
}

🔹 توضیح: این متد هیچ پارامتری دریافت نمی‌کنه و هیچ مقداری هم برنمی‌گردونه، فقط پیامی رو در کنسول چاپ می‌کنه.

خروجی:

سلام دنیا!

🔹 متد با پارامتر و بدون بازگشت

اگر متد نیاز به دریافت ورودی داشته باشه (یعنی پارامتر داشته باشه) ولی بازگشتی نداشته باشه، می‌تونیم از void به عنوان نوع برگشتی استفاده کنیم.

using System;

class Program
{
    // متدی با پارامتر و بدون بازگشت
    static void Greet(string name)
    {
        Console.WriteLine("سلام " + name + "!");
    }

    static void Main()
    {
        // فراخوانی متد Greet با پارامتر
        Greet("علی");
    }
}

این متد یک پارامتر از نوع string دریافت می‌کنه و از اون برای چاپ پیامی استفاده می‌کنه.

خروجی:

سلام علی!

🔹 متد با پارامتر و با بازگشت (return)

اگر متد بخواد مقداری رو به فراخوانی‌کننده برگردونه، باید یک نوع داده‌ای مشخص کنه و در بدنه متد از دستور return برای برگردوندن مقدار استفاده بشه.

using System;

class Program
{
    // متدی با پارامتر و با بازگشت
    static int Add(int a, int b)
    {
        return a + b;
    }

    static void Main()
    {
        int result = Add(5, 3);  // فراخوانی متد و دریافت مقدار برگشتی
        Console.WriteLine("نتیجه جمع: " + result);
    }
}

این متد دو پارامتر از نوع int دریافت می‌کنه، اون‌ها رو با هم جمع می‌کنه و نتیجه رو برمی‌گردونه.

خروجی:

نتیجه جمع: 8

🔹 متد با بازگشت و استفاده از انواع مختلف داده

متدها می‌تونن انواع مختلف داده‌ها رو برگردونن، نه فقط اعداد یا رشته‌ها. مثلاً می‌تونیم متدی بسازیم که یک مقدار اعشاری (float) رو برگردونه.

using System;

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);
    }
}

این متد دو عدد اعشاری را دریافت می‌کند، آن‌ها را تقسیم کرده و نتیجه را برمی‌گرداند.

خروجی:

نتیجه تقسیم: 5

۳. استفاده از متدهای بازگشتی

متدهای بازگشتی، متدهایی هستند که می‌تونن خودشان را فراخوانی کنند. این نوع متدها معمولاً برای حل مسائل بازگشتی (مثل فاکتوریل، سری فیبوناچی و غیره) استفاده می‌شن.

مثال: محاسبه فاکتوریل با متد بازگشتی

using System;

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);
    }
}

این متد از خود متد برای محاسبه فاکتوریل استفاده می‌کنه تا به نتیجه برسیم.

خروجی:

فاکتوریل 5: 120

۴. پارامترهای پیش‌فرض (Default Parameters)

در C# می‌توانیم به پارامترهای یک متد مقدار پیش‌فرض بدیم، به طوری که اگر وقتی متد فراخوانی میشه، این پارامترها مقداردهی نشه، از مقدار پیش‌فرض استفاده بشه.

مثال:

using System;

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، باید قبل از فراخوانی متد مقدار اولیه به پارامتر داده شده باشد.

using System;

class Program
{
    static void Increment(ref int x)
    {
        x++;
    }

    static void Main()
    {
        int a = 5;
        Increment(ref a);
        Console.WriteLine(a);  // نمایش مقدار جدید a
    }
}

خروجی:

6

🔹 پارامتر out

با out، نیازی به مقداردهی اولیه پارامتر قبل از فراخوانی متد نیست، ولی باید در داخل متد حتماً مقداردهی بشه.

using System;

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);
    }
}

خروجی:

a: 10, b: 20

جمع‌بندی

  • توابع (متدها) در C# برای انجام عملیات خاص استفاده می‌شوند.
  • نوع برگشتی (مثل void، int، string و غیره) مشخص می‌کند که متد چه چیزی رو برمی‌گردونه.
  • می‌توانیم متدها رو با پارامترهای ورودی و بازگشتی بنویسیم.
  • متدهای بازگشتی به خودشان فراخوانی می‌کنند.
  • می‌توانیم از پارامترهای پیش‌فرض، ref و out برای انعطاف بیشتر استفاده کنیم.