79e0

تطبیق الگو در NET 7: ساده سازی تجزیه و تحلیل داده ها

لینک کوتاه https://codecell.ir/a/79e0
به اشتراک گذاری
نویسنده:
0
0
1
آموزش های نویسنده:
Pattern Matching در سی شارپ

با ظهور نسخه های جدیدتر دات نت، توسعه دهندگان سی شارپ با ویژگی فوق العاده قدرتمندی به نام Pattern Matching یا تطبیق الگو آشنا شدند. این ویژگی، با الهام از پارادایم های functional programming ، روشی جدید و گویا برای نوشتن عبارات شرطی در اختیار توسعه دهندگان قرار می دهد و در نتیجه کد آنها را خواناتر، قابل نگهداری و کارآمدتر می کند. در این مقاله، Pattern Matching یا تطبیق الگو در دات نت 7 را بررسی می‌کنیم، کاربردهای عملی آن را با مثال‌های دقیق بررسی می‌کنیم و مزایای استفاده از تطبیق الگو در معماری تمیز را مورد بحث قرار می‌دهیم.

 Pattern Matching یا تطبیق الگو چیست؟

تطبیق الگو یا Pattern Matching یک ویژگی ضروری در برنامه نویسی تابعی است که به سی شارپ راه پیدا کرده است. با معرفی دات نت 7، این ویژگی با قابلیت های جدید گسترش یافته است و روشی واضح تر و مختصرتر برای تست و استخراج داده ها از یک شی ارائه می دهد.

زبان های برنامه نویسی شی گرا سنتی از type checking و casting برای تست و دستکاری یک شی استفاده می کنند. با این حال، تطبیق الگو در net7 رویکرد گویاتری را ارائه می دهد. Pattern Matching به شما امکان می‌دهد شکل داده‌ها را به جای نوع آن تست کنید، که منجر به کد واضح و خواناتر می‌شود.

object o = "Hello, world!";
if (o is string s)
{
    Console.WriteLine(s.ToUpper());  // Output: HELLO, WORLD!
}

در مثال بالا، کلمه کلیدی is بررسی می کند که آیا شی o یک رشته است. اگر چنین باشد، o را به رشته s فرستاده و بلوک کد اجرا می شود. این یک نمایش ساده و در عین حال قدرتمند از قابلیت های تطبیق الگو در net7 است.

تکنیک های Pattern Matching پیشرفته در NET 7

دات نت 7 تکنیک های تطبیق الگوی قوی تری را معرفی می کند، مانند الگوهای نوع(type pattern)، الگوهای موقعیتی(positional pattern)، الگوهای ویژگی(property pattern)، الگوهای رابطه ای(Relational Pattern)، الگوهای منطقی(Logical Pattern) و الگوهای تاپل(tuple pattern).

الگوهای نوع یا type pattern ها:

type pattern در.net7 توسعه دهندگان را قادر می سازد تا عملیات بررسی نوع و casting را در یک مرحله ترکیب کنند. مثال زیر این موضوع را نشان می دهد:

public static void PrintDetails(object o)
{
    switch (o)
    {
        case int i:
            Console.WriteLine($"Integer: {i}");
            break;
        case string s:
            Console.WriteLine($"String: {s}");
            break;
        default:
            Console.WriteLine("Unknown type");
            break;
    }
}

در این مثال، دستور switch از الگوهای نوع برای مدیریت انواع مختلف داده استفاده می کند.

 الگوهای موقعیتی یا positional pattern ها:

از positional pattern ها در دات نت 7 می توان برای deconstruct کردن یک شی و بررسی مقادیر تجزیه شده استفاده کرد. برای این امر باید شی دارای متد Deconstruct باشد. به مثال زیر توجه کنید:

public class Point
{
    public int X { get; }
    public int Y { get; }
    public Point(int x, int y) => (X, Y) = (x, y);
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}
public static void PrintPointDetails(object o)
{
    if (o is Point(var x, var y))
    {
        Console.WriteLine($"Point at ({x}, {y})");
    }
}

متد Deconstruct در کلاس Point امکان استفاده از الگوهای موقعیتی در دستور if را می دهد.

  الگوهای ویژگی یا property pattern ها:

از property pattern ها در دات نت 7 می توان برای مطابقت با مقدار ویژگی یک شی استفاده کرد. یک مثال در زیر آمده است:

public class Employee
{
    public string Department { get; set; }
    public int Salary { get; set; }
}
public static void PrintEmployeeDetails(Employee e)
{
    if (e is { Department: "Sales", Salary: var s })
    {
        Console.WriteLine($"Salesperson's Salary: {s}");
    }
}

در اینجا، دستور if از property pattern برای تطبیق ویژگی Department با مقدار "Sales" و استخراج ویژگی Salary استفاده می کند.

الگوهای رابطه ای یا Relational Pattern ها:

الگوهای رابطه ای یکی دیگر از موارد هیجان انگیز دیگر برای تطبیق الگو در دات نت 7 است. آنها به شما اجازه می دهند مقادیر را با عملگرهای رابطه ای مقایسه کنید، مانند کمتر، بزرگتر، کمتر یا مساوی، یا بزرگتر از یا مساوی. الگوهای رابطه ای کد مختصر و گویا را برای مقایسه مقادیر و انجام اقدامات مناسب بر اساس نتیجه امکان پذیر می کنند. این ویژگی به ویژه در هنگام برخورد با range ها یا مقایسه عددی مفید است. به مثال زیر توجه کنید:

public static string GetGrade(int score)
{
    return score switch
    {
        < 60 => "F",
        >= 60 and < 70 => "D",
        >= 70 and < 80 => "C",
        >= 80 and < 90 => "B",
        >= 90 => "A",
    };
}

در این مثال، ما روشی به نام GetGrade داریم که یک پارامتر به عنوان امتیاز دانش آموز می گیرد و بر اساس امتیاز، نمره مربوطه را با استفاده از الگوهای رابطه ای برمی گرداند.

 الگوهای منطقی یا Logical Pattern ها:

در NET 7، الگوهای منطقی با ترکیب الگوهای متعدد با عملگرهای منطقی، بیان بهتری را ارائه می دهند. اکنون می توانید تطبیق الگو را بر اساس شرایط پیچیده شامل عملیات منطقی AND، OR و NOT انجام دهید. این اضافه کدی را که قبلاً به چند شرط if-else تودرتو نیاز داشت، ساده می کند. با الگوهای منطقی، می توانید سناریوهای تطبیق پیچیده را به طور مختصر و شهودی بیان کنید.  به مثال زیر توجه کنید:

public static string GetWeatherDescription(int temperature, bool isRaining)
{
    return (temperature, isRaining) switch
    {
        (>= 30, _) => "It's hot outside.",
        (< 10, _) => "It's cold outside.",
        (_, true) => "It's raining.",
        (_, false) => "The weather is pleasant."
    };
}

 در این مثال، روشی به نام GetWeatherDescription داریم که دو پارامتر دما و isRaining را می گیرد. بر اساس این پارامترها، توصیف آب و هوا را با استفاده از الگوهای منطقی برمی گرداند.

 الگوهای تاپل یا tuple pattern ها:

از tuple pattern ها در .net7 می توان برای مطابقت با مقادیر tuple ها استفاده کرد. به مثال زیر توجه کنید:

public static string GetDirection((int dx, int dy) vector)
{
    return vector switch
    {
        (1, 0) => "East",
        (0, 1) => "North",
        (-1, 0) => "West",
        (0, -1) => "South",
        _ => "Unknown"
    };
}

در اینجا، دستور switch از الگوهای تاپل برای مطابقت با جهات مختلف استفاده می کند.

Pattern Matching در معماری تمیز

بیان و انعطاف پذیری Pattern Matching، آن را به ابزاری عالی در clean architecture تبدیل کرده است. Pattern Matching به توسعه دهندگان اجازه می دهد تا با کاهش نیاز به بررسی type و casting ، کد قابل خواندن و نگهداری بیشتری ایجاد کنند، که منجر به کدهای تمیزتر و ساده تر می شود.

به عنوان مثال، یک وضعیت معمولی در معماری تمیز را در نظر بگیرید که در آن انواع مختلف کاربران مجوزهای متفاوتی دارند. رویکردهای سنتی شامل عبارات متعددی هستند که نوع کاربر را بررسی می‌کنند و بر این اساس مجوزها را اعطا می‌کنند. با تطبیق الگو، این فرآیند ساده می شود:

public string GetUserPermissions(User user)
{
    return user switch
    {
        Administrator _ => "Full access",
        Guest _ => "Limited access",
        RegisteredUser { Subscription: Premium } => "Premium access",
        RegisteredUser { Subscription: Basic } => "Basic access",
        _ => "Unknown user type"
    };
}

این رویکرد در هم ریختگی کد را کاهش می دهد و خوانایی را افزایش می دهد. صورت واضح و سادگی، تطبیق الگو را به ابزاری قدرتمند برای معماری تمیز تبدیل می کند.

مزایای Pattern Matching با تطبیق الگو در Net7

افزایش خوانایی:

تطبیق الگو، منطق شرطی پیچیده را ساده می کند و کد را خواناتر و قابل فهم تر می کند. ویژگی‌های تطبیق الگوی پیشرفته در NET 7، مانند الگوهای نوع(type pattern)، الگوهای موقعیتی(positional pattern)، الگوهای ویژگی(property pattern)، الگوهای رابطه ای(Relational Pattern)، الگوهای منطقی(Logical Pattern) و الگوهای تاپل(tuple pattern) وضوح کد را با ارائه نحو بصری و قابلیت‌های بیانی افزایش می‌دهند.

 بهره وری بهبود یافته:

با استفاده از ویژگی‌های تطبیق الگوی پیشرفته، توسعه‌دهندگان می‌توانند کد مختصر و کارآمدتری بنویسند. تطبیق الگو نیاز به گزاره‌های تکراری if-else و موارد سوئیچ را از بین می‌برد و بهره وری را افزایش می‌دهد. توانایی بیان سناریوهای تطبیق پیچیده با الگوهای منطقی باعث صرفه جویی در زمان توسعه می شود.

 تجزیه و تحلیل داده های پیشرفته:

تطبیق الگو در هنگام برخورد با تجزیه و تحلیل و پردازش داده ها ارزشمند است. با ویژگی های جدید در دات نت 7، توسعه دهندگان می توانند به راحتی داده ها را بر اساس الگوهای خاص استخراج و دستکاری کنند. الگوهای ویژگی امکان استخراج کارآمد مقادیر از اشیاء را فراهم می کنند، در حالی که الگوهای رابطه ای امکان مقایسه عددی ساده را فراهم می کنند. این قابلیت ها توسعه دهندگان را قادر می سازد تا داده ها را به شیوه ای انعطاف پذیرتر و ساختارمندتر مدیریت کنند.

نتیجه گیری

Pattern Matching یا تطبیق الگو در NET 7 یک ویژگی قدرتمند و گویا است که از پارادایم های functional programming الهام گرفته شده و به سی شارپ اضافه شده است. توانایی آن برای تست شکل داده ها به جای نوع آن باعث می شود کدی خوانا، قابل نگهداری و کارآمدتری داشته باشیم. ادغام آن با اصول معماری تمیز منجر به کد ظریف‌تر و ساده‌تر می‌شود و در نتیجه طراحی و کیفیت کلی نرم‌افزار را بهبود می‌بخشد. به عنوان یک توسعه دهنده دات نت، آشنایی با این ویژگی برای نوشتن کد بهتر و تمیزتر ضروری است.

منبع: medium

دیگر مقالات آموزش برنامه نویسی مدرس

Response Caching در ASP.NET Core

Response Caching یک مکانیزم ذخیره سازی پاسخ سرور توسط مرورگر یا سایر کلاینت ها است. با استفاده از Response Caching در Asp.net Core می توانیم عملکرد و کارایی سیستم را بالا ببریم.

688 0 1402/10/22

Output Caching در ASP.NET Core 8.0

Output Caching یک ویژگی جدید است که از زمان .NET 7 معرفی شده است. این ویژگی به ما این امکان را می دهد که به راحتی یک کش پاسخ برای Web API خود بدون پیاده سازی IMemoryCache راه اندازی کنیم.

748 0 1402/10/14

الگوی طراحی زنجیره مسئولیت در سی شارپ

الگوی زنجیره مسئولیت یا Chain of Responsibility Design Pattern یک الگوی طراحی رفتاری(behavioral design pattern) است که اجازه می‌دهد یک درخواست در امتداد زنجیره‌ای از کنترل‌کننده‌های بالقوه ارسال شود تا زمانی که درخواست مناسب برای پردازش آن را پیدا کند.

706 2 1402/10/01

ViewComponent در ASP.NET Core

در ASP.NET Core با استفاده از ViewComponent ها می توان اجزای ماژولار، قابل استفاده مجدد، قابل نگهداری و مقیاس پذیر برای ساخت برنامه های کاربردی وب ایجاد کرد. در این مقاله به نحوه ایجاد و فراخوانی ViewComponent در Asp.net core پرداخته ایم.

1٬475 2 1402/05/15

تزریق وابستگی در ASP.NET Core

تزریق وابستگی (DI) یک الگوی طراحی نرم افزاری است که امکان ایجاد برنامه های کاربردی و ماژولار را فراهم می کند.. در .NET Core تزریق وابستگی یا Dependency injection یک ویژگی مهم است که می تواند برای ساده سازی توسعه برنامه، بهبود تست پذیری و کاهش پیچیدگی کد مورد استفاده قرار گیرد.

2٬004 1 1402/02/04

ضروری ترین کتابخانه های NuGet برای ASP.NET Core

در این مقاله مهمترین،ضروری ترین و پرکاربردترین کتابخانه های NuGet که هر توسعه‌ دهنده‌ ASP.NET Core باید برای توسعه بهتر و کاهش زمان مورد نیاز برای برنامه ‌های خود از آن استفاده کنند را مورد بررسی قرار داده ایم.

1٬544 1 1401/12/29

الگوی طراحی Factory در سی شارپ

الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. Factory Method یک الگوی طراحی ایجادی است که یک رابط برای ایجاد اشیاء در یک سوپر کلاس فراهم می‌کند. ما در این مقاله الگوی Factory Method Design در سی شارپ را بررسی می کنیم.

1٬679 1 1401/10/28

مقایسه List و Array در سی شارپ

آرایه و لیست در سی شارپ هر دو به عنوان مجموعه ای از مقادیر عمل می کنند، اما در نحوه ذخیره محتوای خود در حافظه و نحوه دسترسی به آنها متفاوت هستند. در این مقاله Benchmark و کارایی List<T> با سایز داینامیک، List<T> با سایز ثابت و Array ها را بررسی می کنیم.

2٬263 2 1401/09/01

LinkedList در سی شارپ

LinkedList یا لیست پیوندی در سی شارپ یک ساختار داده خطی است که عنصر را در مکان غیر پیوسته ذخیره می کند. LinkedList شامل گره هایی است که هر گره حاوی یک فیلد داده و یک مرجع (پیوند) به گره بعدی در لیست است. در سی شارپ، LinkedList یا لیست پیوندی یک نوع مجموعه جنریک است.

2٬093 0 1401/08/13

Garbage Collection در دات نت

به طور کلی، Garbage Collection (GC) یا جمع آوری زباله در .Net چیزی نیست جز به دست آوردن مجدد حافظه اختصاص داده شده به اشیایی که در حال حاضر در هیچ بخشی از برنامه ما استفاده نمی شوند. ما در این مقاله Garbage Collection را در سی شارپ بررسی خواهیم کرد.

2٬862 5 1401/03/30

.NET Core چیست؟

.Net (با تلفظ «دات نت») یک چارچوب نرم افزاری کامپیوتری مدیریت شده رایگان و منبع باز برای سیستم عامل های ویندوز، لینوکس و macOS است. این پروژه در درجه اول توسط کارمندان مایکروسافت از طریق دات نت توسعه یافته و تحت مجوز MIT منتشر شده است.

2٬620 2 1401/03/16

پشته(Stack) در سی شارپ

پشته یا Stack در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. پشته یک ساختار داده LIFO یا Last-In-First-Out است، به این معنی که آخرین موردی که در پشته قرار می گیرد اولین موردی است که از پشته خارج می شود.

2٬223 0 1401/03/09

صف (Queue) در سی شارپ

صف (Queue) در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. Queue یک ساختار داده first-in-first-out یا FIFO است که به این معنی است که اولین مورد اضافه شده به صف اولین موردی است که حذف می شود.

2٬183 0 1401/02/30

تفاوت Hashtable و Dictionary در سی شارپ

در سی شارپ از Hashtable و Dictionary می توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. با این تفاوت که Hashtable و Dictionary عناصر را به عنوان جفت Key/Value ذخیره می کنند.در این مقاله به تفاوت های Hashtable و Dictionary پرداخته شده است.

1٬871 2 1401/02/23

Dictionary در سی شارپ

در سی شارپ از دیکشنری ها (Dictionary) می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Dictionary می تواند عناصر را به عنوان جفت Key/Value ذخیره کند.Key ها باید منحصر به فرد و نمی توانند null باشند. Value ها می توانند تکراری یا null باشند.

2٬275 3 1401/02/17

Hashtable در سی شارپ

از Hashtable می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Hashtable می تواند عناصر را به عنوان جفت Key/Value به عنوان جایگزینی برای استفاده از Index ذخیره کند.

1٬740 5 1401/02/14

Redirect درخواست (ریدایرکت) در asp.net core

در برنامه های ASP.NET Core برای تغییر مسیر(ریدایرکت) و Redirect به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.

2٬604 5 1401/02/12

تبدیل enum به لیست انتخابی در asp.net core

در این آموزش ما بوسیله Reflection ها در سی شارپ و asp.net core یک enum را به لیست انتخابی یا SelectListItem تبدیل خواهیم کرد و بوسیله تگ select در بوت استرپ 5 نمایش می دهیم.

1٬771 3 1401/02/03

نحوه ارسال ایمیل در asp و c#

امروزه ارسال ایمیل به امری ضروری در پروژه های وب تبدیل شده است.از ارسال ایمیل در asp می توان در بخش های تایید حساب کاربری،بازیابی رمز عبور،ایمیل مارکتینگ،ارسال خبرنامه و ... استفاده نمود.در این آموزش نحوه ارسال ایمیل در asp core و سی شارپ پیاده سازی گردیده است.

2٬622 5 1401/02/03
نظرات

برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید