الگوریتم اول

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

توابع پیشرفته در #C

در #C، توابع پیشرفته شامل ویژگی‌ها و مفاهیمی هستند که باعث می‌شوند کد انعطاف‌پذیرتر و قابل استفاده مجددتر باشد. این ویژگی‌ها شامل توابع لامبدا (Lambda functions)، توابع به‌عنوان پارامتر (Functions as parameters)، توابع بازگشتی (Recursive functions) و توابع با ویژگی‌های LINQ می‌شوند.

۱. توابع لامبدا (Lambda Functions)

توابع لامبدا در #C یک نوع تابع ناشناس هستند که می‌توانند به‌طور مستقیم در کد استفاده شوند. این توابع معمولاً برای عملیات‌های کوتاه و ساده استفاده می‌شوند.

ساختار تابع لامبدا

(parameters) => expression

مثال استفاده از تابع لامبدا

using System;

class Program
{
    static void Main()
    {
        // تابع لامبدا برای جمع دو عدد
        Func<int, int, int> add = (x, y) => x + y;

        Console.WriteLine(add(3, 4));  // خروجی: 7
    }
}

۲. توابع به‌عنوان پارامتر (Functions as Parameters)

در #C می‌توان توابع را به‌عنوان پارامتر به سایر توابع ارسال کرد. این ویژگی از Delegate و Action یا Func برای ارسال توابع استفاده می‌کند.

مثال استفاده از توابع به‌عنوان پارامتر

using System;

class Program
{
    static void Main()
    {
        // ارسال تابع لامبدا به عنوان پارامتر
        ProcessData((x, y) => x + y);  // جمع دو عدد

        ProcessData((x, y) => x * y);  // ضرب دو عدد
    }

    static void ProcessData(Func<int, int, int> operation)
    {
        Console.WriteLine(operation(3, 4));
    }
}

خروجی:

7
12

۳. توابع بازگشتی (Recursive Functions)

یک تابع بازگشتی تابعی است که در داخل خود، خودش را فرا می‌خواند. این ویژگی برای حل مسائل پیچیده که نیاز به تقسیم مسئله به بخش‌های کوچک‌تر دارند، مفید است.

مثال استفاده از تابع بازگشتی

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

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Factorial(5));  // خروجی: 120
    }

    static int Factorial(int n)
    {
        if (n <= 1) return 1;  // شرط پایان
        return n * Factorial(n - 1);  // فراخوانی بازگشتی
    }
}

خروجی:

120

۴. توابع با LINQ

LINQ (Language Integrated Query) به شما این امکان را می‌دهد که پرس‌و‌جوهای پیچیده را به‌راحتی روی داده‌ها انجام دهید. توابع LINQ در #C بسیار قدرتمند هستند و می‌توانند برای جستجو، مرتب‌سازی، فیلتر کردن و گروه‌بندی داده‌ها استفاده شوند.

مثال استفاده از LINQ برای مرتب‌سازی و فیلتر کردن

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // آرایه‌ای از اعداد
        int[] numbers = { 1, 5, 2, 8, 4, 6 };

        // استفاده از LINQ برای فیلتر کردن و مرتب‌سازی
        var result = numbers.Where(x => x > 3).OrderBy(x => x);

        // نمایش نتایج
        foreach (var number in result)
        {
            Console.WriteLine(number);
        }
    }
}

خروجی:

4
5
6
8

۵. توابع با پارامترهای پیش‌فرض (Default Parameters)

در #C، می‌توانید پارامترهای توابع را به‌صورت پیش‌فرض تنظیم کنید، به این معنا که اگر در هنگام فراخوانی تابع، مقداری برای آن پارامتر ارسال نشود، مقدار پیش‌فرض استفاده خواهد شد.

مثال استفاده از پارامترهای پیش‌فرض

using System;

class Program
{
    static void Main()
    {
        // استفاده از پارامتر پیش‌فرض
        Console.WriteLine(SayHello());  // خروجی: Hello, User!
        Console.WriteLine(SayHello("Alice"));  // خروجی: Hello, Alice!
    }

    static string SayHello(string name = "User")
    {
        return "Hello, " + name + "!";
    }
}

خروجی:

Hello, User!
Hello, Alice!

۶. توابع با پارامترهای به‌صورت "params"

در #C، می‌توانید تعداد نامحدودی از پارامترها را به یک تابع ارسال کنید. این کار با استفاده از کلمه‌کلیدی params ممکن است.

مثال استفاده از پارامترهای "params"

using System;

class Program
{
    static void Main()
    {
        // ارسال تعدادی از اعداد به تابع
        Console.WriteLine(Sum(1, 2, 3, 4, 5));  // خروجی: 15
    }

    static int Sum(params int[] numbers)
    {
        int total = 0;
        foreach (var num in numbers)
        {
            total += num;
        }
        return total;
    }
}

خروجی:

15

۷. توابع با خروجی‌های چندگانه (Tuples)

در #C، می‌توانید از Tuples برای بازگشت چندین مقدار از یک تابع استفاده کنید. این امکان به شما این اجازه را می‌دهد که به‌راحتی چندین داده را از یک تابع برگردانید.

مثال استفاده از Tuples

using System;

class Program
{
    static void Main()
    {
        // دریافت دو مقدار از یک تابع
        var result = GetMinMax(3, 1, 5, 4, 2);
        Console.WriteLine("Min: " + result.Item1);  // خروجی: Min: 1
        Console.WriteLine("Max: " + result.Item2);  // خروجی: Max: 5
    }

    static (int, int) GetMinMax(params int[] numbers)
    {
        int min = int.MaxValue;
        int max = int.MinValue;

        foreach (var number in numbers)
        {
            if (number < min) min = number;
            if (number > max) max = number;
        }

        return (min, max);
    }
}

خروجی:

Min: 1
Max: 5

جمع‌بندی

توابع پیشرفته در #C به شما این امکان را می‌دهند که برنامه‌های خود را انعطاف‌پذیرتر و قابل استفاده مجددتر کنید. برخی از این ویژگی‌ها شامل توابع لامبدا، توابع به‌عنوان پارامتر، توابع بازگشتی، توابع با LINQ، توابع با پارامترهای پیش‌فرض، و توابع با پارامترهای "params" هستند. همچنین، استفاده از Tuples برای بازگشت چندین مقدار از یک تابع یکی از روش‌های مفید برای بهبود کد است.