<?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: Farkhodbek Kamolov</title>
    <description>The latest articles on DEV Community by Farkhodbek Kamolov (@farkhadk).</description>
    <link>https://dev.to/farkhadk</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%2F1320604%2Fa44a65e5-1172-435d-a53d-483f3b08e4bc.jpeg</url>
      <title>DEV Community: Farkhodbek Kamolov</title>
      <link>https://dev.to/farkhadk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/farkhadk"/>
    <language>en</language>
    <item>
      <title>Natural type of Method group</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Thu, 30 May 2024 05:30:38 +0000</pubDate>
      <link>https://dev.to/farkhadk/natural-type-of-method-group-4kp0</link>
      <guid>https://dev.to/farkhadk/natural-type-of-method-group-4kp0</guid>
      <description>&lt;p&gt;Method group haqida qisqacha: &lt;br&gt;
Method group - bu bir xil nomga ega, ammo &lt;u&gt;parametrlari va qaytish turlari&lt;/u&gt;(qisqacha sintaksis) bo'yicha farq qilishi mumkin bo'lgan funksiyalar to'plami. Method grouplar odatda delegatlar, hodisalar(event) va LINQ ifodalari bilan bog'liq vaziyatlarda qo'llaniladi. Batafsil malumot -&amp;gt; &lt;a href="https://dev.to/farkhadk/c-dagi-method-overload-va-method-group-3p7k"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;C# tilidagi method group &lt;em&gt;natural type&lt;/em&gt;(tabiy turi) kompilyator tomonidan  guruh ichidagi methodlar sintaksiga mos keladigan delegat turiga ishora qiladi. C#-dagi &lt;em&gt;natural type&lt;/em&gt; method guruhlarini ishlatish jarayonini soddalashtiradi, delegatlarni talab qiladigan kontekstlarda metod guruhlarini to'g'ridan-to'g'ri va yashirin foydalanishga imkon berish orqali kodni o'qish va samaradorlikni oshiradi. Bu, ayniqsa, LINQ so'rovlari va hodisa(event)larni boshqarish bilan bog'liq stsenariylarda foydalidir. Qisqa qilib aytganda &lt;em&gt;natural type&lt;/em&gt;(tabiy tur) kompilyator tomonidan yashirincha delegatga o'giriladi, delegatlar esa o'z vaqtida, o'zining shartlarini qoniqtirgan funksiyani overloadini method groupdan tanlab oladi. Yaniy bu feature(natural type) delegatlarni ochiqchasiga(explecitly) yaratishga xojat qoldirmaydi, kontekstga qarab kompilyator o'zi yaratadi.&lt;/p&gt;

&lt;p&gt;Delegatlar qanday ishlashini tushunish uchun kichik bir misol:&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;Action&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;writeLineString&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;writeLineString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; Hello, World!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Birinchi qatorda &lt;code&gt;writeLineString&lt;/code&gt; &lt;em&gt;delegati&lt;/em&gt; yaratildi, va unga &lt;code&gt;WriteLine&lt;/code&gt; method group o'zlashtirdi. Keyingi qatorda &lt;code&gt;writeLineString&lt;/code&gt; delegatiga &lt;code&gt;string&lt;/code&gt; malumot tipni argument sifatida joylandi, chunki bizning(kontekstda) delegatni sharti, faqat string qabul qiladigon funksiyalarni talab qiladi(&lt;code&gt;Action&amp;lt;string&amp;gt;&lt;/code&gt;). Kompilyatorni o'zi delegatdan foydalanib, &lt;code&gt;WriteLine&lt;/code&gt; guruhidan kerakli overloadni topib ishga tushiradi. Qisqacha delegatlar qanday ishlashi haqidaham tushib oldik&lt;/p&gt;

&lt;p&gt;Endi esa C# da natural type tushunchasi kirib kelamagunicha bolgan holat:&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;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&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="kt"&gt;int&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;isEvendelegate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IsEven&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;evenNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&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;isEvendelegate&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;Action&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;writeLineInt&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&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="s"&gt;"Even numbers:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;foreach&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;num&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;evenNumbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;writeLineInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsEven&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;number&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;number&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Even numbers:
2
4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Func&amp;lt;int, bool&amp;gt;&lt;/code&gt; xuddi &lt;code&gt;Action&amp;lt;string&amp;gt;&lt;/code&gt; kabi ishlaydi, lekin biroz farq qiladi. Func T1 delegatimizga o'zlashtiriladigon method groupga keladigon argument tipi, T2 esa shu methodimiz qaytaradigon malumot turi. &lt;code&gt;Action&amp;lt;T&amp;gt;&lt;/code&gt; esa harqanday &lt;code&gt;void&lt;/code&gt; qaytaradigon lekin &lt;code&gt;T&lt;/code&gt; qabul qiladigon method guruhlar uchun ishlatiladi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kodda ko'rganimizdek numbers array bor(1dan 5gacha qiymatlari bilan), &lt;code&gt;isEvenDelegati&lt;/code&gt; vakili(delegati) &lt;code&gt;int&lt;/code&gt; type qabul qiluvchi va &lt;code&gt;bool&lt;/code&gt; qaytarubchi method groupni qabul qiladi, bu shartni esa &lt;code&gt;IsEven&lt;/code&gt; methodi qiniqtiradi, shung uchun ushbu metodni delegatimizga o'zlashtirdik. Keyingi qatorda &lt;em&gt;LINQ&lt;/em&gt; funksiyalaridan bolmish &lt;code&gt;Where()&lt;/code&gt; metodini delegatimiz unga argument qilib chaqirdik, bu metod esa faqatgina &lt;em&gt;juft&lt;/em&gt; sonlardan tashkil topgan arrayni &lt;code&gt;evenNumbers&lt;/code&gt; o'zgaruvchisiga o'zlashtirdi. Etibor qilgan bolsangiz birinchi misolimizdan ozgina farq qiladigon ko'dniham ishlatdik.&lt;/p&gt;

&lt;p&gt;Endi esa huddi o'sha kodni faqat natural type bilan modify qilamiz:&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;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&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;evenNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&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;IsEven&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&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="s"&gt;"Even numbers:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;evenNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ForEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsEven&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;number&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;number&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Even numbers:
2
4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ushbu misolimizda ko'rishingiz mumkin hechqanday &lt;code&gt;Func&amp;lt;T1,T2&amp;gt;&lt;/code&gt; yoki &lt;code&gt;Action&amp;lt;T&amp;gt;&lt;/code&gt; delegatlari yoq. Delegatlarni o'rniga tog'ridan to'g'ri method groupni ishlatdik, va natija esa birxil. Yana bir etibor qilishimiz kerak bolgan joyi, &lt;code&gt;Where()&lt;/code&gt; funksiyasi bu safar &lt;code&gt;ToList()&lt;/code&gt; qaytardi, bunday qilishga sabab, &lt;code&gt;ForEach()&lt;/code&gt; metodi faqat list uchun ishlaydi, va bu funksiyaga &lt;code&gt;Console.WriteLine&lt;/code&gt; method groupini delegat ishlatmasdan yubordik. &lt;/p&gt;

&lt;p&gt;Aslida bu funksianal "&lt;em&gt;natural type&lt;/em&gt;" C# da ~ 10 versiyadan beri bor, lekin o'sha damlardan beri bu optimal emas edi, yaniy kompilyator har bir methodga alohida qarab chiqar edi, hatto bazi funksiyala ochiqchasiga delegat shartini qoniqtirmasaham(boshqa tiplar qabul qilsaham, ko'proq yoki ozroq argumentlar soni bolsaham).&lt;br&gt;
C# 13 da &lt;em&gt;natural typeni&lt;/em&gt; ishlash prinsipini to'g'irlandi, endi kompilyator *scope ichidagi tog'ri kelmagan methodlarni tashlab yuboradi.&lt;br&gt;
Agar methodlar generic bolsa yoki yetlicha/ortiqcha argumentlar soni. Agar kerakli method ushbu scopeda topilmasa, qidiruv kelgusi scope ga o'tadi, taqdim etilgan scopelardan birontasida kerakli shartni qoniqtira oladigon methodni topa olmasa, method group natural type-ga ega emas deb hisoblanadi, va compile-time error otadi. Oddiy qilib aytganda, kompilyator endi barcha mumkin bo'lgan methodlarni oldindan ko'rib chiqish o'rniga, har bir scope-ni tekshirganda, qo'llanilmaydigan/keraksiz methodlarni darhol chiqarib tashlash orqali method guruhidan qaysi overloaddan foydalanishni samaraliroq aniqlaydi. Bu esa o'z vaqtida jarayonni tezlashtiradi.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;scope&lt;/em&gt; deb methodlar implement qilinga kontekstni class, import qilingan namespace larni nazarda tudadi.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>csharp</category>
      <category>news</category>
      <category>features</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Natural type of Method group</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Thu, 30 May 2024 05:30:38 +0000</pubDate>
      <link>https://dev.to/farkhadk/natural-type-of-method-group-min</link>
      <guid>https://dev.to/farkhadk/natural-type-of-method-group-min</guid>
      <description>&lt;p&gt;Method group haqida qisqacha: &lt;br&gt;
Method group - bu bir xil nomga ega, ammo &lt;u&gt;parametrlari va qaytish turlari&lt;/u&gt;(qisqacha sintaksis) bo'yicha farq qilishi mumkin bo'lgan funksiyalar to'plami. Method grouplar odatda delegatlar, hodisalar(event) va LINQ ifodalari bilan bog'liq vaziyatlarda qo'llaniladi. Batafsil malumot -&amp;gt; &lt;a href="https://dev.to/farkhadk/c-dagi-method-overload-va-method-group-3p7k"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;C# tilidagi method group &lt;em&gt;natural type&lt;/em&gt;(tabiy turi) kompilyator tomonidan  guruh ichidagi methodlar sintaksiga mos keladigan delegat turiga ishora qiladi. C#-dagi &lt;em&gt;natural type&lt;/em&gt; method guruhlarini ishlatish jarayonini soddalashtiradi, delegatlarni talab qiladigan kontekstlarda metod guruhlarini to'g'ridan-to'g'ri va yashirin foydalanishga imkon berish orqali kodni o'qish va samaradorlikni oshiradi. Bu, ayniqsa, LINQ so'rovlari va hodisa(event)larni boshqarish bilan bog'liq stsenariylarda foydalidir. Qisqa qilib aytganda &lt;em&gt;natural type&lt;/em&gt;(tabiy tur) kompilyator tomonidan yashirincha delegatga o'giriladi, delegatlar esa o'z vaqtida, o'zining shartlarini qoniqtirgan funksiyani overloadini method groupdan tanlab oladi. Yaniy bu feature(natural type) delegatlarni ochiqchasiga(explecitly) yaratishga xojat qoldirmaydi, kontekstga qarab kompilyator o'zi yaratadi.&lt;/p&gt;

&lt;p&gt;Delegatlar qanday ishlashini tushunish uchun kichik bir misol:&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;Action&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;writeLineString&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;writeLineString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; Hello, World!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Birinchi qatorda &lt;code&gt;writeLineString&lt;/code&gt; &lt;em&gt;delegati&lt;/em&gt; yaratildi, va unga &lt;code&gt;WriteLine&lt;/code&gt; method group o'zlashtirdi. Keyingi qatorda &lt;code&gt;writeLineString&lt;/code&gt; delegatiga &lt;code&gt;string&lt;/code&gt; malumot tipni argument sifatida joylandi, chunki bizning(kontekstda) delegatni sharti, faqat string qabul qiladigon funksiyalarni talab qiladi(&lt;code&gt;Action&amp;lt;string&amp;gt;&lt;/code&gt;). Kompilyatorni o'zi delegatdan foydalanib, &lt;code&gt;WriteLine&lt;/code&gt; guruhidan kerakli overloadni topib ishga tushiradi. Qisqacha delegatlar qanday ishlashi haqidaham tushib oldik&lt;/p&gt;

&lt;p&gt;Endi esa C# da natural type tushunchasi kirib kelamagunicha bolgan holat:&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;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&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="kt"&gt;int&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;isEvendelegate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IsEven&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;evenNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&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;isEvendelegate&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;Action&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;writeLineInt&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&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="s"&gt;"Even numbers:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;foreach&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;num&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;evenNumbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;writeLineInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsEven&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;number&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;number&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Even numbers:
2
4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Func&amp;lt;int, bool&amp;gt;&lt;/code&gt; xuddi &lt;code&gt;Action&amp;lt;string&amp;gt;&lt;/code&gt; kabi ishlaydi, lekin biroz farq qiladi. Func T1 delegatimizga o'zlashtiriladigon method groupga keladigon argument tipi, T2 esa shu methodimiz qaytaradigon malumot turi. &lt;code&gt;Action&amp;lt;T&amp;gt;&lt;/code&gt; esa harqanday &lt;code&gt;void&lt;/code&gt; qaytaradigon lekin &lt;code&gt;T&lt;/code&gt; qabul qiladigon method guruhlar uchun ishlatiladi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kodda ko'rganimizdek numbers array bor(1dan 5gacha qiymatlari bilan), &lt;code&gt;isEvenDelegati&lt;/code&gt; vakili(delegati) &lt;code&gt;int&lt;/code&gt; type qabul qiluvchi va &lt;code&gt;bool&lt;/code&gt; qaytarubchi method groupni qabul qiladi, bu shartni esa &lt;code&gt;IsEven&lt;/code&gt; methodi qiniqtiradi, shung uchun ushbu metodni delegatimizga o'zlashtirdik. Keyingi qatorda &lt;em&gt;LINQ&lt;/em&gt; funksiyalaridan bolmish &lt;code&gt;Where()&lt;/code&gt; metodini delegatimiz unga argument qilib chaqirdik, bu metod esa faqatgina &lt;em&gt;juft&lt;/em&gt; sonlardan tashkil topgan arrayni &lt;code&gt;evenNumbers&lt;/code&gt; o'zgaruvchisiga o'zlashtirdi. Etibor qilgan bolsangiz birinchi misolimizdan ozgina farq qiladigon ko'dniham ishlatdik.&lt;/p&gt;

&lt;p&gt;Endi esa huddi o'sha kodni faqat natural type bilan modify qilamiz:&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;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&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;evenNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&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;IsEven&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&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="s"&gt;"Even numbers:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;evenNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ForEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsEven&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;number&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;number&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Even numbers:
2
4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ushbu misolimizda ko'rishingiz mumkin hechqanday &lt;code&gt;Func&amp;lt;T1,T2&amp;gt;&lt;/code&gt; yoki &lt;code&gt;Action&amp;lt;T&amp;gt;&lt;/code&gt; delegatlari yoq. Delegatlarni o'rniga tog'ridan to'g'ri method groupni ishlatdik, va natija esa birxil. Yana bir etibor qilishimiz kerak bolgan joyi, &lt;code&gt;Where()&lt;/code&gt; funksiyasi bu safar &lt;code&gt;ToList()&lt;/code&gt; qaytardi, bunday qilishga sabab, &lt;code&gt;ForEach()&lt;/code&gt; metodi faqat list uchun ishlaydi, va bu funksiyaga &lt;code&gt;Console.WriteLine&lt;/code&gt; method groupini delegat ishlatmasdan yubordik. &lt;/p&gt;

&lt;p&gt;Aslida bu funksianal "&lt;em&gt;natural type&lt;/em&gt;" C# da ~ 10 versiyadan beri bor, lekin o'sha damlardan beri bu optimal emas edi, yaniy kompilyator har bir methodga alohida qarab chiqar edi, hatto bazi funksiyala ochiqchasiga delegat shartini qoniqtirmasaham(boshqa tiplar qabul qilsaham, ko'proq yoki ozroq argumentlar soni bolsaham).&lt;br&gt;
C# 13 da &lt;em&gt;natural typeni&lt;/em&gt; ishlash prinsipini to'g'irlandi, endi kompilyator *scope ichidagi tog'ri kelmagan methodlarni tashlab yuboradi.&lt;br&gt;
Agar methodlar generic bolsa yoki yetlicha/ortiqcha argumentlar soni. Agar kerakli method ushbu scopeda topilmasa, qidiruv kelgusi scope ga o'tadi, taqdim etilgan scopelardan birontasida kerakli shartni qoniqtira oladigon methodni topa olmasa, method group natural type-ga ega emas deb hisoblanadi, va compile-time error otadi. Oddiy qilib aytganda, kompilyator endi barcha mumkin bo'lgan methodlarni oldindan ko'rib chiqish o'rniga, har bir scope-ni tekshirganda, qo'llanilmaydigan/keraksiz methodlarni darhol chiqarib tashlash orqali method guruhidan qaysi overloaddan foydalanishni samaraliroq aniqlaydi. Bu esa o'z vaqtida jarayonni tezlashtiradi.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;scope&lt;/em&gt; deb methodlar implement qilinga kontekstni class, import qilingan namespace larni nazarda tudadi.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>csharp</category>
      <category>news</category>
      <category>features</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>C# dagi Method overload va Method group.</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Thu, 30 May 2024 00:51:59 +0000</pubDate>
      <link>https://dev.to/farkhadk/c-dagi-method-overload-va-method-group-3p7k</link>
      <guid>https://dev.to/farkhadk/c-dagi-method-overload-va-method-group-3p7k</guid>
      <description>&lt;p&gt;Method group va Method overload tushunchalarni farqlash uchun &lt;code&gt;event&lt;/code&gt;, &lt;code&gt;delegate&lt;/code&gt; yoki &lt;code&gt;LINQ&lt;/code&gt;, shulardan hech bolmaganda kamida bir donasini bilish tavsiya qilinadi. Bu feature(xususiyat)lar, dasturchilarga bir vaqtning o'zida bir xil &lt;strong&gt;nomli&lt;/strong&gt; birnechta methodlarni yaratishga imkon beradi. Ushbu o'xshash nomli methodlarni bir biridan farqi, ular &lt;strong&gt;qaytaradigon&lt;/strong&gt; malumot tiplari hamda &lt;strong&gt;qabul qiluvchi&lt;/strong&gt; argumentlar soni bir-biridan farq qilishidadur. Qishqacha qilib aytganda birxil ish bacharuvchi methodlarni bir &lt;strong&gt;nom&lt;/strong&gt; ostida jamlash uchun ishlatilinadi.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: bu ikkala feature/tushuncha bir-biriga uzviy bog'liq!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Misol tariqasida Add() methodini yaratamiz:&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;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;Add&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;a&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;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="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;long&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="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;double&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="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&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="p"&gt;{&lt;/span&gt;
   &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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="n"&gt;j&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2&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;sumOfInt&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&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="s"&gt;$"Intlar summasi: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sumOfInt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

   &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;20&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;sumOfLong&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&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="s"&gt;$"Longlar summasi: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sumOfLong&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

   &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1.102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3.14&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;sumOfDouble&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&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="s"&gt;$"Doublelar summasi: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sumOfDouble&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&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;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Intlar summasi: 3
Longlar summasi: 30
Doublelar summasi: 4.242
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Yuqorida keltirilga ko'd asosan &lt;strong&gt;Metod overload&lt;/strong&gt; tushunchasiga to'gri keladi, lekin &lt;strong&gt;method group&lt;/strong&gt; sintaksisiham huddi shunday. Ularni farqi haqida sal pastroqda gaplashamiz.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uchala &lt;code&gt;Add()&lt;/code&gt; methodimizga etibor bersangiz, ular qabul qilayotgan argumentlar hamda, o'sha argumentlar ustida o'tqazilgan operatsiyadan so'ng qaytarishi kerak bolgan malumot turi(return type) bir biridan farq qiladi. C# kompilyatori shunchali aqillikiy, kelayotgan argument turiga asoslanib kerakli bolgan methodni o'zi chaqirib xisob kitobni amalga oshiradi. &lt;/p&gt;

&lt;p&gt;Yana bir yaqqol misol tariqasida biz bilgan &lt;code&gt;Console&lt;/code&gt; klasidan keluvchi &lt;code&gt;WriteLine()&lt;/code&gt; methodini aytishimiz mumkin, har bir overloadi(nusxasi) &lt;code&gt;void&lt;/code&gt; qaytargani bilan, methodlarni qabul qiluvchi argumentlar soni va ularni turlari har-hil. Qo'shimcha qilib aytamanki har kim o'z xo'xshiga ko'ra koplab kombinatsiyalarni amalga oshirishi mumkin, demoqchi bolganim method qaytaradigon type qolgan overloadlarinikiga o'xshash bolsaxam, qabul qiladigon typelar soni va turlari farq qilsa bolgani ishlayveradi. Shu jumladan teskarisigaham ishlayveradi, argumentlar birhil bolsada qatrariladigon tur boshqacha bolsa overload hisoblanadi. Lekin extiyot bo'lish zarur!!! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Method/funksiyalar qanday va qaysi payt ishga tushishi xaqida biroz tushuncha olsak: Harqanday methodga murojat qilinganda i.e. &lt;code&gt;WriteLine&lt;/code&gt; agar &lt;code&gt;()&lt;/code&gt; qavslarni qo'yilmasa bu funksiyamiz &lt;em&gt;ishga tushmaydi&lt;/em&gt;. Yaniy &lt;code&gt;()&lt;/code&gt; qavslari bor method kod run bolganida navbat o'sha funksiyaga kelishi bilanoq ishaga tushadi. Albatta bu tushuntirish abstrakt bolib toliq va mutloq to'g'ri bolgan misol emas. Lekin oz bolsada xaqiqatga yaqin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Endi &lt;strong&gt;method group&lt;/strong&gt; ga to'xtaladigon bolsak, postni cho'zib kod bilan misollarni keltirib o'tirmayman. Qisqacha qilib aytganda method group hamda method overload implementation(yaratilishi)ni syntaksisi birxil. Lekin bu ikkala tushunchani ishlatilish jarayoni va maqsadlari turlicha.&lt;/p&gt;

&lt;p&gt;Method overload hamda method group qayerda va qanday ishlashi haqida batafsil gaplashsak.&lt;/p&gt;

&lt;p&gt;Method overload - asosan kodni o'qish/tushunish uchun hamda eslab qolish uchun osonroq qiladigon feature xisoblanadi, yuqorida keltirilgan ko'dga yuzlansak, C# da agar overload qilish xususiyati bolmaganda harbir tip uchun boshqa boshqa &lt;em&gt;nom&lt;/em&gt; o'ylab topish va uni qanday ish bajarishini yodda tutishimiz kerak bolar edi. Misol uchun &lt;code&gt;int&lt;/code&gt; type uchun &lt;code&gt;IntAdd(...)&lt;/code&gt;, &lt;code&gt;double&lt;/code&gt; uchun esa &lt;code&gt;DoubleAdd(...)&lt;/code&gt; va hokazo. Overload qilingan methodlar turgan class filega yangiliklar kiritilganda, shu yangiliklarni handle(qayta ishlash) qilish uchun yana bir overload qo'shilsa bas. API lar yaratilganidaham juda qo'l kelishi mumkin.&lt;/p&gt;

&lt;p&gt;Method groupni esa ko'pincha methodni &lt;em&gt;darhol&lt;/em&gt; chaqirmasdan, uning &lt;strong&gt;nomi&lt;/strong&gt;ga gina murojaat qilib eventlarni handle qilish(qayta ishlash) hamda methodlarni parametrlar (delegatlar) sifatida o'tkazishda va LINQ expression(iboralari)ni islatilyotkanida foydalidur. Aniqroq qilib aytganda kod yozish paytida kerakli bolgan methodni nominigina yozib ketiladi va kod &lt;strong&gt;runtime&lt;/strong&gt;(ishga tushgan)paytda, chaqiriladigan methodni keyinroq aniqlanashga imkon beradi. Bundan nima naf?! Yuqorida aytganimizdek methodlarni chaqirishimiz bilanoq ular ishga tushib keradi, bazi holatlarda esa bu narsa ko'dimizni flexibility(moslashuvchanlik)ga tasir ko'rsatadi. Misol uchun assinxron dastur tuzganimizda, dasturimiz ishga tushishi bilanoq, methodlarni o'sha zaxoti ishga tushishi, bizni dastur uchun ajratilgan resurslar(xotira)ni egallab qo'yishi, va bu o'z vaqtida hatoliklar yoki, xisob-kitobda kutilmagan natijalarga olib kelishi mumkin.&lt;/p&gt;

&lt;p&gt;Misol:&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;// delegat&lt;/span&gt;
&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;writeLineString&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="nf"&gt;writeLineString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Birinchi qatorda &lt;code&gt;delegate&lt;/code&gt; method groupdagi nomga ishora qiladi, lekin delegat turiga qarab maxsus overloadini chaqiradi, delegatimizda argument sifatiga &lt;code&gt;string&lt;/code&gt;ni belgilaganmiz shuning uchun &lt;em&gt;runtime&lt;/em&gt; paytida &lt;em&gt;kompilyator&lt;/em&gt; &lt;code&gt;WriteLine()&lt;/code&gt; methodini argument sifatida stringni oladigon overloadini chaqiradi. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Method group ishlash prinsipi method overloadnikiga o'xshash.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Endi &lt;strong&gt;LINQ&lt;/strong&gt; bilan misolni ko'rib chiqsak:&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;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="n"&gt;numbers&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="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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&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;evenNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&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;IsEven&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;evenNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ForEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsEven&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;number&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;number&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Bu code-da method group faqat &lt;code&gt;IsEven&lt;/code&gt; funksiyasidan tashkil topgan, yaniy har-doimham qo'shimcha &lt;code&gt;IsEven&lt;/code&gt; overloadi bo'lishi shart emas, method group deb bir dona methodniham aytsa boladi. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kodmizda 1dan 5gacha bolgan list bor, va biz keyingi qatorga LINQ ni ishlatgan holda IsEven funksiyasini faqatgina nomini argument sifatida yuborib, faqat juft bo'lgan sonlar listini yaratyapmiz. IsEven funksiyasini agar &lt;code&gt;()&lt;/code&gt; bilan chaqirsak bizning kod hatolik chiqaradi, chunki yuqorida aytilganidek &lt;code&gt;()&lt;/code&gt; bilan chaqirilgan methodlar o'sha zahotiyoq ishga tushib ketadi. 3-chi qatorga etibor bersangiz &lt;code&gt;ForEach()&lt;/code&gt; methodi &lt;code&gt;WriteLine&lt;/code&gt; funksiyaniham faqatginaham method group nomiga murojat qilyapti, va kompilyator &lt;code&gt;int&lt;/code&gt; type qabul qiladigon &lt;code&gt;WriteLine&lt;/code&gt; overloadini chaqirib, sonlarni konsolga chiqarmoqda. &lt;/p&gt;

&lt;p&gt;Method Group ga aloqador yana bir etiborga loyiq mavzu bor, uning nomi &lt;em&gt;Method Group Natural Type&lt;/em&gt; bu mavzu xaqida esa boshqa &lt;a href="https://dev.to/farkhadk/natural-type-of-method-group-min"&gt;postimda&lt;/a&gt; gaplashamiz. &lt;/p&gt;

&lt;p&gt;Etibor uchun raxmat. &lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>features</category>
    </item>
    <item>
      <title>Yashirin indekserga kirish</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Tue, 28 May 2024 23:58:46 +0000</pubDate>
      <link>https://dev.to/farkhadk/obektni-initsializatorlarida-yashirin-indekserga-kirish-17i7</link>
      <guid>https://dev.to/farkhadk/obektni-initsializatorlarida-yashirin-indekserga-kirish-17i7</guid>
      <description>&lt;p&gt;Bazida &lt;a href="https://dev.to/farkhadk/nol-indekslangan-toplamlar-6c3"&gt;0 indekslangan&lt;/a&gt; collectionlarni ohirgi qiymatiga murojat qilishda ko'pchiligimiz yo'l qo'yadigon oddiy bir xatolik bor &lt;code&gt;array[array.Length]&lt;/code&gt;, va hozirham oramizda bu yerda xatolikni payqamaganlarxam bo'lishi mumkin. Bu error esa o'z vaqtida judaham kichik, payqa qolish qiyin va asabga o'ynaydigon hatoliklardan deb xisoblayman (&lt;code&gt;array[array.Length - 1]&lt;/code&gt; to'g'ri varianti).&lt;/p&gt;

&lt;p&gt;C# 13-chi versiyasida &lt;strong&gt;Implicit Index Access&lt;/strong&gt; -&amp;gt; &lt;strong&gt;yashirincha indeksga murojat&lt;/strong&gt; degan feature qo'shildi. Bu feature ni ishlatishda bizga &lt;strong&gt;&lt;em&gt;caret&lt;/em&gt;&lt;/strong&gt;-&lt;code&gt;^&lt;/code&gt; operatori yordam beradi.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int[] nums = new int[5] { 1, 2, 3, 4, 5 };
Conosle.WriteLine(nums[^1]);
// output -&amp;gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implicit Index Access feature sini funksionalligi faqatgina ohirgi elementga murojat qilish bilan cheklanib qolmaydi. Bu xususiyat har-qanday &lt;code&gt;0&lt;/code&gt; indekslangan collection ni oxiridan boshlab har bir qiymatiga murojat qilishda yordam beradi.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int[] nums = [1, 2, 3, 4, 5];

for(int i = 1; i &amp;lt;= nums.Length; i++)
    Console.Write($"{nums[^i]} ");
// output -&amp;gt; 5 4 3 2 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Etibor berish kerak bolga joyi bu funksional &lt;code&gt;^1&lt;/code&gt;(birdan) boshlanadi, bu degani arrayimizni uzunligi &lt;code&gt;n&lt;/code&gt; bolsa, oxirgi qiymatning indexi &lt;code&gt;n-1&lt;/code&gt; ga teng, shu bilan birgalikda &lt;code&gt;^1 = n-1&lt;/code&gt; yaniy eng oxirgi indeksga ko'rsatib turadi, &lt;code&gt;^2&lt;/code&gt; esa oxirgidan bitta oldingi(^2 = n-2) indeksga teng, va hokazo.&lt;br&gt;
Arrayni teskari o'girish misoliga boshqacharoq qilib ishlatamiz&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int[] nums = [1, 2, 3, 4, 5];

foreach (var item in ReverseArray(nums))
    Console.Write($"{item} ");

int[] ReverseArray(int[] array)
{
    int[] reversed = new int[array.Length];
    for(int i = 0; i &amp;lt; array.Length; i++) &amp;lt;---
        reversed[i] = array[^(i+1)];      &amp;lt;---

    return reversed;
}

// output -&amp;gt; 5 4 3 2 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu safargi ko'dimizda &lt;code&gt;i&lt;/code&gt; 1 ga emas 0 ga teng va array ni oxiridan murojatni boshlash uchun esa &lt;code&gt;array[^(i+1)]&lt;/code&gt; ishlatildi.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bundan tashqari bu feature ni harkim o'z tassavuri yetganicha va albatta C# kompilyatori ruhsat berganicha ishlata oladi. &lt;a class="mentioned-user" href="https://dev.to/wahidustoz"&gt;@wahidustoz&lt;/a&gt; aytganlaridek "Sky is the limit".&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>csharp</category>
      <category>news</category>
      <category>featur</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Nol indekslangan to'plamlar</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Tue, 28 May 2024 23:57:32 +0000</pubDate>
      <link>https://dev.to/farkhadk/nol-indekslangan-toplamlar-6c3</link>
      <guid>https://dev.to/farkhadk/nol-indekslangan-toplamlar-6c3</guid>
      <description>&lt;p&gt;C# da bir nechta to'plam(collection type) turlari nol indekslangan, ya'ni ularning qiymatiga indeks &lt;code&gt;0&lt;/code&gt; dan boshlab murojat qilish mumkin. Yani arrayni yoki listni 0-chi indeksga murojat qilsak, bizga 1-chi element(qiymati)ni qaytaradi.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var nums = new int[]{1,2,3,4,5};
Console.WriteLine(nums[0]);
// output --&amp;gt; 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;C# da nol indeksli to'plamlar ro'yxatidan bir shingil: &lt;code&gt;array&lt;/code&gt;, &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;ArrayList&lt;/code&gt; va hokazolar kiradi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yuqorida ko'rganimizdek, bizda &lt;code&gt;nums&lt;/code&gt; nomi bilan, 1 dan 5 gacha bolgan sonlar arrayi berilgan, va biz konsolga birinchi elementi(qiymatini)ni chiqarishimiz uchun &lt;code&gt;nums[0]&lt;/code&gt; deb murojat qildik. Keyingi elementiga murojat qilish uchun esa &lt;code&gt;nums[1]&lt;/code&gt; deyish kifoya, va shu zaynda davom etaveradi. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;0&lt;/code&gt; indeksli toplamlarni ohirgi elementiga(umumiy elementlar soni &lt;code&gt;n&lt;/code&gt; ga teng bolsa) &lt;code&gt;nums[n-1]&lt;/code&gt; qilib murojat qilinadi. Nima uchun aynan &lt;code&gt;n-1&lt;/code&gt;?!&lt;br&gt;
Buning sababi, yuqoridagi kodga yuzlansak, u yerda qiymatlarning umumiy soni 5 ga teng(n = 5), indeks bo'ylab sanalganda esa 4 ga teng (0,1,2,3,4). Agar &lt;code&gt;nums[5]&lt;/code&gt; qilsak, indeks bo'yicha sanalganda 5-chi indeks 6-chi elementga to'g'ri keladi, bizda esa umumiy 5ta qiymatlar bor. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;indekslar -&amp;gt; 0 | 1 | 2 | 3 | 4&lt;br&gt;
qiymatlar-&amp;gt; 1 | 2 | 3 | 4 | 5&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var nums = new int[]{1,2,3,4,5};
int n = nums.Length; // n = 5,
Console.WriteLine(nums[n-1]);
// output --&amp;gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu kodda &lt;code&gt;nums.Length&lt;/code&gt;(length -&amp;gt; uzunligi) bizga &lt;code&gt;n&lt;/code&gt; yaniy qiymatlar sonini topishda yordam beradi. Yuqoridagi kodimizni yanda qisqartirsak boladi.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var nums = new int[]{1,2,3,4,5};
Console.WriteLine(nums[nums.Length - 1]);
// output --&amp;gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bazida shunday holatlar boladiki ohirgi elementga murojat qilyotkanimizda &lt;code&gt;nums[nums.Length]&lt;/code&gt; &lt;strong&gt;-1&lt;/strong&gt; ni qo'shib ketish yoddan chiqishi mumkin, bu esa o'z vaqtida hatolikga olib keladi.&lt;br&gt;
C# 13-chi versiyasidan boshlab yangi feature(xususiyat) kirib keldi uning nomini &lt;br&gt;
&lt;strong&gt;&lt;em&gt;Implicit index access&lt;/em&gt;&lt;/strong&gt; -&amp;gt; &lt;strong&gt;&lt;em&gt;Indeksga yashirin kirish&lt;/em&gt;&lt;/strong&gt; deb nomlashdi, va bu xususiyatni ishlatish uchun esa &lt;code&gt;^&lt;/code&gt;(caret -&amp;gt; karet) aperatori bilan amalga oshirish mumkin. Bu feature xaqida ushbu -&amp;gt; &lt;a href="https://dev.to/farkhadk/obektni-initsializatorlarida-yashirin-indekserga-kirish-17i7"&gt;link&lt;/a&gt; postimda tanishib chiqsangiz boladi.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>index</category>
    </item>
    <item>
      <title>Yangi \e - escape ketma-ketligi</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Tue, 28 May 2024 04:08:42 +0000</pubDate>
      <link>https://dev.to/farkhadk/yangi-escape-ketma-ketligi-e-4apg</link>
      <guid>https://dev.to/farkhadk/yangi-escape-ketma-ketligi-e-4apg</guid>
      <description>&lt;p&gt;Yangi escape ketma-ketligi(escape sequence) haqida gapirishdan oldin, o'zim uchunham yangilik bo'lgan bir tushuncha haqida aytishni shart deb bildim.&lt;br&gt;
Shu kungacha, shaxsan men uchun birxil manoga ega bolgan, ko'plab dasturlash tillarida, hususan C# daham, escape belgi(&lt;strong&gt;character&lt;/strong&gt;) hamda escape ketma-ketligi(&lt;strong&gt;sequence&lt;/strong&gt;) degan ikkita &lt;strong&gt;bir-biridan farq qildigon&lt;/strong&gt;, lekin uzviy bog'liq konsepsiyalarni farqi nimada ekanligini iloji boricha qisqacha tushuntirishga harakat qilaman.&lt;br&gt;
Escape character(belgi) deb &lt;code&gt;\&lt;/code&gt; &lt;strong&gt;backslash&lt;/strong&gt; ni aytiladi. Bu o'zi nima uchun kerak?! Hechkimga sir emaski double quotes &lt;code&gt;""&lt;/code&gt; hamda backslash &lt;code&gt;\&lt;/code&gt;, maxsus belgilar hisoblanib, ularni &lt;code&gt;string&lt;/code&gt; malumot turiga shunchaki saqlab keta olmaymiz. Sababi ushbu belgilarni kompilyatorda boshqa maqsad uchun ishlatilinadi. &lt;/p&gt;

&lt;p&gt;Misol:&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;// error&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;str1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Shoqasim "&lt;/span&gt;&lt;span class="n"&gt;yaxshi&lt;/span&gt;&lt;span class="s"&gt;" bola"&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;str2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Shoqasim \yaxshi\ bola"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bu kodimiz hatolik keltirib chiqaradi, ushbu hatolikni oldini olish uchun, bizga &lt;code&gt;\&lt;/code&gt; escape -&amp;gt; qochish belgisi yordam beradi(hatolikdan qochishga yo'l ochib beradi).&lt;/p&gt;

&lt;p&gt;Misol:&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;string&lt;/span&gt; &lt;span class="n"&gt;str1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Shoqasim \"yaxshi\" bola"&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;str2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Shoqasim \\yaxshi\\ bola"&lt;/span&gt;&lt;span class="p"&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;str1&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;Shoqasim&lt;/span&gt; &lt;span class="s"&gt;"yaxshi"&lt;/span&gt; &lt;span class="n"&gt;bola&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;str2&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;Shoqasim&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;yaxshi&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="n"&gt;bola&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Misolda ko'rganimiz kabi &lt;strong&gt;qo'sh tirnoq&lt;/strong&gt; &lt;code&gt;"&lt;/code&gt; yoki &lt;strong&gt;orqa chiziq&lt;/strong&gt; &lt;br&gt;
&lt;code&gt;\&lt;/code&gt; belgilarini hatoliklarsiz saqlash uchun bizga &lt;strong&gt;escape character&lt;/strong&gt; yordam berdi. Lekin bu yerda yana bir qo'shimcha qilish kerakki &lt;code&gt;\"&lt;/code&gt;, yoki &lt;code&gt;\\&lt;/code&gt; belgilari, bundan buyog'iga escape character emas balki &lt;strong&gt;escape sequence&lt;/strong&gt; deyiladi. Bu bilan demoqchi bolganim shundaki escape character doimo bitta &lt;strong&gt;backslash&lt;/strong&gt; &lt;code&gt;\&lt;/code&gt;, va ushbu &lt;code&gt;\&lt;/code&gt; belgi, escape sequence lar yaratishga yo'l beradi. Escape sequence larni turlari ko'p, eng ko'p uchraydigonlari: &lt;code&gt;\"&lt;/code&gt;, &lt;code&gt;\\&lt;/code&gt;, &lt;code&gt;\n&lt;/code&gt;, &lt;code&gt;\t&lt;/code&gt;, &lt;code&gt;\r&lt;/code&gt; va boshqalar. Ushbu ketma-ketliklar bizga &lt;code&gt;string&lt;/code&gt; qiymatlarini turli hil formatlash(shakllash)ga yordam beradi. Ko'proq misollar uchun -&amp;gt; &lt;a href="https://codebuns.com/csharp-basics/escape-sequences/"&gt;havola&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Endi ushbu postimizni asosiy qaxramoni bo'lmish &lt;code&gt;\e&lt;/code&gt; escape sequence ga o'tsak. Ushbu yangi sequence, 13-chi versiyadan oldingi &lt;strong&gt;ESCAPE&lt;/strong&gt; belgisi(&lt;a href="https://www.commfront.com/pages/ascii-chart"&gt;ASCII&lt;/a&gt; jadvali bo'yicha 27-chi)ni ifodalovchi &lt;code&gt;\x1b&lt;/code&gt; sequence orniga kelishi kutilmoqda.&lt;br&gt;
Bu belgi nimani bildiradi degan savolga kodda javob berishga harakat qilaman.&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="s"&gt;"\x1b"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; Bo'm-bo'sh bolib qoladi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outputda hich-narsa ko'rinmasligini sababi, &lt;code&gt;x1b&lt;/code&gt; (ESC) belgisi asosan konsolga chiqishi kerak bolgan matinni &lt;strong&gt;manipulyatsiya&lt;/strong&gt; qilish uchun ishlatiladi(rangini o'zgartirish, formatini o'zgartirish vaho-kazo...).&lt;/p&gt;

&lt;p&gt;Misol:&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="s"&gt;"\x1b[31mHello \x1b[0mWorld!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; Hello(qizil rangda)  World!(defolt rangda)&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="s"&gt;"\x1bHello \x1bWorld!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; ello orld! birinchi harflar o'chib ketadi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hattoki Microsoft o'z documentationida &lt;code&gt;\x1b&lt;/code&gt; ishlatishni maslaxat bermaydi. Bunga sabab &lt;code&gt;1b&lt;/code&gt; ketma-ketligidan keyin keluvchi qiymatlar &lt;strong&gt;o'n oltilik&lt;/strong&gt; sanoq tizimini qiymatiga teng bo'lib qolishi mumkin va kutilmagan natijalarni keltirib chiqarishi mumkin.&lt;/p&gt;

&lt;p&gt;Misol:&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="s"&gt;"\x1b12"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; ? belgisi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shunaqangi kutilmagan xatoliklar oldini olish maqsadida Microsoft &lt;code&gt;\x1b&lt;/code&gt; sequensini &lt;code&gt;\e&lt;/code&gt; o'zgartirmoqchi. Yangi ketma-ketlikni endi ikkilanmay &lt;code&gt;\e12&lt;/code&gt; qilib ishlatsa bo'ladi, hechqanday &lt;strong&gt;?&lt;/strong&gt; belgisi chiqmaydi. Formatlash sistemasixam eski sequence nikidek qoladi.&lt;/p&gt;

&lt;p&gt;Misol:&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="s"&gt;"\e12"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; 2&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="s"&gt;$"\e[31m123\e[0m456"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qizil&lt;/span&gt; &lt;span class="n"&gt;rangda&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;456&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;defolt&lt;/span&gt; &lt;span class="n"&gt;rangda&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>news</category>
      <category>features</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>params key-word</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Mon, 27 May 2024 23:37:17 +0000</pubDate>
      <link>https://dev.to/farkhadk/params-key-word-16n8</link>
      <guid>https://dev.to/farkhadk/params-key-word-16n8</guid>
      <description>&lt;p&gt;&lt;code&gt;params&lt;/code&gt; - kalit so'zi avvalroq c# ning 12-chi versiyasida taqdim etilgan edi, u vaqtda &lt;code&gt;params&lt;/code&gt; ni faqat &lt;strong&gt;&lt;em&gt;array&lt;/em&gt;&lt;/strong&gt; turiga nisbatan ishlata olardik, 13-chi versiyada esa &lt;code&gt;params&lt;/code&gt; harqanday &lt;strong&gt;&lt;em&gt;collection&lt;/em&gt;&lt;/strong&gt; turiga nisbatan ishlatsa bo'ladi, yani harqanday &lt;code&gt;IEnumerable&lt;/code&gt; vorislariga qollasa boladi.&lt;br&gt;
&lt;code&gt;params&lt;/code&gt; kalit so'zi &lt;strong&gt;o'zgaruvchan&lt;/strong&gt; sonli(istalgan miqtorda), argumentlarni metodga o'tkazish imkonini beradi. Bu shuni anglatadiki, siz funksiyani istalgan miqdordagi argumentlar, jumladan, nol bilan chaqirishingiz mumkin. Bu kalit so'zi kompilyatorga, kelayotgan argumentlarni individual obekt sifatida emas, balki bir-butun &lt;strong&gt;collection&lt;/strong&gt; sifatida ko'rib chiqilishini anglatadi.&lt;br&gt;
C# ning 11-chi versiyasigacha, agar metodga biz array(yoki harqanday collection) o'tqazmoqchi bo'lsak faqatgina &lt;code&gt;Print(nums);&lt;/code&gt; yoki &lt;code&gt;Print(new int[] {1,2,3});&lt;/code&gt; deb yozishimiz kerak edi, yani collection ni avval initsializatsiya qilishimiz kerak edi.&lt;/p&gt;

&lt;p&gt;Misol:&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;nums&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;int&lt;/span&gt;&lt;span class="p"&gt;[]&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;     &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;etibor&lt;/span&gt; &lt;span class="n"&gt;qiling&lt;/span&gt;

&lt;span class="nf"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                          &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;etibor&lt;/span&gt; &lt;span class="n"&gt;qiling&lt;/span&gt;

&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;foreach&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;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&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;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; 1 2 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;params&lt;/code&gt; bilan esa bunday qilishga hojat yoq&lt;/p&gt;

&lt;p&gt;Misol:&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="nf"&gt;Print&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                       &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;etibor&lt;/span&gt; &lt;span class="n"&gt;qiling&lt;/span&gt;

&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;params&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;foreach&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;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&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;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; 1 2 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Va bu kalit so'zi nafaqat arraylar bilan, balki harqanday &lt;code&gt;IEnumerable&lt;/code&gt; vorislariga qollasa boladi.&lt;/p&gt;

&lt;p&gt;Misol:&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="nf"&gt;Print&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                           &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;etibor&lt;/span&gt; &lt;span class="n"&gt;qiling&lt;/span&gt;

&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;params&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="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;etibor&lt;/span&gt; &lt;span class="n"&gt;qiling&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;foreach&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;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&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;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// output -&amp;gt; 1 2 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Params&lt;/code&gt; ni ishlatib boshqa tiplar bilan, turli kombinatsiyalar qilish mukin, faqat &lt;code&gt;params&lt;/code&gt; metodni eng oxirgi argumenti bo'lishi shart.&lt;/p&gt;

&lt;p&gt;Misol:&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="nf"&gt;PrintMessageAndNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"uchta son yubordim: "&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="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;PrintMessageAndNumbers&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;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;params&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&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;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;foreach&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;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&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;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; "&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;span class="c1"&gt;// output -&amp;gt; uchta son yubordim: 1 2 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shu va shunga o'xshagan ko'plab kombinatsiyalr qilish mumkin.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>new</category>
      <category>features</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>C# 13 dagi yangiliklar!!!</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Mon, 27 May 2024 23:35:45 +0000</pubDate>
      <link>https://dev.to/farkhadk/c-13-dagi-yangiliklar-3e7i</link>
      <guid>https://dev.to/farkhadk/c-13-dagi-yangiliklar-3e7i</guid>
      <description>&lt;p&gt;Qisqacha &lt;strong&gt;c#&lt;/strong&gt; dasturlash tili haqida malumotlar&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;C#(si sharp) multi-paradigmik, dinamik hamda &lt;a href="https://en.wikipedia.org/wiki/List_of_C-family_programming_languages"&gt;&lt;code&gt;C&lt;/code&gt;&lt;/a&gt; dasturlash tillari oilasiga mansub dasturlash tili bo'lib Microsoft kompaniyasidan &lt;a href="https://en.wikipedia.org/wiki/Anders_Hejlsberg"&gt;Anders Hilsberg&lt;/a&gt; tomonidan ishlab chiqilgan bolib va keyinchalik 2002 yilda &lt;a href="https://ecma-international.org/"&gt;Ecma&lt;/a&gt;(&lt;a href="https://ecma-international.org/publications-and-standards/standards/ecma-334/"&gt;ECMA-334&lt;/a&gt;) tomonidan xalqaro standard sifatida tastiqlangan.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Xalqaro standard sifatida tastiqlandi&lt;/em&gt;&lt;/strong&gt; degani, qisqacha qilib aytganda ushbu texnologiya(yoki produkt, yoyinki biron servis vaho kazo...) dunyo tanolgan mutaxasislar, korporatsiyalar hullas kazo-kazolar tomonidan ushbu texnologiyani tekshirilib, turli-xil testlar o'tgazib va shu texnologiya uchun qollanma yozib chiqgan degani.&lt;br&gt;
Hozirda C# dasturlash tilini 13-ta versiyasi bor. 13-chi versiyasi &lt;code&gt;21/05/2024&lt;/code&gt; yilda &lt;strong&gt;preview&lt;/strong&gt; versiyasi taqdim etildi. Va yana bir etibor talab qiladigon tarafi hozirda ushbu versiyadagi C# ni qanday yangiliklari va qulayliklari borligini ko'rib chiqmoqchishimiz uchun, avval bizga ProjectName &lt;strong&gt;.csproj&lt;/strong&gt; faylimizga quyidagi kodni kiritib qo'yishimiz kerak:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;PropertyGroup&amp;gt;
   &amp;lt;LangVersion&amp;gt;preview&amp;lt;/LangVersion&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Aks holda bazi yangi xususiyatlar(feature)larni ishlata olmaymiz!!!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Yangi feature larni ro'yxati&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1.&lt;a href="https://dev.to/farkhadk/params-key-word-16n8"&gt;&lt;code&gt;param&lt;/code&gt; kalit so'zi(key word)&lt;/a&gt;&lt;br&gt;
2.Yangi &lt;code&gt;lock&lt;/code&gt; obyekti. &amp;lt;- Bu featureni o'zi uncha tushuna olmadim😅 &lt;br&gt;
3.&lt;a href="https://dev.to/farkhadk/yangi-escape-ketma-ketligi-e-4apg"&gt;Yangi escape ket-maketligi&lt;code&gt;\e&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
4.&lt;a href="https://dev.to/farkhadk/natural-type-of-method-group-4kp0"&gt;Metod guruhining tabiiy tipini yaxshilanishi&lt;/a&gt;&lt;br&gt;
5.&lt;a href="https://dev.to/farkhadk/obektni-initsializatorlarida-yashirin-indekserga-kirish-17i7"&gt;&lt;code&gt;yashirin indekserga&lt;/code&gt; kirish&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt;&lt;br&gt;
Yangi feature larni alohida postlarga bo'lib chiqishga qaror qildim, chunki bitta post uchun juda uzunlik qilar ekan. Ro'yhatdagi havolalarga bosib, o'zingizni qiziqtirgan feature ni alohida misollari bilan birga tanishib chiqishiz mumkin. :)&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>news</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>C#. Kasr sonlarni ifodalovchi malumot turlari</title>
      <dc:creator>Farkhodbek Kamolov</dc:creator>
      <pubDate>Thu, 18 Apr 2024 17:39:54 +0000</pubDate>
      <link>https://dev.to/farkhadk/c-kasr-tiplari-3jg1</link>
      <guid>https://dev.to/farkhadk/c-kasr-tiplari-3jg1</guid>
      <description>&lt;p&gt;C# dasturlash tilida &lt;strong&gt;davomiy&lt;/strong&gt; yaniy &lt;strong&gt;kasr sonlarni&lt;/strong&gt; ifodalash(saqlash, yoki ular ustida turihil arifmetik operatsiyalar amalga oshirish) uchun 3 hil malumot turlari mavjud. Bular: &lt;strong&gt;&lt;em&gt;float&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;double&lt;/em&gt;&lt;/strong&gt; va &lt;strong&gt;&lt;em&gt;decimal&lt;/em&gt;&lt;/strong&gt; tiplaridir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FLOAT&lt;/strong&gt; - hajmi 4byte(32-bitli) suzuvchi nuqtali raqamlarni ifodalovchi tip, taxminan 6~7 ta aniqlikgacha raqamlarni saqlay oladi, floatning taxminiy diapazoni ~ ±1.5 x 10^−45 dan ±3.4 x 10^38 gacha, bu taxminan 3.4028235E+38 ~ -3.4028235E+38.&lt;br&gt;
float tipni elon qilish: &lt;strong&gt;&lt;code&gt;float PI = 3.14159f;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Double&lt;/strong&gt; - hajmi 8byte(64-bitli) suzuvchi nuqtli raqam turi bo'lib, taxminan 15~16 raqamli aniqlikni ta'minlaydi, doublening taxminiy diapazoni ~ ±5.0 × 10^−324 dan ±1.7 × 10^308 gacha, taxminan 1.7976931348623157E+308 ~ -1.7976931348623157E+308 dir.&lt;br&gt;
double tipni elon qilish: &lt;strong&gt;&lt;code&gt;double PI = 3.14159d;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decimal&lt;/strong&gt; - hajmi 16byte(128-bitli) suzuvchi nuqtali raqamlarni ifodalovchi malumot turi, taxminan 28~29 raqamli aniqlikni ta'minlaydi, bu turni taxminiy diapazoni ±1.0 x 10^-28 dan ±7.9228 x 10^28 gacha, bu esa 79228162514264337593543950335 ~ -79228162514264337593543950335 dir&lt;br&gt;
decimal tipini elon qilish: &lt;strong&gt;&lt;code&gt;decimal PI = 2.14159m;&lt;/code&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Bu malumot turlarini ishlatish holatlari:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;float&lt;/strong&gt; va &lt;strong&gt;double&lt;/strong&gt; asosan turli hil arifmetik, fizik, kimyoviy yoki tabiat hodisalarini hisoblovchi operatsiyalar(harorat, tezlik va shunga o'xshash)da keng ishlatilinadi. &lt;br&gt;
&lt;strong&gt;decimal&lt;/strong&gt; esa asosan iqtisodiy hisob-kitob(Valyuta konvertatsiyasi, soliq va foizlarni hisoblash) paytida ishlatilinadi, chunki bu operatsiyalrda yuqori aniqlik talab qilinadi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ularning kamchilik va ustun taraflari:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;float&lt;/strong&gt; ustunligi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xotira samaradorligi: double va decimal turlariga qaraganda kamroq xotirani egallaydi, bu suzuvchi nuqtali raqamlarning katta massivlari bilan ishlashda foydali bo'lishi mumkin.&lt;/li&gt;
&lt;li&gt;Tezligi: Float bilan bog'liq operatsiyalar, ayniqsa, bitta aniqlik arifmetikasi optimallashtirilgan platformalarda, double yoki decimal qaraganda tezroq bo'lishi mumkin.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kamchiliklari:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cheklangan aniqlik: float taxminan 7 ta aniqlikni ta'minlaydi, bu yuqori aniqlikdagi hisob-kitoblarni talab qiladigan ilovalar uchun etarli bo'lmasligi mumkin.&lt;/li&gt;
&lt;li&gt;Cheklangan diapazon: Ikkilik va oʻnlik bilan solishtirganda koʻrsatilishi mumkin boʻlgan qiymatlarning cheklangan diapazoniga ega, bu esa maʼlum paytda toʻlib ketish(overflow) xatolariga olib kelishi mumkin.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;double&lt;/strong&gt; ustunligi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Yuqori aniqlik: floatga nisbatan ikki barobar aniqlik ni(taxminan 15-16 raqamni) ta'minlaydi, bu esa uni ko'proq aniqlik talab etuvchi dasturlar uchun mos keladi.&lt;/li&gt;
&lt;li&gt;Kengroq diapazon: float bilan solishtirganda ko'rsatilishi mumkin bo'lgan sonlarni ancha kengroq diapazonga ega bo'lib, to'lib ketish(overflow) xatolari ehtimolini kamaytiradi.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kamchiliklari:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xotiradan foydalanish: float bilan solishtirganda ko'proq xotira sarflaydi, bu xotira samaradorligi juda muhim bo'lganida muammo tug'dirishi mumkin, garchi bu ko'p ilovalarda ahamiyatsiz bo'lishi mumkin.&lt;/li&gt;
&lt;li&gt;Yaxlitlash xatolari uchun potentsial: Double o'zining yuqori aniqligiga qaramay, juda kichik hisoblarda yaxlitlash xatolariga moil bo'lishi mumkin.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;float floatSon = .3f + .3f + .3f + .1f;        
double doubleSon = .3 + .3 + .3 + .1;       &amp;lt;-- muamo
decimal decimalSon = .3m + .3m + .3m + .1m;

Console.WriteLine($"{floatSon:f33}");
Console.WriteLine($"{doubleSon:f33}");
Console.WriteLine($"{decimalSon:f33}");

result: 
_float_  : 1.000000000000000000000000000000000
_double_ : 0.999999999999999888977697537484346 &amp;lt;-- muamo
_double_ : 1.000000000000000000000000000000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;decimal&lt;/strong&gt; ustunligi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Yuqori aniqlik: kasr qismining aniqligi taxminan 28-29 ta sondan iborat, bu uni moliyaviy hisoblarda yaniy yuqorida aytilganidek juda aniq hisob-kitob talab qiladigan ilovalar uchun mos keladi.&lt;/li&gt;
&lt;li&gt;Yaxlitlash xatolarining kamayishi: Yuqori aniqligi tufayli double va floatga nisbatan yaxlitlash xatolariga kamroq moyil.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kamchiliklari:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xotiradan foydalanish: float va double bilan solishtirganda ko'proq xotirani iste'mol qiladi, chunki u 128 bitli ma'lumotlar turi bo'lib, xotira samaradorligi juda muhim bo'lganida tashvish tug'dirishi mumkin.&lt;/li&gt;
&lt;li&gt;Tezlik(performance): Xotiradan ko'proq joy eganlashi sabab tez ishlashi muhim bo'lgan dasturlarda bu muammo keltirib chiqarishi mumkin.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Qo'shimcha malumot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yuqoridagi kodlarda etiborni tortuvchi narsa bu &lt;code&gt;f&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;(bu qoshimchani ishlatmasaham bo'ladi) yoki &lt;code&gt;m&lt;/code&gt; qoshimchalaridir(suffikslar). Bu qo'shimchalar hechqanday hatolik(error) keltirib chiqarmaydi, aksincha bu qo'shimchalarni ishlatmaslik, compiletime errorlaga olib keladi. Suffikslarni ishlatishdan maqsad, undan oldin keluvchi kasr sonlar qaysi malumot turiga mansubligini bildirib turivchi ishoralardir. Yaniy (by default)boshidan harqanday kasr son yaratilganida hech qanday suffikslar qoshilmasa, bu sonlar &lt;strong&gt;double&lt;/strong&gt; turiga tegishli bo'lib qoladi, boshqa turdagi malumotga o'girish uchun shu qo'shimchalarni ishlatish zarur. Shunday qilib &lt;strong&gt;float&lt;/strong&gt; turdagi kasr sonini yaratish uchun &lt;code&gt;f&lt;/code&gt; suffiksi, &lt;strong&gt;double&lt;/strong&gt; tipi uchu esa &lt;code&gt;d&lt;/code&gt;(hardoimham shart emas!!!) va &lt;strong&gt;decimal&lt;/strong&gt; turidagi kasr soni yaratish uchun esa &lt;code&gt;m&lt;/code&gt; qo'shimchalarini ishlatish zarur. &lt;strong&gt;&lt;em&gt;m&lt;/em&gt;&lt;/strong&gt; suffiksi &lt;strong&gt;&lt;em&gt;money&lt;/em&gt;&lt;/strong&gt; sozidan olingan.&lt;br&gt;
P.S &lt;strong&gt;decimal&lt;/strong&gt; ni iqtisod(pul) bilan uzviy bog'liq dasturlarda ishlatilishi shart.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bu postim sizlarga ozgina bolsada biron foyda keltiradi deb umid qilaman. Etiboringiz uchun katta rahmat, kelgusida ko'rishguncha🙂&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>realnumbers</category>
      <category>typesincsharp</category>
      <category>kasrsonlar</category>
    </item>
  </channel>
</rss>
