<?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>Forem: Nodirbek-Abdulaxadov</title>
    <description>The latest articles on Forem by Nodirbek-Abdulaxadov (@nodirbekabdulaxadov).</description>
    <link>https://forem.com/nodirbekabdulaxadov</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%2F749698%2F1795f73d-c98f-407c-b41b-254342667091.jpeg</url>
      <title>Forem: Nodirbek-Abdulaxadov</title>
      <link>https://forem.com/nodirbekabdulaxadov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nodirbekabdulaxadov"/>
    <language>en</language>
    <item>
      <title>C# 14 nima yangiliklar?</title>
      <dc:creator>Nodirbek-Abdulaxadov</dc:creator>
      <pubDate>Thu, 13 Nov 2025 10:19:34 +0000</pubDate>
      <link>https://forem.com/nodirbekabdulaxadov/c-14-nima-yangiliklar-83k</link>
      <guid>https://forem.com/nodirbekabdulaxadov/c-14-nima-yangiliklar-83k</guid>
      <description>&lt;h2&gt;
  
  
  1) Extension members — extension property, static extension va hatto operatorlar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; Endi extension'lar faqat metod emas; property va hatto &lt;code&gt;static&lt;/code&gt; (turga tegishli) extension'larni ham e’lon qilish mumkin. Bundan tashqari, user-defined operatorlarni ham extension sifatida taqdim etish mumkin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Klaslarga yoki interface’larga tashqi paketlardan (utility) qulay "qo‘shimcha" funksionallik qo‘shish, original turlarni o‘zgartirmasdan kodni o‘qilishi yaxshilash mumkin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// extension block — instance receiver&lt;/span&gt;
&lt;span class="n"&gt;extension&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// extension property (o'qish uchun)&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsEmpty&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// extension method&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;WhereNot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Func&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;predicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// static extension members — turga tegishli&lt;/span&gt;
&lt;span class="n"&gt;extension&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Identity&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Enumerable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Empty&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="p"&gt;+(&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;TSource&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Qo‘llanishi:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsEmpty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// instance extension property&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;.&lt;/span&gt;&lt;span class="n"&gt;Identity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// static extension property&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;(Manba: extension members).&lt;/p&gt;




&lt;h2&gt;
  
  
  2) &lt;code&gt;field&lt;/code&gt;backed properties (field kontekst kalit so‘zi)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; Endi property ichidagi &lt;code&gt;field&lt;/code&gt; token yordamida explicit backing field yozmasdan &lt;code&gt;get&lt;/code&gt;/&lt;code&gt;set&lt;/code&gt; accessor'lariga body qo‘yish mumkin — kompilyator avtomatik backing field yaratadi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Kodni qisqartiradi va &lt;code&gt;null&lt;/code&gt; tekshiruvchi logikani property ichida soddalashtirish imkonini beradi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol — eski usul:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;_msg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_msg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;set&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentNullException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;_msg&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C# 14 bilan (field backed):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentNullException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Eslatma:&lt;/strong&gt; Agar sizning type’ingizda &lt;code&gt;field&lt;/code&gt; nomli boshqa identifikator bo‘lsa, &lt;code&gt;@field&lt;/code&gt; yoki &lt;code&gt;this.field&lt;/code&gt; orqali chalkashlik oldini olish kerak.&lt;/p&gt;




&lt;h2&gt;
  
  
  3) Null-conditional assignment (&lt;code&gt;?.&lt;/code&gt; assignment)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; &lt;code&gt;?.&lt;/code&gt; (null-conditional access) endi assignment va compound assignment (masalan &lt;code&gt;+=&lt;/code&gt;) turgan joylarda ham ishlaydi — lekin &lt;code&gt;++/--&lt;/code&gt; kabi increment/decrement ruxsat etilmaydi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Oldingi kabi &lt;code&gt;if (obj != null) obj.Prop = ...;&lt;/code&gt; deb tekshirish shart emas — kod ixcham va xavfsizroq bo‘ladi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// oldingi usul&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetCurrentOrder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// C# 14&lt;/span&gt;
&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetCurrentOrder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Compound assignment:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;Score&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// agar user null bo'lsa, o'ng taraf bahosi hisoblanmaydi&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;(Ammo &lt;code&gt;user?.Count++&lt;/code&gt; kabi incrementlar ruxsat etilmaydi).&lt;/p&gt;




&lt;h2&gt;
  
  
  4) &lt;code&gt;nameof&lt;/code&gt; bilan ochilmagan (unbound) generic turlar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; &lt;code&gt;nameof&lt;/code&gt; funksiyasiga endi unbound generic (masalan &lt;code&gt;List&amp;lt;&amp;gt;&lt;/code&gt;) ham berish mumkin — natija tur nomi bo‘ladi (&lt;code&gt;"List"&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&amp;gt;));&lt;/span&gt; &lt;span class="c1"&gt;// chiqaradi: List&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Bu logging, exception yoki reflection yordamida nom olish operatsiyalarini soddalashtiradi.&lt;/p&gt;




&lt;h2&gt;
  
  
  5) First-class Span va ReadOnlySpan — qo‘shimcha implicit conversion'lar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; &lt;code&gt;Span&amp;lt;T&amp;gt;&lt;/code&gt; va &lt;code&gt;ReadOnlySpan&amp;lt;T&amp;gt;&lt;/code&gt; uchun til darajasida ko‘proq implicit conversion'lar qo‘shildi: ular &lt;code&gt;T[]&lt;/code&gt; bilan ko‘proq holatlarda o‘zaro ishlashi mumkin, generik tip inferensiyasi soddalashadi, extension method receiver sifatida ishlatilishi yaxshilandi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; &lt;code&gt;Span&lt;/code&gt; yordamida "stack-based" yoki memory-safe high-performance kod yozish qulayroq; .NET’dagi string/byte[] manipulyatsiyalarida yangi konversiyalar kodni soddalashtiradi va ortiqcha kopi qilishni kamaytiradi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oddiy misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ProcessSpan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Span&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nf"&gt;ProcessSpan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// oldin explicit .AsSpan() kerak bo'lar edi; endi ko'proq holatda ishlashi mumkin&lt;/span&gt;

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

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Tayyorlik: Span bilan ishlaganda e’tibor — ularni uzun muddatli saqlash (field) qilmaslik; ular stack yoki scope bilan bog‘liq bo‘lishi mumkin.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6) Lambda parametrlarida modifikatorlarni type yozmasdan ishlatish
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; Endi lambda parametrlari uchun &lt;code&gt;ref&lt;/code&gt;, &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;out&lt;/code&gt;, &lt;code&gt;scoped&lt;/code&gt;, &lt;code&gt;ref readonly&lt;/code&gt; kabi modifikatorlarni &lt;strong&gt;tipni qaytarmasdan&lt;/strong&gt; yozish mumkin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Lambda’larni qisqartiradi, ayniqsa &lt;code&gt;ref&lt;/code&gt; yoki &lt;code&gt;out&lt;/code&gt; bilan ishlaganda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;delegate&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;parse&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// C# 14: type yozmasdan modifier bilan&lt;/span&gt;
&lt;span class="n"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;parse2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// yoki ref example&lt;/span&gt;
&lt;span class="nf"&gt;ActionRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// misol uchun&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;(Params modifier hali ham tip talab qiladi).&lt;/p&gt;




&lt;h2&gt;
  
  
  7) Partial constructors va partial events
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; Konstruktorlar va event’larni &lt;code&gt;partial&lt;/code&gt; deb e’lon qilish mumkin — ya’ni bir deklaratsiya «defining» bo‘lib, ikkinchisi «implementing» bo‘ladi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Katta kodbazalarda generatorlar yoki source-generator lar bilan ishlaganda, bir qismi avtomatik yaratiladigan konstruktor/event implementatsiyalarini bo‘lish imkonini beradi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qoidalar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Har bir partial constructor/event uchun &lt;strong&gt;aniq bitta&lt;/strong&gt; defining va bitta implementing deklaratsiya bo‘lishi kerak.&lt;/li&gt;
&lt;li&gt;Faol (implementing) konstruktor faqat &lt;code&gt;this()&lt;/code&gt; yoki &lt;code&gt;base()&lt;/code&gt; initializer qo‘sha oladi.&lt;/li&gt;
&lt;li&gt;Implementing event add/remove accessor’larini o‘z ichiga oladi; defining esa field-like event bo‘ladi.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8) User-defined compound assignment operators
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nima o‘zgardi:&lt;/strong&gt; Endi siz &lt;code&gt;+=&lt;/code&gt;, &lt;code&gt;-=&lt;/code&gt;, &lt;code&gt;*=&lt;/code&gt; kabi compound assignment operator’larini o‘zingiz aniqlay olasiz (til darajasida qo‘llab-quvvatlanadi).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nega foydali:&lt;/strong&gt; Turli matematik yoki domen-specific tiplarda to‘g‘ri semantic bilan compound operatorlarni qo‘llash mumkin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Misol:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;MyVector&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MyVector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="p"&gt;+(&lt;/span&gt;&lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// compound assignment (foydalanuvchi aniqlovchi)&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="k"&gt;operator&lt;/span&gt; &lt;span class="p"&gt;+=(&lt;/span&gt;&lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyVector&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Shunday qilib &lt;code&gt;v1 += v2;&lt;/code&gt; ishlaganda aniq qanday bajarilishi belgilangan bo‘ladi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qanday holatlarda yangi feature’dan foydalanish tavsiya etiladi?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extension members:&lt;/strong&gt; Agar siz utility kutubxonada ko‘p ishlatiladigan property yoki static yordamchi funksiyalarni joylashtirmoqchi bo‘lsangiz.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field-backed properties:&lt;/strong&gt; Property ichida oddiy validatsiya yoki logging qo‘yish uchun — kodni ancha qisqartiradi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Null-conditional assignment:&lt;/strong&gt; Nullable obyektlarga safe assignment yozishni ixchamlashtirish uchun.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Span conversion:&lt;/strong&gt; Performance-sensitive kodlarda (parsing, buffer manipulation) foydalaning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda modifiers:&lt;/strong&gt; Ref/in/out kerak bo‘lgan yuqori-performans kodlarda yoki existing delegate’lar bilan moslashish uchun.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partial constructors/events va user-defined compound assignment:&lt;/strong&gt; Asosan kutubxona muhandislari, source-generatorlar yoki domen modeling holatlarida.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Xulosa
&lt;/h2&gt;

&lt;p&gt;C# 14 — tilni &lt;strong&gt;yanada ixcham&lt;/strong&gt;, &lt;strong&gt;o‘qilishi qulay&lt;/strong&gt;, va &lt;strong&gt;performance-friendly&lt;/strong&gt; qilishga qaratilgan o‘zgarishlarni olib keladi. Agar loyihangiz .NET 10’ga o‘tgan bo‘lsa, yangi imkoniyatlardan sekin-asta foydalanib, kodni soddalashtirish va xatoni kamaytirish mumkin. Batafsil rasmiy tavsif va feature specification uchun &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-14" rel="noopener noreferrer"&gt;Microsoft sahifasiga&lt;/a&gt; murojaat qilishingiz mumkin.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>news</category>
    </item>
    <item>
      <title>YARP</title>
      <dc:creator>Nodirbek-Abdulaxadov</dc:creator>
      <pubDate>Thu, 13 Nov 2025 10:17:31 +0000</pubDate>
      <link>https://forem.com/nodirbekabdulaxadov/yarp-4518</link>
      <guid>https://forem.com/nodirbekabdulaxadov/yarp-4518</guid>
      <description>&lt;h3&gt;
  
  
  YARP haqida: Dynamic Reverse Proxy haqida tushuncha
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;YARP (Yet Another Reverse Proxy)&lt;/strong&gt; — bu Microsoft tomonidan ishlab chiqilgan va .NET asosida yaratilgan yuqori samarali, moslashuvchan va kengaytiriladigan &lt;strong&gt;reverse proxy&lt;/strong&gt; vositasi. Ushbu loyiha ochiq manba (open-source) bo‘lib, GitHub'da mavjud va .NET ilovalari uchun maxsus ishlab chiqilgan.&lt;/p&gt;

&lt;h4&gt;
  
  
  YARP nima?
&lt;/h4&gt;

&lt;p&gt;YARP (Yet Another Reverse Proxy) – bu foydalanuvchi so‘rovlarini orqa (backend) serverlarga yo‘naltiruvchi vosita. Reverse proxy sifatida YARP quyidagi vazifalarni bajaradi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So‘rovlarni boshqarish va filtrlash&lt;/li&gt;
&lt;li&gt;Trafikni yuk bo‘yicha balanslash&lt;/li&gt;
&lt;li&gt;Backend serverlar o‘rtasida ma’lumotlarni yo‘naltirish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu dastur asosan mikroxizmatlar, API gatewaylar yoki boshqa turdagi ko‘p serverli infratuzilma uchun mos keladi.&lt;/p&gt;

&lt;h4&gt;
  
  
  YARP'ning asosiy afzalliklari
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Moslashuvchanlik&lt;/strong&gt;&lt;br&gt;
YARP to‘liq sozlanadigan qilib yaratilgan. Siz so‘rovlarni boshqarish, marshrutlash va ma’lumotlarni qayta ishlash jarayonini o‘z ehtiyojlaringizga moslashtirishingiz mumkin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;.NET asosida ishlashi&lt;/strong&gt;&lt;br&gt;
YARP .NET platformasi yordamida ishlab chiqilganligi sababli, uni o‘rnatish va sozlashda C# yoki boshqa .NET tillaridan foydalanish oson. Bu, ayniqsa, .NET ishlab chiquvchilari uchun katta qulaylikdir.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Balanslash&lt;/strong&gt;&lt;br&gt;
YARP trafikni yuk bo‘yicha balanslash funksiyasiga ega. Bu esa backend serverlaringiz o‘rtasida resurslarni teng taqsimlashni ta’minlaydi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kengaytiriluvchanlik&lt;/strong&gt;&lt;br&gt;
YARP ochiq kodli bo‘lganligi sababli, uni kengaytirish oson. Siz yangi funksiyalar qo‘shishingiz yoki mavjudlarini o‘zgartirishingiz mumkin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic konfiguratsiya&lt;/strong&gt;&lt;br&gt;
YARP konfiguratsiyani dinamik ravishda o‘zgartirishni qo‘llab-quvvatlaydi. Masalan, siz backend serverlarni qo‘lda qayta ishga tushirmasdan, ularga yangi marshrutlar qo‘shishingiz mumkin.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  YARP qanday ishlaydi?
&lt;/h4&gt;

&lt;p&gt;YARP foydalanuvchidan kelgan HTTP yoki HTTPS so‘rovlarini qabul qiladi va ularni mos backend serverga yo‘naltiradi. Quyidagi jarayon asosida ishlaydi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Marshrutlash (Routing):&lt;/strong&gt; So‘rovni backend serverga qanday yo‘naltirishni aniqlaydi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qoida va Filtrlash:&lt;/strong&gt; Qoida va filtrlar asosida so‘rovlarni boshqaradi. Masalan, IP-manzillarni bloklash yoki maxsus autentifikatsiya talab qilish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balanslash:&lt;/strong&gt; So‘rovni backend serverlar o‘rtasida taqsimlaydi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ma’lumotni qayta ishlash:&lt;/strong&gt; Javobni foydalanuvchiga yuborishdan oldin uni qayta ishlaydi.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  YARP'ni o‘rnatish va sozlash
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Loyihani yaratish&lt;/strong&gt;
.NET Web API yoki ASP.NET Core loyihasini yarating:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   dotnet new web &lt;span class="nt"&gt;-n&lt;/span&gt; YarpExample
   &lt;span class="nb"&gt;cd &lt;/span&gt;YarpExample
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;YARP paketini o‘rnatish&lt;/strong&gt;
NuGet yordamida YARP paketini o‘rnating:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   dotnet add package Microsoft.ReverseProxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Konfiguratsiya&lt;/strong&gt;
&lt;code&gt;appsettings.json&lt;/code&gt; faylida marshrutlarni va backend serverlarni aniqlang:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"ReverseProxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"Routes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"route1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"ClusterId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cluster1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"Match"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"Path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/api/{**catch-all}"&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="nl"&gt;"Clusters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"cluster1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="nl"&gt;"Destinations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"destination1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
               &lt;/span&gt;&lt;span class="nl"&gt;"Address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://backend-server.com/"&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Middleware qo‘shish&lt;/strong&gt;
&lt;code&gt;Program.cs&lt;/code&gt; yoki &lt;code&gt;Startup.cs&lt;/code&gt; faylida YARP'ni sozlang:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;   &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Builder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Extensions.DependencyInjection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddReverseProxy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
       &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LoadFromConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetSection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ReverseProxy"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

   &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapReverseProxy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Loyihani ishga tushirish&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Endi sizning loyihangiz YARP yordamida backend serverlarga so‘rovlarni yo‘naltiradi.&lt;/p&gt;

&lt;h4&gt;
  
  
  YARP qachon ishlatiladi?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mikroxizmatlar:&lt;/strong&gt; Ko‘p backend xizmatlarini boshqarish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway:&lt;/strong&gt; Tashqi ilovalar uchun yagona kirish nuqtasi sifatida ishlatish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trafikni boshqarish:&lt;/strong&gt; So‘rovlarni yuk bo‘yicha balanslash yoki IP-manzillarni boshqarish.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Xulosa
&lt;/h4&gt;

&lt;p&gt;YARP — bu .NET ishlab chiquvchilari uchun qulay, kuchli va moslashuvchan reverse proxy vositasi. Uning kengaytiriluvchanligi va dinamik konfiguratsiya imkoniyatlari mikroxizmatlar va murakkab infratuzilmalarni boshqarishda muhim rol o‘ynaydi. Agar siz .NET bilan ishlayotgan bo‘lsangiz, YARP sizga yuqori samaradorlik va boshqaruvni taqdim etadi.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>microsoft</category>
      <category>microservices</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Decode JWT Token easily using _jwt-decode_</title>
      <dc:creator>Nodirbek-Abdulaxadov</dc:creator>
      <pubDate>Sat, 13 Apr 2024 11:04:59 +0000</pubDate>
      <link>https://forem.com/nodirbekabdulaxadov/decode-jwt-token-easily-using-jwt-decode-29gi</link>
      <guid>https://forem.com/nodirbekabdulaxadov/decode-jwt-token-easily-using-jwt-decode-29gi</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Install with NPM or Yarn
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install jwt-decode
//or
yarn add jwt-decode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Import package:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { jwtDecode } from "jwt-decode";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Usage
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const token = "eyJ0eXAiO.../// jwt token";
// Returns with the JwtPayload type or any type
// const decodedJwt = jwtDecode&amp;lt;JwtPayload&amp;gt;(token);
const decodedJwt: any = jwtDecode(token);

//example print expiration date
console.log(decodedJwt.exp);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>jwt</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
