<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nuriddin</title>
    <description>The latest articles on DEV Community by Nuriddin (@nuriddin321).</description>
    <link>https://dev.to/nuriddin321</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F869370%2F94b4660e-50bd-4a3c-a25a-bd82534907b7.jpg</url>
      <title>DEV Community: Nuriddin</title>
      <link>https://dev.to/nuriddin321</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nuriddin321"/>
    <language>en</language>
    <item>
      <title>SOLID tamoillari</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Wed, 03 Aug 2022 12:32:56 +0000</pubDate>
      <link>https://dev.to/nuriddin321/solid-tamoillari-1mmb</link>
      <guid>https://dev.to/nuriddin321/solid-tamoillari-1mmb</guid>
      <description>&lt;p&gt;&lt;code&gt;S.O.L.I.D.&lt;/code&gt; - obyektga yo'naltirilgan dasturlashda dasturlarni loyihalashning 5 asosiy tamoyilidir. Bu loyihalashda qo'llanilishi mumkin bo'lgan va dasturchi uchun shu loyihada qo'shimchalar, kengaytirishlar, ish jarayoni chiqgan xatolarni to'g'illashni osonlashtiradigan tamoyillardir. Bu tamoyillarni qo'llash va qo'llamaslik dasturchining xohishiga bog'liq. Lekin, bu asosiy tamoyillar loyihalashda loyiga tadbiq qilinsa, ish sifati ancha yuqori bo'ladi. loyiha kodida tartib bo'ladi. Va shu bilan birga bu tamoyillar kodda keraksiz qatorlar va modul, komponentlar bo'lishidan, bir xil kod bir necha marta takrorlanishidan, qoleversa ba'zi hollarda kodni ko'p marotaba refaktoring qilishdan saqlab qoladi.&lt;/p&gt;

&lt;p&gt;Demak, asosiy 5 tamoyil izohlari bilan quyida keltirilgan:&lt;/p&gt;

&lt;h2&gt;
  
  
  SRP (Single responsibility principle)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;yagona javobgarlik tamoyili, bunda har bir class uchun faqat bitta vazifa yuklanadi. Bu classda metodlar bir nechta bo'lishi mumkin. 
Bu prinsipni asosiy maqsadi har bir ishni malum bir vazifa bajaradigan alohida classlarga bo'lib bajarish. Shunda dastur kodini  malum bir qismiga o'zgartirish kiritsak,faqatgina shu klassdagina o'zgarish bo'ladi, boshqa klasslarga tasir qilmaydi. Klassni o'zgartirishga faqat bitta sabab bo'lishi kerak. Test qilishga ham qulay.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OCP(Open/closed principle)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;open for extension, closed for modification ya'ni base klassda extension olib yengi featurelar qo'shsa bo'ladi, lekin base klassni modifikatsa(o'zgartirish) mumkin emas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LSP(Liskov substitution principle)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Liskovning o'rin almashtirish tamoyili, bu tamoyil ilk bor amerikalik olima Barbara Liskov tomonidan e'lon qilingan bo'lib, dasturda obyektlarni shu obyekt klassining bola klasslaridan olingan nusxalari bilan almashtirish mumkin bo'ladi va bu dastur natijasini o'zgartirmasligi kerak. Shuning uchun parent klass abstrakt qilib yozilishi kerek.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ISP(Interface segregation principle)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;interfeyslarga bo'lish tamoyili, hamma holat uchun umumy bo'lgan interfeysdan, har bir mijoz uchun alohida bo'lgan ko'plab interfeyslar yaxshi. Vaqt o'tishi bilan Sizning loyihangiz kengayadi, unga yangi funksiyalar, imkoniyatlar qo'shiladi. Bunda, loyiha boshidan loyiha strukturasi ustidan kuchi nazorat olib borilmasa, loyiha boshida aniq bir funksiyani bajaruvchi metodlar, loyiha oxiriga borib umuman boshqa vazifani bajarishi mumkin;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DIP(Dependency inversion principle)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;tobelarni almashtirish tamoyili, abstraksiya aniq bir obyektga bog'liq bo'lmasligi kerak, Aksincha, obyekt abstraksiyani qoidalariga bo'ysinishi kerak.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>oop</category>
      <category>programming</category>
      <category>solid</category>
    </item>
    <item>
      <title>Enumeration types as bit flags</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 06 Jun 2022 05:40:03 +0000</pubDate>
      <link>https://dev.to/nuriddin321/enumeration-types-as-bit-flags-5ab0</link>
      <guid>https://dev.to/nuriddin321/enumeration-types-as-bit-flags-5ab0</guid>
      <description>&lt;p&gt;Enumeration typelar kombinatsiyasini ifodalashini xohlasek, ushbu tanlovlar uchun enum a'zolarini belgilashimiz kere. Ya'ni, bu enum a'zolarining bog'langan qiymatlari ikkining vakolatlari bo'lishi kerak. Keyin, siz bitli mantiqiy operatorlardan foydalanishingiz mumkin &lt;code&gt;|&lt;/code&gt; yoki &lt;code&gt;&amp;amp;&lt;/code&gt; mos ravishda tanlovlarni birlashtirish yoki tanlovlar birikmalarini kesish uchun. Sanoq turi bit maydonlarini e'lon qilishini ko'rsatish uchun unga &lt;strong&gt;Flags&lt;/strong&gt; atributini qo'llang:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays &amp;amp; workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays &amp;amp; Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;yesli cho' &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/enum"&gt;Enumeration types as bit flags&lt;/a&gt; &lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Nondesructive mutation (buzib bo'lmaydigan mutatsiya )</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Sun, 05 Jun 2022 10:02:46 +0000</pubDate>
      <link>https://dev.to/nuriddin321/nondesructive-mutation-buzib-bolmaydigan-mutatsiya--59ep</link>
      <guid>https://dev.to/nuriddin321/nondesructive-mutation-buzib-bolmaydigan-mutatsiya--59ep</guid>
      <description>&lt;p&gt;C# 10 dan boshlab, struct va recordda &lt;code&gt;new&lt;/code&gt; kalit so'zini iwlatmasdan turib obyektyasash imkoniyati paydo bo'ldi. Bunda avval yasalgan obyektdan nusxa olib , agar xoxlasak uni property va fieldlarini o'zgartirib yangi obyekt yasashimiz mumkin. Buning uchun &lt;code&gt;with&lt;/code&gt; ifodasidan foydalanishimiz kerak. Quyidagi misolda ko'rsatilganidek, qaysi a'zolarni o'zgartirish va ularning yangi qiymatlarini belgilash uchun ob'ektni ishga tushirish sintaksisidan foydalanamiz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public record Point
{
    public string Name { get; init; }

    public int Age { get; init; }

    public Point(string name, int age)
    {
        Name = name;
        Age = age;   
    }

    public override string ToString() =&amp;gt; $" {Name} , {Age}";

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    public static void Main()
    { 
        var x1 = new Point("jeki", 22);
        Console.WriteLine(x1);

        var x2 = x1 with{Age = 12};
        Console.WriteLine(x2);

        var x3 = x2 with {Name = "ok",  Age = 33};
        Console.WriteLine(x3);

    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>"Property pattern"lar haqida...</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 07:45:20 +0000</pubDate>
      <link>https://dev.to/nuriddin321/property-patternlar-haqida-43mg</link>
      <guid>https://dev.to/nuriddin321/property-patternlar-haqida-43mg</guid>
      <description>&lt;p&gt;C# 8 dan boshlab ifodani property yoki fieldarini 'property pattern' orqali solishtirish mumkin bo'ldi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static bool IsConferenceDay(DateTime date) =&amp;gt; date is { Year: 2020, Month: 5, Day: 19 or 20 or 21 };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Property pattern - ifoda natijasi null bo'lmaganda ifodaga mos keladi va har bir ichki o'rnatilgan pattern ifoda natijasining tegishli xususiyati yoki maydoniga mos keladi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine(TakeFive("Hello, world!"));  // output: Hello
Console.WriteLine(TakeFive("Hi!"));  // output: Hi!
Console.WriteLine(TakeFive(new[] { '1', '2', '3', '4', '5', '6', '7' }));  // output: 12345
Console.WriteLine(TakeFive(new[] { 'a', 'b', 'c' }));  // output: abc

static string TakeFive(object input) =&amp;gt; input switch
{
    string { Length: &amp;gt;= 5 } s =&amp;gt; s.Substring(0, 5),
    string s =&amp;gt; s,

    ICollection&amp;lt;char&amp;gt; { Count: &amp;gt;= 5 } symbols =&amp;gt; new string(symbols.Take(5).ToArray()),
    ICollection&amp;lt;char&amp;gt; symbols =&amp;gt; new string(symbols.ToArray()),

    null =&amp;gt; throw new ArgumentNullException(nameof(input)),
    _ =&amp;gt; throw new ArgumentException("Not supported input type."),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Property pattern -  rekursiv patterndir. Ya'ni, har qanday patternni ichki pattern sifatida ishlatishingiz mumkin. Quyidagi misolda ko'rsatilganidek, ma'lumotlar qismlarini ichki o'rnatilgan patternlarga moslashtirish uchun property patterndan foydalanilgan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public record Point(int X, int Y);
public record Segment(Point Start, Point End);

static bool IsAnyEndOnXAxis(Segment segment) =&amp;gt;
    segment is { Start: { Y: 0 } } or { End: { Y: 0 } };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yuqoridagi misolda C# 9.0 va undan keyingi versiyalarida mavjud bo'lgan ikkita xususiyatdan foydalaniladi: &lt;code&gt;or&lt;/code&gt; &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns#logical-patterns"&gt;pattern combinator&lt;/a&gt; va &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record"&gt;record types&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;C# 10 dan boshlab, siz ichki xususiyatlar yoki maydonlarga to'gridan-to'g'ri murojaat qilishingiz mumkin. Masalan, oldingi misoldagi usulni quyidagi ekvivalent kodga qayta tiklashingiz mumkin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static bool IsAnyEndOnXAxis(Segment segment) =&amp;gt;
    segment is { Start.Y: 0 } or { End.Y: 0 };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usha gap uncha chunmagan bosela mamittan ko'rvorurasila &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/patterns#property-pattern"&gt;property pattern&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>C# da ifodalarni tekshirishning ustuvorligi va tartibi</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 06:46:49 +0000</pubDate>
      <link>https://dev.to/nuriddin321/c-da-ifodalarni-tekshirishning-ustuvorligi-va-tartibi-168m</link>
      <guid>https://dev.to/nuriddin321/c-da-ifodalarni-tekshirishning-ustuvorligi-va-tartibi-168m</guid>
      <description>&lt;p&gt;Quyidagi roʻyxatda pattern kombinatorlarinig ustuvorligi kamayib borish tartibida ko'rsatilgan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;not&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;and&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;or&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quyidagi misolda ko'rsatilganidek, ustuvorlikni aniq belgilash uchun qavslardan foydalanilgan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static bool IsLetter(char c) =&amp;gt; c is (&amp;gt;= 'a' and &amp;lt;= 'z') or (&amp;gt;= 'A' and &amp;lt;= 'Z');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Qo'shimcha malumot olish uchun &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/patterns3#pattern-combinators"&gt;pattern combinators&lt;/a&gt; bo'limiga qarang.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>"Logical pattern"lar haqida..</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 06:24:21 +0000</pubDate>
      <link>https://dev.to/nuriddin321/logical-patternlar-haqida-4of5</link>
      <guid>https://dev.to/nuriddin321/logical-patternlar-haqida-4of5</guid>
      <description>&lt;p&gt;C# 9.0 dan boshlab, biz quyidagi 'logical pattern'ni yozish uchun &lt;code&gt;not&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; , va &lt;code&gt;or&lt;/code&gt; pattern kombinatorlaridan foydalanamiz:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Negated(inkor) &lt;code&gt;not&lt;/code&gt; pattern :
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (input is not null)
{
    // ...
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Conjunctive &lt;code&gt;and&lt;/code&gt; pattern - ikkala qolip ham ifodaga mos kelganda ishlatiladi:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine(Classify(13));  // output: High
Console.WriteLine(Classify(-100));  // output: Too low
Console.WriteLine(Classify(5.7));  // output: Acceptable

static string Classify(double measurement) =&amp;gt; measurement switch
{
    &amp;lt; -40.0 =&amp;gt; "Too low",
    &amp;gt;= -40.0 and &amp;lt; 0 =&amp;gt; "Low",
    &amp;gt;= 0 and &amp;lt; 10.0 =&amp;gt; "Acceptable",
    &amp;gt;= 10.0 and &amp;lt; 20.0 =&amp;gt; "High",
    &amp;gt;= 20.0 =&amp;gt; "Too high",
    double.NaN =&amp;gt; "Unknown",
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disjunctive &lt;code&gt;or&lt;/code&gt; pattern - har qanday qolip ifodaga mos kelganda ishlatiladi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine(GetCalendarSeason(new DateTime(2021, 1, 19)));  // output: winter
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 10, 9)));  // output: autumn
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 5, 11)));  // output: spring

static string GetCalendarSeason(DateTime date) =&amp;gt; date.Month switch
{
    3 or 4 or 5 =&amp;gt; "spring",
    6 or 7 or 8 =&amp;gt; "summer",
    9 or 10 or 11 =&amp;gt; "autumn",
    12 or 1 or 2 =&amp;gt; "winter",
    _ =&amp;gt; throw new ArgumentOutOfRangeException(nameof(date), $"Date with unexpected month: {date.Month}."),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yuqoridagi misoldan ko'rinib turibdiki, siz pattern kombinatorlarini pattern ichida qayta-qayta ishlatishingiz mumkin.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>"Relational pattern"lar haqida...</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 05:09:41 +0000</pubDate>
      <link>https://dev.to/nuriddin321/relational-patternlar-haqida-10h8</link>
      <guid>https://dev.to/nuriddin321/relational-patternlar-haqida-10h8</guid>
      <description>&lt;p&gt;C# 9.0 dan boshlab, switchga parametr qilib berilgan qiymatni   aniq qiymatlar bilanmasde malum bir diapazondigi qiymatla bilan solishtiraish uchun relational patterndan foydalanamiz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine(Classify(13));  // output: Too high
Console.WriteLine(Classify(double.NaN));  // output: Unknown
Console.WriteLine(Classify(2.4));  // output: Acceptable

static string Classify(double measurement) =&amp;gt; measurement switch
{
    &amp;lt; -4.0 =&amp;gt; "Too low",
    &amp;gt; 10.0 =&amp;gt; "Too high",
    double.NaN =&amp;gt; "Unknown",
    _ =&amp;gt; "Acceptable",
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relational patterda siz &amp;lt;, &amp;gt;, &amp;lt;= yoki &amp;gt;= kabi solishtirish operatorlaridan foydalanishingiz mumkin. Relational patternning o'ng tomoni constant ifoda bo'lishi kerak.&lt;br&gt;
Constant qiymat int, float, char yoki enum tipidagi bo'lishi mumkin.&lt;/p&gt;

&lt;p&gt;Ifodaning natijasi ma'lum diapazonda ekanligini tekshirish uchun uni "conjunctive and pattern" bilan moslang :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine(GetCalendarSeason(new DateTime(2021, 3, 14)));  // output: spring
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 7, 19)));  // output: summer
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 2, 17)));  // output: winter

static string GetCalendarSeason(DateTime date) =&amp;gt; date.Month switch
{
    &amp;gt;= 3 and &amp;lt; 6 =&amp;gt; "spring",
    &amp;gt;= 6 and &amp;lt; 9 =&amp;gt; "summer",
    &amp;gt;= 9 and &amp;lt; 12 =&amp;gt; "autumn",
    12 or (&amp;gt;= 1 and &amp;lt; 3) =&amp;gt; "winter",
    _ =&amp;gt; throw new ArgumentOutOfRangeException(nameof(date), $"Date with unexpected month: {date.Month}."),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agar ifoda natijasi null bo'lsa yoki constant qiymatni nullable qiymatga convert qilish imkoni bo'lmasa relational pattern ifodaga mos kelmaydi. &lt;br&gt;
Qo'shimcha ma'lumot olish uchun &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/patterns3#relational-patterns"&gt;relational pattern&lt;/a&gt; bo'limiga qarang.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Constant pattern haqida...</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 04:34:45 +0000</pubDate>
      <link>https://dev.to/nuriddin321/constant-pattern-haqida-19f5</link>
      <guid>https://dev.to/nuriddin321/constant-pattern-haqida-19f5</guid>
      <description>&lt;p&gt;C# 7.0 dan boshlab, switchga parametr qilib berilgan qiymatni  belgilangan konstantaga teng yoki yo'qligini tekshirish uchun constant patterndan foydalanishimiz mumkinakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static decimal GetGroupTicketPrice(int visitorCount) =&amp;gt; visitorCount switch
{
    1 =&amp;gt; 12.0m,
    2 =&amp;gt; 20.0m,
    3 =&amp;gt; 27.0m,
    4 =&amp;gt; 32.0m,
    0 =&amp;gt; 0.0m,
    _ =&amp;gt; throw new ArgumentException($"Not supported number of visitors: {visitorCount}", nameof(visitorCount)),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Constant patternda switchga parametr qib berilgan qiymatni mamnaqa tipla bilan solishtirish mumkinakan anaqqisa 👇:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integer yoki floating-point sonlar&lt;/li&gt;
&lt;li&gt;Char yoki a string literal&lt;/li&gt;
&lt;li&gt;Boolean qiymat true yoki false&lt;/li&gt;
&lt;li&gt;Enum value&lt;/li&gt;
&lt;li&gt;e'lon qilingan const maydoni yoki mahalliy nomi&lt;/li&gt;
&lt;li&gt;null&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tepadigi misoldaka qilib ko'rsataman:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  public static decimal GetGroupTicketPrice(object visitorCount) =&amp;gt; visitorCount switch
    {
         1 =&amp;gt; 15.0m,         // int qiymat bilan solishtirvotti
        "string" =&amp;gt; 12.0m,   // string qiymat bilan solishtirvotti
        'a' =&amp;gt; 20.0m,        // char qiymat bilan solishtirvotti
        true =&amp;gt; 27.0m,       // bool qiymat bilan
        "enum" =&amp;gt; 32.0m,     // enum qiymat 
        null =&amp;gt; null,        // null bilan
        0 =&amp;gt; 0.0m,           // buyam int qiymat bn soliwtirvotti
        _ =&amp;gt; throw new ArgumentException($"Not supported number of visitors: {visitorCount}", nameof(visitorCount)),
    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Constant patterndan nullni tekshirishda ham foydalaniladi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (input is null)
{
    return;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;C# 9.0 dan boshlab, quyidagi misolda ko'rsatilgandaka, null bo'lmaganni tekshirish uchun negated null qilib tekwiriladi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (input is not null)
{
    // ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uncha chunmagan bo'sela mamyaqqa o'tib ko'rvosela bo'ladi &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/patterns#constant-pattern"&gt;constant pattern&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Declaration va type patternlar haqida...</title>
      <dc:creator>Nuriddin</dc:creator>
      <pubDate>Mon, 30 May 2022 02:02:45 +0000</pubDate>
      <link>https://dev.to/nuriddin321/declaration-va-type-patternlar-haqida-4lc4</link>
      <guid>https://dev.to/nuriddin321/declaration-va-type-patternlar-haqida-4lc4</guid>
      <description>&lt;p&gt;Biz ifodaning ish vaqti turi berilgan turga mos kelishini tekshirish uchun declaration va type patternlardan foydalanamiz.Deklaratsiya namunasi ifodaga mos kelganda, quyidagi misolda ko'rsatilganidek, bu o'zgaruvchiga aylantirilgan ifoda natijasi tayinlanadi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;object greeting = "Hello, World!";
if (greeting is string message)
{
    Console.WriteLine(message.ToLower());  // output: hello, world!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int? xNullable = 7;
int y = 23;
object yBoxed = y;
if (xNullable is int a &amp;amp;&amp;amp; yBoxed is int b)
{
    Console.WriteLine(a + b);  // output: 30
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agar biz faqat ifodani turini tekshirmoqchi bo'lsak, u holda o'zgaruvchi nomi o'rniga discard&lt;code&gt;_&lt;/code&gt; dan foydalanishimiz mumkin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public abstract class Vehicle {}
public class Car : Vehicle {}
public class Truck : Vehicle {}

public static class TollCalculator
{
    public static decimal CalculateToll(this Vehicle vehicle) =&amp;gt; vehicle switch
    {
        Car _ =&amp;gt; 2.00m,
        Truck _ =&amp;gt; 7.50m,
        null =&amp;gt; throw new ArgumentNullException(nameof(vehicle)),
        _ =&amp;gt; throw new ArgumentException("Unknown type of a vehicle", nameof(vehicle)),
    };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;C# 9.0 dan boshlab, bu maqsadda siz quyidagi misolda ko'rsatilganidek, Type patterndan foydalanishingiz mumkin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static decimal CalculateToll(this Vehicle vehicle) =&amp;gt; vehicle switch
{
    Car =&amp;gt; 2.00m,
    Truck =&amp;gt; 7.50m,
    null =&amp;gt; throw new ArgumentNullException(nameof(vehicle)),
    _ =&amp;gt; throw new ArgumentException("Unknown type of a vehicle", nameof(vehicle)),
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deklaratsiya namunasi kabi, type patternda ifoda natijasi null bo'lmaganda va uning ish vaqti turi yuqorida sanab o'tilgan shartlarning istalganiga javob berganda ifodaga mos keladi. Shuningdek, siz ushbu naqshni aniq, qisqacha null tekshiruvi uchun ishlatishingiz mumkin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (input is not null)
{
    Console.WriteLine(input);
} else
{
    throw new ArgumentNullException(paramName: nameof(input), message: "Input should not be null");
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Qo'shimcha ma'lumot olish uchun  &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/patterns#declaration-pattern"&gt;declaration pattern&lt;/a&gt; va &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/patterns3#type-patterns"&gt;type pattern&lt;/a&gt; bo'limlariga qarang.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
