<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Hojiakbar Nurmuhammadov</title><generator>teletype.in</generator><description><![CDATA[Frontend ReactJS developer]]></description><image><url>https://img4.teletype.in/files/b1/bf/b1bffa29-19ed-4b46-8200-97b1dec129ea.png</url><title>Hojiakbar Nurmuhammadov</title><link>https://teletype.in/@hojiakbar_nurmuhammadov</link></image><link>https://teletype.in/@hojiakbar_nurmuhammadov?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/hojiakbar_nurmuhammadov?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/hojiakbar_nurmuhammadov?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 13 May 2026 15:52:39 GMT</pubDate><lastBuildDate>Wed, 13 May 2026 15:52:39 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/clean-code</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/clean-code?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/clean-code?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>&quot;Clean Code&quot; tamoyillari</title><pubDate>Mon, 17 Jul 2023 07:28:42 GMT</pubDate><description><![CDATA[Biz nima uchun &quot;clean code&quot; yozishga harakat qilishimiz kerak? Avvalo biz dasturlarni kompyuterlar tushunishi uchun yozamiz. Lekin bizning kodimiz doim bir xil qolavermaydi, unga yangi qo'shimchalar qo'shilishi, eskilarini yana ham optimizatsiya qilishga to'gri kelishi, yoki boshqa yoldan foydalansa yaxshiroq samara berishi mumkin bo'lgan kodga o'zgartilishi mumkin. Agar siz ortiq loyihada qatnashmayotgan bo'lsangiz  bu kabi ishlarni boshqa dasturchilar amalga oshiradi. Yoki siz bir loyihada bir necha dasturchilar bilan birgalikda ishlayotgan bo'lishingiz mumkin. Shuning uchun biz dasturlarimizni boshqalar ham tushuna oladigan yo'lda yozishimiz kerak. Keling unda &quot;clean code&quot; nima ekanligi haqida gaplashamiz.]]></description><content:encoded><![CDATA[
  <p id="RufS">Biz nima uchun &quot;clean code&quot; yozishga harakat qilishimiz kerak? Avvalo biz dasturlarni kompyuterlar tushunishi uchun yozamiz. Lekin bizning kodimiz doim bir xil qolavermaydi, unga yangi qo&#x27;shimchalar qo&#x27;shilishi, eskilarini yana ham optimizatsiya qilishga to&#x27;gri kelishi, yoki boshqa yoldan foydalansa yaxshiroq samara berishi mumkin bo&#x27;lgan kodga o&#x27;zgartilishi mumkin. Agar siz ortiq loyihada qatnashmayotgan bo&#x27;lsangiz  bu kabi ishlarni boshqa dasturchilar amalga oshiradi. Yoki siz bir loyihada bir necha dasturchilar bilan birgalikda ishlayotgan bo&#x27;lishingiz mumkin. Shuning uchun biz dasturlarimizni boshqalar ham tushuna oladigan yo&#x27;lda yozishimiz kerak. Keling unda &quot;clean code&quot; nima ekanligi haqida gaplashamiz.</p>
  <p id="umSG">Clean code - bu shunday kodki, u o&#x27;qishga, tushunishga va saqlashga oson. Buning uchun u kodni o&#x27;qishni, test qilishni osonlatadigan, kamroq xatoga moyil qiladigan &quot;Software design principles&quot; deb ataluvchi tamoyillarga ergashish kerak bo&#x27;ladi. Quyida &quot;clean code&quot; ga erishish uchun muhim tavsiyalarni keltirib o&#x27;taman:</p>
  <ul id="usvE">
    <li id="PnjU"><strong>Clarity(aniqlik)</strong> - kodni boshqalar o&#x27;qishga va tushunishga qiynalmaydigan qilib yozish.</li>
    <li id="XvDW"><strong>Simplicity(soddalik)</strong> - kod iloji boricha sodda va ortiqcha murakkablikdan holi bo&#x27;lishi kerak.</li>
    <li id="AJyW"><strong>Comments(izohlar)</strong> - bir qarashda tushunib bo&#x27;lmaydigan, murakkab kodlar uchun muxtasar izoh bo&#x27;lishi kerak.</li>
    <li id="N1n5"><strong>Naming(nomlash)</strong> - o&#x27;zgaruvchilar, funksiyalar va class larga ma&#x27;noli va ifodali nom qo&#x27;yish. Ma&#x27;noni anglatuvchi nom qo&#x27;yish, nima uchunligi haqida comment yozgandan yaxshiroq.</li>
    <li id="LBSK"><strong>Formatting(tartiblash)</strong> - kodning o&#x27;qishlik darajasini oshirish uchun uni tartibga solish.</li>
    <li id="hPBl"><strong>Functionality(funksionalligi) </strong>- kod kichik va yagona maqsadga ega bo&#x27;lgan funksiya va class larga ajratilgan bo&#x27;lishi kerak.</li>
    <li id="6lbN"><strong>Error handling(xatolar uchun holat)</strong> - kod ehtimoliy xatolarni ushlay olishi va bunday vaziyatlar uchun ham aniq ko&#x27;rsatmalarga ega bo&#x27;lishi kerak.</li>
    <li id="Whro"><strong>Testing(testlash)</strong> - kod test qilishga oson va yuqori test natijalariga ega bo&#x27;lish kerak.</li>
    <li id="0kjM"><strong>Reusability(qayta ishlatilish)</strong> - kod takroriy ishlatilishga oson qilib yozilishi kerak.</li>
    <li id="Su8x"><strong>Performance(ishlashi) </strong>- kodning samarasi va tezkorligi ahamiyatli bo&#x27;lishi kerak.   </li>
  </ul>
  <p id="JXir">Bu kabi yo&#x27;riqnomalarga amal qilish huddiki vaqt olayotganday tuyuliladi, ammo bularga amal qilishni boshlasangiz, kelajakdagi jamoaviy ishlarda ancha vaqt tejashga yordam beradi. Bundan tashqari kodimizning sifatini oshirishga yordam beruvchi bir qancha dizayn tamoyillari mavjud. SOLID, KISS, DRY kabi tamoyillarni allaqachon eshitgan bo&#x27;lsangiz ajab emas.  Agar bularning barchasi haqida shu maqolada yozadigan bo&#x27;lsam, o&#x27;qishga odam erinib qoladi. Shu sabab bular va boshqa foydali tamoyillar haqida keyingi maqolada yozaman.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/aot-jit</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/aot-jit?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/aot-jit?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Qanday qilib interpreted tillarni tezlashtirish mumkin. AOT va JIT haqida</title><pubDate>Mon, 10 Jul 2023 07:40:23 GMT</pubDate><description><![CDATA[<img src="https://www.scientecheasy.com/wp-content/uploads/2021/03/java-bytecode.png"></img>Ma'lumingizkim o'tgan galgi maqolada biz yaratgan dasturlar yozilgan tiliga qarab qanday ishga tushirilishi haqida yozgan edim. Compiled tillarda yozilgan dasturlar ishga tushirilishidan oldin mashina tushinadigan kodga o'tkazib olinsa, interpreted tillarda yozilgan dasturlar qatorma qator va to'gridan to'g'ri interpreterlar orqali ishga tushiriladi. Bugun esa compilation turlari va qanday qilib interpreted dasturlarni tezligini oshirish mumkinligi haqida gaplashamiz.]]></description><content:encoded><![CDATA[
  <p id="K0Qt">Ma&#x27;lumingizkim o&#x27;tgan galgi <a href="https://teletype.in/@hojiakbar_nurmuhammadov/interpreted-compiled-languages" target="_blank">maqolada </a>biz yaratgan dasturlar yozilgan tiliga qarab qanday ishga tushirilishi haqida yozgan edim. Compiled tillarda yozilgan dasturlar ishga tushirilishidan oldin mashina tushinadigan kodga o&#x27;tkazib olinsa, interpreted tillarda yozilgan dasturlar qatorma qator va to&#x27;gridan to&#x27;g&#x27;ri interpreterlar orqali ishga tushiriladi. Bugun esa compilation turlari va qanday qilib interpreted dasturlarni tezligini oshirish mumkinligi haqida gaplashamiz.</p>
  <p id="uvkX">Kodlarni mashina tushunadigan tilga o&#x27;tkazishning 2ta metodi mavjud. AOT(ahead-of-time) va JIT(just-in-time).</p>
  <p id="HI2G">AOT - dasturlarning ishga tushirilishidan oldin mashina tiliga o&#x27;tkazib olish. Static compilation ham deb yuritiladi.</p>
  <p id="nWMs">JIT - dasturning runtime muhitida mashina tiliga o&#x27;girish. Dynamic compilation ham deb yuritiladi.</p>
  <p id="27ht">AOT compilation dan foydalangan dasturlar allaqachon mashina tiliga o&#x27;tkazib bo&#x27;lingani sababli tezroq ishga tushadi, kamroq xotira sarf qiladi va generatsiya qilingan kodlar xavfsizlik tomondan ham ustunroq bo&#x27;ladi. Lekin ular testing uchun noqulay va har gal o&#x27;zgartirish kiritilganda compilation jarayoni vaqtimizni oladi. AOT compilationni hamma tillar va hamma platformalar qo&#x27;llab quvvatlamasligini ham unutmasligimiz kerak. Quyida AOT compilationni qo&#x27;llab quvvatlaydigan ba&#x27;zi tillar, texnalogiyalar va platformalarni keltirib o&#x27;taman.</p>
  <ul id="MfJF">
    <li id="er12">Java: Java tilining AOTJC(ahead of time java compiler) nomli AOT compileri mavjud.</li>
    <li id="aWoF">.Net: .Netda Ngen(Native Image Generator) nomli compiler mavjud.</li>
    <li id="a1fe">Angular: Ha, Angularning ham sifatli javascript kodga aylantirib beradigan AOT compileri mavjud.</li>
    <li id="paBB">Android: Androidda Java dasturlari uchun AOT comiplation mavjud.</li>
    <li id="qH1w">IOS: IOSda .Net dasturlari uchun AOT comiplation mavjud.</li>
    <li id="YeGU">WebAssembly: har qanday dasturlash tili uchun AOT compilationni qo&#x27;llab quvvatlaydi.</li>
  </ul>
  <p id="SjUw">Endi esa JIT haqida gaplashamiz. U qanday qilib interpreter dasturlarni tezlashtirib bera oladi? Ma&#x27;lumki interpreterlar dasturlarni bytcodega o&#x27;girib ishga tushiradi. bytecode mashinalarning ona tili bo&#x27;lmagani uchun ham to&#x27;gridan to&#x27;g&#x27;ri ishga tushirilmaydi va ishga tushirilishi uchun intertpreterlarga muxtoj. Bu esa sekinlikka sabab bo&#x27;ladi. Ho&#x27;sh unda runtime jarayonida bytecodeni mashina tiliga o&#x27;girsakchi? Shunda protsessor tomonidan hech qanday interpreterga muxtoj bo&#x27;lmasdan to&#x27;g&#x27;ridan to&#x27;g&#x27;ri ishga tushardi? Bu dasturlarni tezlata oladimi? Albatta tezlata oladi. Lekin baribir AOT ga nisbatan sekinroq ishlaydi.</p>
  <figure id="tY4X" class="m_column">
    <img src="https://www.scientecheasy.com/wp-content/uploads/2021/03/java-bytecode.png" width="600" />
  </figure>
  <p id="fYNT">AOT kabi JITni ham hamma dasturlash tillari va platformalar qo&#x27;llab quvvatlayvermaydi. Quyida JITni qo&#x27;llab quvvatlovchi ba&#x27;zi tillar va platformalarni keltirib o&#x27;taman:</p>
  <ul id="FYhC">
    <li id="ZitQ">Java: Java tilining HotSpot Virtual Machine (JVM) nomli JIT compileri mavjud.</li>
    <li id="kKTx">C#: C# ning Common Language Runtime (CLR) nomli JIT compileri mavjud.</li>
    <li id="2ic3">JavaScript: JavaScriptdagi JIT compiler bu v8 engine.</li>
    <li id="xzl9">Python: Numba nomli JIT compiler.</li>
    <li id="VlT9">Android: Androidda Java dasturlari uchun JIT comiplation mavjud.</li>
    <li id="y5O7">IOS: IOSda C# dasturlari uchun JIT compilation mavjud.</li>
    <li id="DZRJ">Web browsers: Ko&#x27;p web browser lar JavaScript dasturlari uchun JIT compilationni qo&#x27;llab quvvatlaydi.</li>
  </ul>
  <p id="rN5H">Ba&#x27;zida hamma kodlarni mashina kodiga o&#x27;tkazish dasturning startup vaqtini kechiktiradi shu sabab ko&#x27;p JIT compilerlar eng muhim qismlarnigini mashina tiliga o&#x27;tkazadi. Java tilini olaylik. JVM, masalan biror funksiyaning bytecode ini analiz qiladi va necha marotaba ishlatilganini hisoblaydi. Agar belgilangan miqdordan oshadigan bo&#x27;lsa uni CPU to&#x27;g&#x27;ridan to&#x27;gri ishga tushira oladigan mashina kodiga o&#x27;tkazib oladi va uni xotirada saqlaydi. Keyingi safar shu funksiya yana qayta chaqirilganda aynan o&#x27;sha mashinakodini ishga tushiradi va bu dasturni ancha tezlashtiradi. Agar mashina kodiga o&#x27;tkizilmay ishga tushirilganda har safar funksiya qayta chaqirilganda uning bytecode ini qayta qayta qatorma-qator yangittan ishga tushirgan bo&#x27;lar edi.</p>
  <p id="hsFH">Xulosa qilib aytganda, AOT compilation lar JIT compilation larga qaraganda tezroq startup vaqtiga ega, lekin performance jihatdan JIT tezroq bo&#x27;la oladi. Chunki JIT runtime vaqtida dynamic ma&#x27;lumotlarga asoslanib yaxshiroq kod generatsiya qila oladi. Xavfsizlik tomondan esa AOT static ma&#x27;lumotlarni yaxshiroq analiz qila olgani uchun ustunlikka ega. Agar sizga tezroq ishga tushadigan, kamroq xotira istemol qiladigan, ko&#x27;proq xafsiz bo&#x27;lgan dasturlar kerak bo&#x27;lsa AOT compilation yaxshi tanlov. Lekin sizga performace tomondan yaxshi, portativ dasturlar kerak bo&#x27;lsa JIT compilationdan foydalaning.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/interpreted-compiled-languages</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/interpreted-compiled-languages?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/interpreted-compiled-languages?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Interpreted va compiled dasturlash tillari yohud nega python sekin ishlaydi.</title><pubDate>Wed, 05 Jul 2023 07:34:48 GMT</pubDate><description><![CDATA[<img src="https://static.javatpoint.com/difference/images/compiler-vs-interpreter2.png"></img>Har qanday dastur buyruqlar ketma ketligidan iborat bo'ladi. computer tushunadigan til(machine code)ga to'g'ridan to'g'ri tarjima qilinadigan dasturlash tillari compiled tillar deyilsa, interpreted tillarda codeni ishga tushirish uchun interpreterlar kerak bo'ladi. ]]></description><content:encoded><![CDATA[
  <p id="cmFe">Har qanday dastur buyruqlar ketma ketligidan iborat bo&#x27;ladi. computer tushunadigan til(machine code)ga to&#x27;g&#x27;ridan to&#x27;g&#x27;ri tarjima qilinadigan dasturlash tillari compiled tillar deyilsa, interpreted tillarda codeni ishga tushirish uchun interpreterlar kerak bo&#x27;ladi. </p>
  <p id="hBka">Tasavvur qiling siznikiga olmoniyalik(germaniya) mehmon keldi lekin siz nemis tilini bilmaysiz va tarjimon yollaysiz. Siz tarjimonga barcha gapingizni aytasiz, u esa oxirida ularni nemis  tiliga tarjima qiladi. Buni compiled tillarga qiyoslasak bo&#x27;ladi. Agar tarjimon har bitta gapingizni birma bir tarjima qilsa buni interpreted tillarga qiyoslasak bo&#x27;ladi. </p>
  <p id="tXNw">Compiled tillar interpreted tillarga qaraganda tezroq hisoblanadi. Compiled tillar yana dasturchiga memoryni va cpu ishlashini nazorat qilish imkonini beradi. Compiled tillarga misol qilib C, C++, Haskell, Rust va Go larni aytishimiz mumkin. Compiled tillarda buyruqlarni ishga tushirish uchun avval ularni compile(build) qilib olish kerak ya&#x27;ni machine codega o&#x27;girib olish. Bu esa har safar biror o&#x27;zgartirish kiritganingizda qayta rebuild qilish kerakligini anglatadi.</p>
  <p id="hKX9">Quyida C tilidagi code va uning machine code varianti keltirilgan.</p>
  <pre id="Mjex" data-lang="c">#include &lt;stdio.h&gt;

int main() {
    printf(&quot;Hello, World!\n&quot;);
    return 0;
}
</pre>
  <pre id="OBlL" data-lang="wasm">section .data
    message db &#x27;Hello, World!&#x27;, 0

section .text
    global _start

_start:
    ; write the message to stdout
    mov eax, 4
    mov ebx, 1
    mov ecx, message
    mov edx, 13
    int 0x80

    ; exit the program
    mov eax, 1
    xor ebx, ebx
    int 0x80
</pre>
  <figure id="K2QS" class="m_column">
    <img src="https://static.javatpoint.com/difference/images/compiler-vs-interpreter2.png" width="750" />
    <figcaption>Compiled tillar qanday ishlaydi</figcaption>
  </figure>
  <p id="UZmC">Interpreted tillarda esa buyruqlar qatorma qator ishga tushiriladi. Biror bir qatorga o&#x27;zgartirish kiritmoqchi bo&#x27;lsangiz uni shunchaki modify qilishingiz, keraksiz narsalarni o&#x27;chirib, kerakli narsalarni qo&#x27;shishingiz kifoya. Har bir qator executable code ya&#x27;ni bytecode ga o&#x27;tkazib olinadi va ishga tushiriladi. Bytecode machine code dan farq qiladi. Machine code CPU ning native tili. Bytecode CPU tomonidan to&#x27;g&#x27;ridan to&#x27;g&#x27;ri ishga tushirilmagani uchun ham sekinroq ishlaydi. </p>
  <p id="Vrdh">Javascript varianti:</p>
  <pre id="zQUT" data-lang="javascript">console.log(&quot;Hello, World!&quot;);</pre>
  <p id="KBqP">V8 engine tomonidan o&#x27;girilgan bytecode:</p>
  <pre id="MjyL" data-lang="wasm">0000  H8Gd  0 0x00000000
0002  S8Kz  0 &quot;Hello, World!&quot;
0005  C1WC  0 0 1
0008  C8Yp  0 0 1</pre>
  <p id="cNsG">Interpreted tillar compile tillarga qaraganda sekinroq lekin just-in-time compilation(bu haqida keyinroq yozaman) orqali interpreted tillarni performance ini oshirish mumkin. Ko&#x27;p interpreted tillar dynamic typingni qo&#x27;llab quvvatlaydi va kamroq source size ga ham ega. Lekin memory usage ga kelganda ular ko&#x27;proq joy egallaydi. Sabab ular kodni qatorma qator ishga tushurgani uchun dastur haqida ko&#x27;proq ma&#x27;lumotni ushlab turishi kerak.</p>
  <figure id="pjsL" class="m_column">
    <img src="https://static.javatpoint.com/difference/images/compiler-vs-interpreter3.png" width="750" />
    <figcaption>Interpreted tillar qanday ishlaydi.</figcaption>
  </figure>
  <p id="6dPm"><br />Ba&#x27;zi dasturlash tillari ham compiled ham interpreted bo&#x27;lishi mumkin. Bunga misol qilib Python tilini olishimiz mumkin. Python tili interpreted til deb yuritilishiga qaramay, uning compilation stepi ham mavjud. Ya&#x27;ni CPythonga o&#x27;xshagan implementation lar interpretation va compilationni birgalikda ishlatadi. Source esa birinchi bytecode ga compile bo&#x27;lib keyin interpreter tomonidan ishga tushiriladi. Rust compiled til bo&#x27;lishiga qaramay, u ham ikkalasini kombinatsiyada ishlata oladi. Rust compilerning kodlarni to&#x27;g&#x27;ridan to&#x27;g&#x27;ri ishga tushuruvchi interpreteri mavjud. Bu testing va debugging uchun qulay. Ammo rust interpreter til sifatida shakllanatirilmagan va interpreter unchalik tez emas. Bundan tashqari, interpreter rust tilining hamma xususiyatlarini qo&#x27;llab quvvatlamaydi. Shu sabablardan rust kodini interpreter orqali ishga tushirishdan ko&#x27;ra machine kodga o&#x27;girishni  maslahat beraman.</p>
  <blockquote id="PywQ"><strong>Topshiriq</strong>: JavaScript <code>undefined</code> data type ini bytecode ga o&#x27;girilgandagi holatini izohlarda qoldiring.</blockquote>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/reflection-javascript</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/reflection-javascript?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/reflection-javascript?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>JavaScriptda reflection va Reflect API</title><pubDate>Wed, 22 Feb 2023 05:39:55 GMT</pubDate><description><![CDATA[Dasturlashda reflection - bu dasturning o'zgaruvchilarni, object property va methodlarini boshqarish qobilyati. Ho'sh javascriptda reflection bormi? ES6 gacha javascriptda reflection deb atasak bo'ladigan methodlar bo'lishiga qaramay reflection mavjud emas deyilar edi. Aslida esa Object.getOwnPropertyDescriptor(),  Object.keys(),  Array.isArray() bular klassik reflection xususiyatlardir.]]></description><content:encoded><![CDATA[
  <h2 id="u6Np">Reflection nima?</h2>
  <p id="W7qP">Dasturlashda reflection - bu dasturning o&#x27;zgaruvchilarni, object property va methodlarini boshqarish qobilyati. Ho&#x27;sh javascriptda reflection bormi? ES6 gacha javascriptda reflection deb atasak bo&#x27;ladigan methodlar bo&#x27;lishiga qaramay reflection mavjud emas deyilar edi. Aslida esa <strong>Object.getOwnPropertyDescriptor(), </strong> <strong>Object.keys(),  Array.isArray()</strong> bular klassik reflection xususiyatlardir.</p>
  <h2 id="dSuJ">Reflect</h2>
  <p id="wWjZ">ES6 bizga method va contstructor objectlarini chaqirish, propertylarn get va set qilish, ularni boshqarish imkonini beruvchi yangi <strong>Reflect </strong>global objectini taqdim etdi. <strong>Reflect </strong>constructor emas, shu sabab uni <strong>new </strong>bilan chaqirib bo&#x27;lmaydi va o&#x27;zini function sifatida ham ishlata olmaymiz. <strong>Reflect </strong>ning <strong>JSON </strong>va <strong>Math </strong>kabi hamma propertylari static hisoblanadi.</p>
  <p id="ukkX">Odatda biz constructorni chaqirish uchun quyidagi yo&#x27;ldan foydalanamiz.</p>
  <pre id="vsu1" data-lang="javascript"> const myInstance = new Model(args)</pre>
  <p id="sXqw">Reflect api orqali esa constructorlar quyidagi kabi chaqiriladi.</p>
  <pre id="9NiS" data-lang="javascript">const myInstance = Reflect.constructor(Model,args)</pre>
  <p id="w2KH">quyida esa Reflectning ba&#x27;zi bir methodlarini ko&#x27;rib chiqamiz.</p>
  <pre id="z3Bi" data-lang="javascript">// delete object.property

Reflect.deleteProperty(object,&quot;property&quot;)

//  object.property &amp;&amp; array[index]

Reflect.get(object,&quot;property&quot;)
Reflect.get(array,index)

//  object.property = value &amp;&amp; array[index] = value

Reflect.set(object,&quot;property&quot;,value)
Reflect.set(array,index,value)

// Object.keys(obj)

Reflect.ownKeys(obj) //Object.keys dan farqi bu symbollarni ham qaytaradi</pre>
  <p id="2BLg">Reflect ning boshqa static metholarini <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect" target="_blank">bu link</a> orqali o&#x27;rganib chiqishingiz mumkin. Reflect asosan Proxy handlerning traplarida ishlatiladi va ishimizni oson qiladi.</p>
  <pre id="bl1y" data-lang="javascript">const userProxy = new Proxy(user, {
  set(target,property,val){
    if(isAdmin){
      Reflect.set(target,property,value)
    }else{
      throw new Error(&quot;Ruxsat mavjud emas!&quot;)
    }
  }
})</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/proxy-javascript</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/proxy-javascript?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/proxy-javascript?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>JavaScriptda Proxy</title><pubDate>Tue, 21 Feb 2023 18:55:51 GMT</pubDate><description><![CDATA[<img src="https://www.javascripttutorial.net/wp-content/uploads/2019/12/JavaScript-Proxy.png"></img>Proxy bu object bo'lib boshqa objectni o'rab oladi va o'rab olingan object ya'ni target objectining fundamental operatsiyalarini &quot;nazorat punkti&quot;dan o'tkazgan holatda amalga oshirish imkonini beradi. &quot;Nazorat punkti&quot; handler deb ataladi va u ham object hisoblanadi. Masalan bizda age va name propertylaridan iborat user objecti mavjud.]]></description><content:encoded><![CDATA[
  <p id="oemq">Proxy bu object bo&#x27;lib boshqa objectni o&#x27;rab oladi va o&#x27;rab olingan object ya&#x27;ni target objectining fundamental operatsiyalarini &quot;nazorat punkti&quot;dan o&#x27;tkazgan holatda amalga oshirish imkonini beradi. &quot;Nazorat punkti&quot; <strong>handler</strong> deb ataladi va u ham object hisoblanadi. Masalan bizda <strong>age</strong> va <strong>name </strong>propertylaridan iborat <strong>user</strong> objecti mavjud.</p>
  <pre id="oPIl" data-lang="javascript">const user = {
  name: &quot;Hojiakbar&quot;,
  age: 20
}</pre>
  <p id="NlGs">Agar biz shu objectdan proxy yaratadigan bo&#x27;lsak, bu object ning <strong>get</strong>, <strong>set</strong>, <strong>delete </strong>va boshqa fundamental amallarni qaytadan yozishimiz yoki o&#x27;zgartirishimiz mumkin.</p>
  <pre id="qWnG" data-lang="javascript">// Proxy sintaksisi - new Proxy(targetObject,handler)

const userProxy = new Proxy(user,{
  get(targetObject,property){
    if(property in targetObject){
      return targetObject[property]
    }
    return &quot;Property mavjud emas&quot;
  }
})

console.log(userProxy.fullname) // &quot;Property mavjud emas&quot;</pre>
  <p id="77h1">Odatda biz objectda mavjud bo&#x27;lmagan property qiymatini olishga harakat qilsak <strong>undefined </strong>qaytadi, lekin biz get amalini o&#x27;zgartirish orqali <strong>undefined</strong> o&#x27;rniga o&#x27;zimiz berib yuborgan <strong>stringni </strong>qaytaradigan qildik.</p>
  <p id="01nU">Huddi shu kabi <strong>age </strong>propertysiga qiymat berayotganda validatsiyadan o&#x27;tkazadigan qilib ko&#x27;ramiz.</p>
  <pre id="b2GT" data-lang="javascript">const userProxy = new Proxy(user,{
  set(targetObject,property,value){
    if(property === &quot;age&quot;){
      if(typeof value !== &quot;number&quot;){
        throw new Error(&quot;Age number turda bo&#x27;lishi kerak!&quot;)
      }
      if(value &lt;= 18){
        throw new Error(&quot;Age 18 yoshdan katta bo&#x27;lishi kerak!&quot;)
      }
    }
    targetObject[property] = value
  }
})
userProxy.age = 17 //Error: &quot;Age 18 yoshdan katta bo&#x27;lishi kerak!&quot;
userProxy.age = 21

console.log(userProxy.age) //21
console.log(user.age) //21</pre>
  <p id="JK4S">Tepadagi misolda agar property <strong>age </strong>bo&#x27;ladigan bo&#x27;lsa unga o&#x27;rnatilayotgan qiymat 18dan yuqori va number formatda bo&#x27;lishi kerakligini yozdik va proxy orqali user objectiga o&#x27;zgartirish kiritar ekanmiz handlerimiz validatsiyadan o&#x27;tkazib oladi.</p>
  <p id="7r0w">Bu rasmda proxy aslida qanday ishlashi ko&#x27;rsatib o&#x27;tilgan.</p>
  <figure id="PeoS" class="m_column">
    <img src="https://www.javascripttutorial.net/wp-content/uploads/2019/12/JavaScript-Proxy.png" width="645" />
  </figure>
  <p id="Aj3s">Boshqa fundamental amallarni qanday o&#x27;zgartirish yoki qayta yozish mumkinligini <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy" target="_blank">bu link</a> orqali ko&#x27;rib chiqishingiz mumkin.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/function-generator</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/function-generator?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/function-generator?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Generator funksiyalar</title><pubDate>Mon, 13 Feb 2023 05:47:42 GMT</pubDate><description><![CDATA[<img src="https://img3.teletype.in/files/6c/f9/6cf97824-122d-4c07-a7ba-9936b52aeb9f.png"></img>Generator function lar nima va ular odatiy functiondan qanday farq qiladi?]]></description><content:encoded><![CDATA[
  <p id="HJoe">Generator function lar nima va ular odatiy functiondan qanday farq qiladi?</p>
  <p id="Daq3">Generator functionlar bizga funksiyaning ixtiyoriy joyida to&#x27;xtatib qo&#x27;yish va uni yana davom ettirishni nazorat qilish imkoni beradi. Ular odatiy functionlar kabi e&#x27;lon qilinadi faqatgina <strong>function </strong>keywordidan keyin <strong>*(yulduzcha)</strong> qo&#x27;yish kerak.</p>
  <pre id="tSUA" data-lang="jsx">function* myGenerator(){
  console.log(&quot;Bu mening generator funksiyadan yuborgan xabarim!&quot;)
}</pre>
  <p id="zF76"><br />Agar biz <strong>myGenerator </strong>funksiyasini chaqirsak, u odatiy function lar kabi birdaniga ishga tushmaydi, balki u bizga iterable generator object qaytaradi.</p>
  <figure id="AGiT" class="m_column">
    <img src="https://img3.teletype.in/files/6c/f9/6cf97824-122d-4c07-a7ba-9936b52aeb9f.png" width="652" />
  </figure>
  <p id="SZCd">Bizning generator funksiyamiz endi iterable object ekan biz uning ichidagi kodlarini <strong>next()</strong> methodi orqali ishga tushiramiz. U esa bizga <strong>value </strong>va <strong>done </strong>dan iborat <strong>object </strong>qaytaradi.</p>
  <figure id="VsXH" class="m_column">
    <img src="https://img4.teletype.in/files/f7/be/f7bed31e-9930-4860-91dd-a99a7edf5bb7.png" width="513" />
  </figure>
  <p id="O8VY"><strong><em>yield </em></strong>keywordi orqali biz funksiyani to&#x27;xtatib qo&#x27;yishimiz va qiymat qaytarishimiz mumkin(agar qiymat bo&#x27;lmasa undefined qaytadi).</p>
  <figure id="Jsvz" class="m_column">
    <img src="https://img4.teletype.in/files/b5/58/b558f807-b331-4870-a097-acf3b5f8553e.png" width="535" />
  </figure>
  <p id="2ZKz">Har safar <strong>next()</strong> methodini chaqirganimizda <strong>yield </strong>gacha bo&#x27;lgan kodlar ishga tushadi va o&#x27;sha joyda to&#x27;xtab qoladi. Keyingi nextda esa to&#x27;xtagan joydan navbatdagi yieldgacha bo&#x27;lgan kodlar ishga tushadi.</p>
  <p id="O4pv"><strong><em>next </em></strong>methodining optional(ya&#x27;ni ixtiyoriy) bo&#x27;lgan atributi bor va bu orqali biz functionimizga qiymat berib yuboramiz. Buni quyidagicha amalga oshirak bo&#x27;ladi</p>
  <figure id="xEHP" class="m_column">
    <img src="https://img1.teletype.in/files/8f/80/8f8047b1-8058-486a-9d78-6466d66085f2.png" width="1206" />
  </figure>
  <p id="NJ8f"><strong><em>yield </em></strong>qiymat qaytargani va faqat ungacha bo&#x27;lgan code lar ishga tushgani uchun biz newValue ning qiymatini 2 chi <strong><em>next </em></strong>chaqirishimizda berib yuborishimiz kerak.</p>
  <figure id="dgsN" class="m_column">
    <img src="https://img4.teletype.in/files/f1/51/f1515d7e-aae0-43de-8701-f0fe3bf49265.png" width="672" />
  </figure>
  <p id="v5wa">ko&#x27;rib turganingiz kabi birinchi nextga qiymat berib yuborganimiz bilan u qiymat newValuening qiymatiga tenglashmaydi</p>
  <p id="biQx">yieldni ham generatorga aylantirish mumkinmi? Mumkin. buning uchun uning oxiriga *(yulduzcha) qo&#x27;ysangiz kifoya. yield orqali qaytargan qiymatimiz ham iteratsiya bolib ketadi.</p>
  <pre id="EU77" data-lang="javascript">yield* [1,2,3,4]</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/nullish-coalaescing-operator</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/nullish-coalaescing-operator?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/nullish-coalaescing-operator?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Nullish Coalescing Operator</title><pubDate>Mon, 03 Oct 2022 04:24:48 GMT</pubDate><description><![CDATA[JavaScriptning 2ta qiymat qabul qiluvchi va agar birinchi qiymat null yoki undefined bo'lsagina ikkinchi qiymatni qaytaruvchi Nullish Coalescing Operatori(??).]]></description><content:encoded><![CDATA[
  <p id="RUcy">JavaScriptning 2ta qiymat qabul qiluvchi va agar birinchi qiymat <strong>null </strong>yoki <strong>undefined </strong>bo&#x27;lsagina ikkinchi qiymatni qaytaruvchi <strong>Nullish Coalescing Operatori(??)</strong>.</p>
  <h2 id="57ee">Tanishtiruv</h2>
  <p id="4Wju">ES2020 bizga 2ta so&#x27;roq belgisi(<u>??</u>) bilan ifodalanadigan Nullish Coalescing Operatorini tanishtirdi. U 2ta qiymat qabul qiluvchi mantiqiy operator.</p>
  <pre id="bOEb" data-lang="javascript">value1 ?? value2</pre>
  <p id="b7a4">nullish coalescing operatori qachonki birinchi qiymat(<strong>value1</strong>) <strong>null </strong>yoki <strong>undefined </strong>ga teng bo&#x27;lsagina, ikkinchi qiymatni(<strong>value2</strong>)ni qaytaradi. Texnik jihatdan u quyidagi kodga ekvivalent bo&#x27;la oladi.</p>
  <pre id="2Dbh" data-lang="javascript">const result = value1;

if([null,undefined].includes(result)){
  result = value2
}</pre>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <blockquote id="eFh0">Agar qiymat <strong><u>null</u></strong> yoki <strong><u>undefined </u></strong>ga teng bo&#x27;lsa u nullish value(qiymat) bo&#x27;ladi.</blockquote>
  </section>
  <p id="64V8">Quyida nullish coalescing operatoriga 2ta misol keltiramiz.</p>
  <pre id="WjYf" data-lang="javascript">const name = null ?? &quot;Hojiakbar&quot;
console.log(name) //Hojiakbar</pre>
  <pre id="ugUh" data-lang="javascript">const age= undefined ?? 20
console.log(age) //20</pre>
  <h2 id="Kf03">Nima uchun nullish coalescing operatori</h2>
  <p id="w7lm">Ko&#x27;pincha default value(qiymat)ni variable(o&#x27;zgaruvchi)ga olish uchun mantiqiy <strong>OR(||) </strong>operatoridan foydalanamiz.</p>
  <pre id="QJwa" data-lang="javascript">let count;
let result = count || 1;
console.log(result) //1</pre>
  <p id="90Hz">Bu holatda <strong>count </strong>o&#x27;zgaruvchisi <strong>undefined </strong>qiymatiga teng va mantiqiy <strong>OR </strong>operatori uni <strong><u>false </u></strong>sifatida tushunib <strong><u>1 </u></strong>qiymatini qaytaradi. Ammo, bu operatorning kamchiligi agar count <strong><u>0 </u></strong>yoki <strong>&quot; &quot;</strong>(bo&#x27;sh string)ga teng bo&#x27;lsa ham bu qiymatlarni <u><strong>false</strong> </u>deya tushunib yana <strong><u>1</u></strong>ni qaytaradi.</p>
  <pre id="nvma" data-lang="javascript">let count = 0;
let result = count || 1;
console.log(result) //1</pre>
  <pre id="HqkT" data-lang="javascript">let count = &quot;&quot;;
let result = count || 1;
console.log(result) //1</pre>
  <p id="UTig">nullish coalescing operatori bunday muammodan qochishda yordam beradi, chunki u ikkinchi qiymatni birinchi qiymat faqatgina null yoki undefined bo&#x27;lsagina qaytaradi.</p>
  <h2 id="URt6">AND(&amp;&amp;) va OR(||) operatorlari bilan ishlatish</h2>
  <p id="1Isw">Agar siz nullish coalescing operatorini mantiqiy OR yoki AND operatorlari bilan to&#x27;g&#x27;ridan to&#x27;g&#x27;ri ishlatsangiz <strong>SyntaxError </strong>yuzaga keladi.</p>
  <pre id="dGT2" data-lang="javascript">const result = null || undefined ?? &quot;OK&quot;; //SyntaxError</pre>
  <p id="2oNL">Bunday errordan qochish uchun chapdagi ifoda(expression)ni qavslar bilan o&#x27;rash kerak.</p>
  <pre id="JZXY" data-lang="javascript">const result = (null || undefined) ?? &quot;OK&quot;; 
console.log(result) //OK</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-11</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-11?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-11?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Shartli ko'rsatish yoki rendering | Hooks qo'llanma 11</title><pubDate>Fri, 30 Sep 2022 05:27:09 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/dd/ff/ddff0cba-ed2d-4ac8-b19a-8f7f8487372e.png"></media:content><description><![CDATA[<img src="https://images.ctfassets.net/ooa29xqb8tix/2fElH82O4Qiy1wslODxOZ4/a50f6940d2bb0438114c790d63188909/Screen_Shot_2021-02-25_at_11.49.20_AM.png"></img>Turli shart va statelarga ko'ra turli UI larni ko'rsatish.]]></description><content:encoded><![CDATA[
  <p id="vTcQ">Turli shart va statelarga ko&#x27;ra turli <strong>UI </strong>larni ko&#x27;rsatish.</p>
  <p id="2p3z">Reactda shartli ko&#x27;rsatish yordamida dinamik dasturlar yasashimiz qulay va oson. Shartli ko&#x27;rsatish bu biror shartga ko&#x27;ra turli UI element yoki componentlarni ko&#x27;rsatish. </p>
  <h2 id="fKFH">CodeSandbox link</h2>
  <p id="QVmv">Bu darsdagi to&#x27;liq kodni quyidan topa olasiz: <a href="https://codesandbox.io/s/conditional-rendering-react-l578jj" target="_blank">https://codesandbox.io/s/conditional-rendering-react-l578jj</a></p>
  <h2 id="Ruql">Mantiqiy AND(Va) operatori</h2>
  <p id="yeca">Mantiqiy AND(<strong>&amp;&amp;</strong>) operatori ba&#x27;zi shartlarga ko&#x27;ra turli <strong>UI </strong>larni ko&#x27;rsatish uchun ishlatilina oladi. Aytaylik biz biror xabar masalan <strong>&quot;You have 1 new notification&quot; </strong>ni xabar 1ta yoki undan ko&#x27;p bo&#x27;lsa ko&#x27;rsatamiz. Birinchi navbatda <strong>NotificationCard </strong>componentini yaratamiz. Bu oddiy local state ga bog&#x27;liq matn bo&#x27;ladi.</p>
  <pre id="uI9o" data-lang="jsx">import React, { useState } from &quot;react&quot;;

const NotificationCard = () =&gt; {
    const [notificationNumber, setNotificationNumber] = useState(1)

    return (
        &lt;div&gt;
            &lt;p&gt;You have {notificationNumber} new notification &lt;/p&gt;
        &lt;/div&gt;
    );
};

export default NotificationCard;</pre>
  <p id="lCkb">Keyin biz bu componentga mantiqiy <strong>AND(&amp;&amp;)</strong> operatorini ishlatib shart qo&#x27;shamiz. <strong>notificationNumber </strong>1ga teng yoki katta bo&#x27;lsagina matnni ko&#x27;rsat degan.</p>
  <pre id="7l1r" data-lang="jsx">&lt;div&gt;
  {notificationNumber &gt;= 1 &amp;&amp;
    &lt;p&gt;You have {notificationNumber} new notification&lt;/p&gt;}
&lt;/div&gt;</pre>
  <figure id="XrNT" class="m_column">
    <img src="https://images.ctfassets.net/ooa29xqb8tix/2fElH82O4Qiy1wslODxOZ4/a50f6940d2bb0438114c790d63188909/Screen_Shot_2021-02-25_at_11.49.20_AM.png" width="1728" />
  </figure>
  <p id="PQe1"><strong>notificationNumber  </strong>boshlang&#x27;ich qiymatini 0ga o&#x27;zgartirib ko&#x27;ring va matn yo&#x27;qolganini ko&#x27;rasiz.</p>
  <pre id="3imb" data-lang="jsx">const [notificationNumber, setNotificationNumber] = useState(0)</pre>
  <h2 id="NplT">If...else shartli operator</h2>
  <p id="vK8D"><strong>If...else</strong> operatori yordamida shartlarni belgilashimiz va uning <strong>true </strong>yoki <strong>false </strong>ekanligiga qarab biror narsa qilishimiz mumkin. Quyidagi misolda biz <strong>isLoggedIn </strong>ning qiymatiga qarab <strong>Logout </strong>yoki <strong>Login</strong> buttonlarini ko&#x27;rsatamiz.</p>
  <pre id="rKcU" data-lang="jsx">import React, { useState } from &quot;react&quot;;

const SignInButton = () =&gt; {
    const [isLoggedIn, setIsLoggedIn] = useState(true);

    if (isLoggedIn) {
        return &lt;button&gt;Logout&lt;/button&gt;;
    } else {
        // Agar foydalanuvchi ro&#x27;yxatdan o&#x27;tmagan bo&#x27;lsa
        return &lt;button&gt;Login&lt;/button&gt;;
    }
};

export default SignInButton;</pre>
  <p id="A3qe"><strong>isLoggedIn</strong> ning boshlang&#x27;ich qiymatini falsega oz&#x27;gartirib ko&#x27;ring va <strong>Logout </strong>buttoni emas <strong>Login </strong>buttonini ko&#x27;ring.</p>
  <pre id="5SU1" data-lang="jsx">const [isLoggedIn, setIsLoggedIn] = useState(false)</pre>
  <figure id="9Fsw" class="m_column">
    <img src="https://images.ctfassets.net/ooa29xqb8tix/3iXsmwzkZk6FeONzSxyVX7/9c04711d9892b24364ba62ba95f6e3b3/Screen_Shot_2021-03-16_at_4.35.00_PM.png" width="1594" />
  </figure>
  <blockquote id="m9gn">Eslatma: <strong>If...else</strong> shartli operatori faqat <strong>return</strong>ning tashqarisida ishlaydi. Return ning ichida esa <strong>ternary </strong>operatoridan foydalanamiz.</blockquote>
  <h2 id="ywSS">Ternary Operatoridan foydalanish</h2>
  <p id="RxZk"><strong>if...else</strong> statement ining muqobili bu <strong>ternary operatori </strong>hisoblanadi. Biz tepadagi kabi misoldan foydalanamiz, lekin bu safar <strong>ternary </strong>bilan shartli ko&#x27;rsatishni bajaramiz.</p>
  <pre id="3Ybh" data-lang="jsx">const SignInButton = () =&gt; {
    const [isLoggedIn, setIsLoggedIn] = useState(true);

    return (
        &lt;div&gt;
            {isLoggedIn ? &lt;button&gt;Logout&lt;/button&gt; : &lt;button&gt;Login&lt;/button&gt;}
        &lt;/div&gt;
        );
}

export default SignInButton</pre>
  <p id="sEcp">Natija<strong> if...else</strong> bilan bir xil faqat kod <strong>toza </strong>va <strong>o&#x27;qishga</strong> juda oson.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-10</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-10?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-10?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>Props haqida | Hooks qo'llanma 10</title><pubDate>Thu, 29 Sep 2022 06:54:16 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/7d/d8/7dd8ad42-5e45-403c-950c-0b247b8da190.png"></media:content><description><![CDATA[<img src="https://images.ctfassets.net/ooa29xqb8tix/7vsiOha74W7CD1Ip3AEZmo/e3bd78ce8cae819f7312d41e4bb57f0f/Screen_Shot_2021-02-24_at_6.17.10_PM.png"></img>Ona componentdan bola componentga ma'lumot uzatuvchi propslar]]></description><content:encoded><![CDATA[
  <p id="ESol">Ona componentdan bola componentga ma&#x27;lumot uzatuvchi propslar</p>
  <p id="VZNt">Props bu propertiesning qisqartmasi va componentlar orasida ma&#x27;lumot almashinuvi uchun ishlatiladi. Ona componentdan bola componentlarga ma&#x27;lumot yuborish props orqali amalga oshiriladi.</p>
  <h2 id="fKFH">CodeSandbox link</h2>
  <p id="QVmv">Bu darsdagi to&#x27;liq kodni quyidan topa olasiz: <a href="https://codesandbox.io/s/react-props-1ux0vf" target="_blank">https://codesandbox.io/s/react-props-1ux0vf</a></p>
  <h2 id="NhE3">Ona va bola componentlar</h2>
  <p id="kfta">Ona va bola componentlar orasidagi farq nima?</p>
  <p id="ca7G">Aytaylik bizda Card componenti mavjud. Cardning ichida esa bizda button bor. Button Card componentning ichida bo&#x27;lgani uchun, biz buttonni bola component, Cardni esa ona component deya nomlaymiz.</p>
  <figure id="KVKa" class="m_column">
    <img src="https://images.ctfassets.net/ooa29xqb8tix/7vsiOha74W7CD1Ip3AEZmo/e3bd78ce8cae819f7312d41e4bb57f0f/Screen_Shot_2021-02-24_at_6.17.10_PM.png" width="1800" />
  </figure>
  <h2 id="k2Rb">Ona component yaratish</h2>
  <p id="kS0D">Ishimizni Ona component ya&#x27;ni Card yaratishdan boshlaymiz</p>
  <pre id="28c0" data-lang="jsx">import React from &quot;react&quot;;
import styled from &quot;styled-components&quot;;

const MyCard = () =&gt; {
    return &lt;Wrapper&gt;Button aktiv bo&#x27;lishi kerak&lt;/Wrapper&gt;;
};

export default MyCard;

const Wrapper = styled.div&#x60;
    background: #ff884b; 
    box-shadow: inset 0 0 0 0.5px rgba(255, 255, 255, 0.6); 
    border-radius: 30px; 
    padding: 20px; 
    max-width: 300px; 
    width: 100%; 
    display: grid; 
    gap: 30px; 
    justify-items: center; 
    align-items: center; 
    font-family: Segoe UI, sans-serif; 
    margin-left: auto; 
    margin-right: auto;
&#x60;;</pre>
  <h2 id="tzQn">Bola component yaratish</h2>
  <p id="cWKj">Navbat, Cardning bola componentini yaratishga keldi, button componentni. Button argument sifatida props qabul qiladi. Style berilgan buttonga isActive nomli prop berib yuboramiz va shu propga qarab uning background colorini o&#x27;zgartiramiz.</p>
  <pre id="WMTr" data-lang="jsx">import React from &quot;react&quot;;

const MyButton = (props) =&gt; { 
    return (
      &lt;button style={{ 
        background: &#x60;${ 
           props.isActive 
             ? &quot;linear-gradient(91.4deg, #2fb8ff 0%, #9eecd9 100%)&quot; 
             : &quot;grey&quot; }&#x60;, 
        border: &quot;none&quot;, 
        padding: &quot;10px 15px&quot;, 
        borderRadius: &quot;12px&quot; 
       }} &gt; 
         Click me! 
       &lt;/button&gt;
     )
};

export default MyButton;</pre>
  <h2 id="J6Vi">Buttonni bola component sifatida qo&#x27;shish</h2>
  <p id="DMC7">Biz Card fayliga kirib Button componentini yuqorida import qilib olamiz.</p>
  <pre id="dCjU" data-lang="jsx">import MyButton from &quot;./Button&quot;;</pre>
  <p id="RSF0">MyButton componentini MyCard componentining return qismida ishlatamiz. MyButtonga isActive propsni berish ham esdan chiqmasligi zarur.</p>
  <pre id="R3dB" data-lang="jsx">const MyCard = () =&gt; {
    return (
        &lt;Wrapper&gt;
            Button aktiv bo&#x27;lishi kerak
            &lt;MyButton isActive={true} /&gt; 
            {/*isActive propsni berish esdan chiqmasin*/}
        &lt;/Wrapper&gt;
    );
};</pre>
  <p id="4NhB">Endi siz isActivening valuesini o&#x27;zgartirsangiz buttonning backgroundi ham o&#x27;zgaradi.</p>
  <h2 id="Kl3q">Stylelar bilan yakuniy kod</h2>
  <p id="J2Q6">Card componenti</p>
  <pre id="4tYJ" data-lang="jsx">import React from &quot;react&quot;;
import styled from &quot;styled-components&quot;;
import MyButton from &quot;./Button&quot;;

const MyCard = () =&gt; {
    return (
        &lt;Wrapper&gt;
            Button aktiv bo&#x27;lishi kerak
            &lt;MyButton isActive={true} /&gt; 
            {/*isActive propsni berish esdan chiqmasin*/}
        &lt;/Wrapper&gt;
    );
};

const Wrapper = styled.div&#x60;
    background: #ff884b; 
    box-shadow: inset 0 0 0 0.5px rgba(255, 255, 255, 0.6); 
    border-radius: 30px; 
    padding: 20px; 
    max-width: 300px; 
    width: 100%; 
    display: grid; 
    gap: 30px; 
    justify-items: center; 
    align-items: center; 
    font-family: Segoe UI, sans-serif; 
    margin-left: auto; 
    margin-right: auto;
&#x60;;</pre>
  <p id="eyWU">Button komponent</p>
  <pre id="oPUv" data-lang="jsx">import React from &quot;react&quot;;

const MyButton = (props) =&gt; { 
    return (
      &lt;button style={{ 
        background: &#x60;${ 
           props.isActive 
             ? &quot;linear-gradient(91.4deg, #2fb8ff 0%, #9eecd9 100%)&quot; 
             : &quot;grey&quot; }&#x60;, 
        border: &quot;none&quot;, 
        padding: &quot;10px 15px&quot;, 
        borderRadius: &quot;12px&quot; 
       }} &gt; 
         Click me! 
       &lt;/button&gt;
     )
};

export default MyButton;</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-9</guid><link>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov</link><comments>https://teletype.in/@hojiakbar_nurmuhammadov/react-hooks-9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hojiakbar_nurmuhammadov#comments</comments><dc:creator>hojiakbar_nurmuhammadov</dc:creator><title>useRef hooki | Hooks qo'llanma 9</title><pubDate>Thu, 29 Sep 2022 06:02:56 GMT</pubDate><description><![CDATA[JavaScriptdagi getElementById ni o'rnini bosuvchi useRef hooki.]]></description><content:encoded><![CDATA[
  <p id="vow6">JavaScriptdagi getElementById ni o&#x27;rnini bosuvchi useRef hooki.</p>
  <p id="IlTl"><strong>useRef </strong><a href="http://vanilla-js.com/" target="_blank">Vanilla JavaScript</a>dagi <strong>getElementById</strong>, <strong>getElementByClassName </strong>yoki <strong>querySelectors </strong>larni o&#x27;rnini bosuvchi ko&#x27;p ishlatiladigan hooklardan biri. Boshqa so&#x27;z bilan aytganda, dasturingizdagi elementni belgilab olish va uni qachon hohlasangiz chaqirish imkonini beradi. Bu bo&#x27;limda <strong>useRef</strong>niqanday ishlatishni o&#x27;rganamiz.</p>
  <h2 id="fKFH">CodeSandbox link</h2>
  <p id="QVmv">Bu darsdagi to&#x27;liq kodni quyidan topa olasiz: <a href="https://codesandbox.io/s/react-useref-tvebmc" target="_blank">https://codesandbox.io/s/react-useref-tvebmc</a></p>
  <h2 id="PhU5">Componentingiz yarating</h2>
  <p id="PZsb">Button va Inputdan iborat componentni yaratamiz va button bosilganda,<strong> inputdagi qiymat/value </strong>xabar(alert) sifatida chiqadi.</p>
  <pre id="jdKM" data-lang="jsx">import React from &quot;react&quot;;

const MyButton = () =&gt; {
    return (
       &lt;&gt;
         &lt;input type=&quot;text&quot; /&gt;
         &lt;button onClick={() =&gt; alert(&quot;&quot;)}&gt;
           Bosing
         &lt;/button&gt;
       &lt;/&gt;
    );
};

export default MyButton;</pre>
  <h2 id="bhUz">Import hook</h2>
  <p id="tX2Z">Faylning yuqori qismida React kutubxonasidan <strong>useRef </strong>hookini import qilib olamiz.</p>
  <pre id="cSwI" data-lang="jsx">import React, { useRef } from &quot;react&quot;</pre>
  <h2 id="LDDx">ref yaratish</h2>
  <p id="XwIN"><strong>useRef </strong>hooki yordamida ref yartamiz. Qavslar ichida boshlang&#x27;ich qiymat beramiz. Odatda bu <strong>null </strong>yoki <strong>undefined </strong>bo&#x27;ladi.</p>
  <pre id="9PJj" data-lang="jsx">const ref = useRef(null)</pre>
  <p id="cVbB">Keyin esa bu refni input elementimizga beramiz.</p>
  <pre id="zKxq" data-lang="jsx">&lt;input type=&quot;text&quot; ref={ref} /&gt;</pre>
  <p id="BxXx">useRef doimo ayni damdagi objectni qaytaradi va haqiqiy HTML elementini olishimiz uchun biz ref.current ni ishga solamiz. Button bosilganda inputning valuesi alert sifatida chiqishini uchun quyidagicha amalga oshiramiz.</p>
  <pre id="yhwo" data-lang="jsx">&lt;&gt;
  &lt;input type=&quot;text&quot; ref={ref} /&gt;
  &lt;button onClick={() =&gt; alert(ref.current.value)}&gt;
    Bosing
   &lt;/button&gt;    
&lt;/&gt;</pre>
  <h2 id="y0vX">Stylelar bilan yakuniy kod</h2>
  <pre id="lmyq" data-lang="jsx">import React, { useRef} from &quot;react&quot;;
import styled from &quot;styled-components&quot;;

const MyButton = () =&gt; {
    const ref = useRef(null);

    return (
        &lt;&gt;
          &lt;input type=&quot;text&quot; ref={ref} /&gt;
          &lt;Button onClick={() =&gt; alert(ref.current.value)}&gt;
            Bosing
          &lt;/Button&gt;    
        &lt;/&gt;
    );
};

export default MyButton;

const Button = styled.button&#x60;
    background: linear-gradient(91.4deg, #2fb8ff 0%, #9eecd9 100%);
    padding: 2px 25px;
    border: none;
    border-radius: 30px;
    color: #fff;
    font-weight: bold;
    font-family: Segoe UI, sans-serif;
    cursor: pointer;

    :focus {
        outline: none;
    }
&#x60;;</pre>

]]></content:encoded></item></channel></rss>