Brogrammist
1.18K subscribers
96 photos
9 videos
1 file
86 links
Veb-dasturlash bo'yicha kamtarona bilim va tajribalarimni ulashaman.

Sayt: https://diyorbek.blog

YouTube: https://youtube.com/@brogrammistuz

Insta: https://instagram.com/brogrammistuz
Download Telegram
Natija qanday bo'ladi?
Kodda chalg’ituvchi kichik narsa bor edi. Ko’pchilik bu sintaksisni bilmaydi. Agar qavs ichida qiymatlar vergul bilan ketma-ket yozilsa, faqat oxirgisi olinadi:


let i = (0,1,2,3);
console.log(i); // 3



Qavs ichida xohlagan ishingizni qilsangiz bo’ladi. Masalan setTimeout:


let i = (setTimeout(()=>alert()), 2);
console.log(i); // 2

// keyin alert ishlaydi

Aytgancha setTimeout 2-parametrini berish shart emas. O’zi nol bo’lib ketadi:


setTimeout(()=>alert());
// bir xil
setTimeout(()=>alert(), 0);
👍13
Lexical scopes in for-loop

For-loop strukturasi 4 ta asosiy ifodaviy qismlardan iborat:


for (ifoda1; ifoda2; ifoda3) {
ifoda4;
}


1-ifoda sikl boshida FAQAT BIR MARTA ishga tushadi. Bu yerda biz ko’pincha o’zgaruvchilar e’lon qilamiz, boshlag’ich holatni belgilaymiz.

2-ifoda har safar sikl boshida ishga tushadi. Bu yerga sikl tugatilish sharti qo’yiladi.

4-ifoda siklimiz tanasi. 2-ifodadan ROST qiymatini olar ekanmiz, 4-ifoda har doim bajariladi.

3-ifoda har safar sikl tugaganida ishga tushadi. Bu yerda sikl yakunlangaida qilinishi kerak bo’lgan amal(lar)ni joylaymiz.

JavaScript’da “lexical scope” tushunchasi mavjud. Qisqacha ma’nosi leksik maydon. Yuqoridagi for-loop strukturasidagi ifodalarning har biri o’z leksik maydonini yarata oladi.

Misolga qaraydigan bo’lsak, setTimeout 1-ifodaning “lexical scope”ida joylashgan. Ifoda esa bir martagina ishga tushadi. O’zgaruvchi let orqali e’lon qilingani uchun “i”ning qiymati setTimeout uchun o’shaligicha qolaveradi.

1-ifoda ekvivalenti bunday bo’ladi:


let i = (setTimeout(()=>console.log(i)), 0);

// tushunarliroq qilib yozsak
{
let i = 0;
setTimeout(()=>console.log(i), 0);
}


Shunday ekan, for-loop’da bo’ladigan keyingi o’zgarishlarning setTimeout ichidagi “i”ga hech qanday tasiri yo’q. Chunki u alohida “lexical scope”da.

Javob: 0
👍9
Bunaqangi kod va tushunarsiz tushuntirishdan keyin...
😁30👍2
“Let” o’zgaruvchi “For-loop”ni sekinlashtiradi

Kechagi mavzuni davom ettiradigan bo’lsak, for-loop ifodaviy qismlarining barchasida leksik maydon hosil qilish mumkinligini aytgandim. Agar for-loop uchun iterativ o’zgaruvchini “let” orqali e’lon qilsak, har bir iteratsiyada alohida leksik maydon hosil bo’ladi. Bu leksik maydonlar o’zidan oldigisiga ham bog’langan bo’ladi. Chunki yangi leksik maydonga undan oldigisidagi o’zgaruvchi qiymatlari nusxalab ko’chiriladi. Endi tassavur qiling ichma-ich yozilgan katta for-loop’lar “let” bilan ishlasa qanday gigant “lexical scope graph” hosil qiladi.

Agar JS engine’lar bu holatda shuncha ish qilyotgan bo’lsa, kodimiz tezligi tushib ketishi turgan gap. Bu bo’yicha V8 engine’da alohida raport qilingan. U yerdagi muhokamani o’qisangiz iloji boricha “for(;;)” strukturasini ishlatmaslik tavsiya qilingan. Albatta agar tezlik muhim bo’lsa. Uning o’rniga “for-of” yoki “for-in”lardan foydalanish nisbatan tezroq bo’lar ekan.

Agar “for(;;)”ni ishlatish chorasiz bo’lib qolsa, uni “var” bilan ishlatish ham kod tezligini oshiradi. Chunki bu holatda har bir iteratsiyada leksik maydonlar zanjiri hosil bo’lmaydi.

Benchmarking uchun kichik na’munaga link qoldiraman. Kodni bir necha marta yuritib ko’rsangiz, “var for-loop” nisbatan tezroq, “let for-loop” esa eng sekini ekaniligini ko’rasiz.
👍20
❗️DISCLAIMER ❗️
Tepagi post orqali endi hamma for-loop larni refaktor qilib chiqinglar, bo'lmasa dasturlaringiz qotib qoladi, demoqchi emasman. Tezlik deganda nisbiy tezlik nazarda tutilgan. Farq nanosekundlarda. Umuman dasturinguz qanchalik tez ishlashi ko'pincha bunday faktorlarga aloqador bo'lmaydi. Agar tezlik siz uchun muhim bo'lsa, JavaScript'dan boshqa tilni ishlatishni maslahat beraman.
👍10
Number.MIN_VALUE > 0 === true ?

JavaScript’ni yomon ko’rish uchun mana yana bitta sabab. Ma’lum bo’lishicha, Number.MIN_VALUE noldan katta eng kichik son ekan. Judayam chalg’ituvchi nom.

Agar sizga eng kichik butun son kerak bo’lsa Number.MIN_SAFE_INTEGER ni ishlating.
🤔9👍61
Dasturlash, xususan frontend bo'yicha bilimlarimni oshirishda ushbu manbaalardan foydalanaman:

Bloglar:
- https://css-tricks.com/
- https://www.joshwcomeau.com/
- https://kentcdodds.com/

Telegram kanallar, har xil mavzularda zo'r maqolalar post qilinadi:
- @thedevs
- @frontend_1
- @godofjs

YouTube:
- Google Chrome Developers
- HTTP 203, GUI challenge, The CSS Podcast seriyalarini asosan kuzatib boraman.
- JS Conf
- Fireship
👍15🔥3
IIFE (Immediately Invoked Function Expression)

Yaqinda Go dasturlash tilida IIFE sintaksis juda soddaligini ko'rib JavaScriptda ham shunday bo'lganda edi deb qoldim. Chunki Go'da funksiyani ortiqcha qavs ichiga olish shart emas ekan:

func(num int) int {
fmt.Println(num * num)
}(5)

JavaScript'da esa xuddi shu ifoda bunday bo'lardi:

(function(num) {
console.log(num * num)
})(5)

Shuni qavslarsiz qilsa bo'ladimi?

Ha! Faqat oldiga void qo'yish kerak bo'ladi:

void function(num) {
console.log(num * num)
}(5)

Agar asinxron funksiya bo'lsa, void yoki await qo'yish mumkin:

await async function(num) {
console.log(num * num)
}(5)

Lekin void ishlatganimizda funksiya qiymati undefined bo'lib qoladi. Shuning uchun uni faqat "side-effect" uchun ishlatish mumkin.
Shunaqa gaplar.
👍29🔥6
Git bo'yicha maslahat

Faylga o'zgartirish kiritish va faylning nomini o'zgartirishni bitta commit'da qilmang. Chunki Git buni eski nomli fayl o'chirildi va yangi fayl qo'shildi deb yozadi.

Bu narsaning minus tarafi faylning o'zgartirishlar tarixi yo'qlib ketadi. Men o'zim ko'pincha biror kod nega aynan shunday yozilganini bilish uchun fayl tarixiga qarayman. Lekin eng uzog'i bilan o'sha fayl yaratilgan paytgacha borish mumkin.

Agar yuqoridagi vaziyat bo'lgan bo'lsa, bu sizni asabingizni buzishi aniq. Chunki hech kim butun boshli PR o'zgarishlarini, hamma fayllarni tekshirib o'tirgisi kelmasa kerak.

Shuning uchun hamkasblarinigizga va o'zingizga rahmingiz kelsin, fayl nomini o'zgartirish yoki boshqa joyga ko'chirishni alohida commit'da bajaring. 🙂

(Agar fayl tarixi o'chmasligini oldini oladigan boshqa usullar bo'lsa, hamma bilan bo'lishing.)
👍25🔥3👏2
Forwarded from Azimjon's Fikrlog
2019-yil Astana shahriga borgandik.

Odamlar orasida "rehmet"dan boshqa hamma gap rus tilida gapirilayotganini, farzandlariga yoshligidan faqat rus tilida gapirayotganligini ko'rib rosa hafa bo'lgandim.

1 oy o'tib Varshavaga keldim. Bu yerda ham bir Qozog'istonlik inson bilan tanishib, biroz vaqt birga ishlagandik. "Nega qozoq tilini bilmaysan" desam, maktabda yaxshi o'qitmagan degandi. Lekin oiladachi?

Yevropadagi hamma davlatda o'zini tili bor. Hamma ingliz tilini bilsa ham, kutubxonalari o'zlarini tilidagi kitoblar bilan to'la. Konferensiyalari ham o'zlarini tilida bo'ladi.

Men ham ilgari ingliz tilida blog yozardim. Polshaga kelib, bizning ham tilimiz polyak tilidek rivojlangan bo'lsa qanday zo'r bo'lardi deb rosa orzu qilardim. O'zimdan boshladim: o'sha kundanoq hamma maqolalarimni o'zbek tilida yozishni boshlagandim.
👍29👏3😢2
Dasturlashga oid atamalarni tarjima qilish haqida

(Mavzu ochilganda o'z fikrlarimni ham bildiray dedim.)

“Python”ning o’zbekchasi nima bo’ladi?

Paytonmi?

Pitonmi?

Yoki Paysondir?

Bu tilning nomini har kim o’zicha aytadi. Ayniqsa o’rganishni endi boshlaganlar orasida ko’pchilik har xil ataydi. Sababi oddiy, o’zbek tilida zamonaviy dasturlash atamalari standarti yo’q!

Piton dasturlash tili bunga bir misol holos. Shu paytgacha o’zbek tilida qancha dasturlashga oid maqolalar o’qigan bo’lsam, hammasida inglizcha so’zlar tog’ridan to’g’ri ishlatilib ketilgan. Na qo’shtirnoq, na qavs bilan ajratilgan, na izoh berilgan.

*Ha endi, dasturchi bo’gandan keyin bu inglizcha so’zlarni bilishiyam kerakda!*

To’g’ri bilishi kerak. Lekin bu degani ularni o’zbekchasi bo’lmasin, tarjima qilinmasin degani emas! Kechirib qo’yasiz.

*Tarjima qilish qiyin, o’zbek tili unchalik boy emas. Tajima qilsa ma’no o’zgarib qo’pol bo’lib qoladi.*

Asl o’zbekcha so’z bo’lishi shartmi? Sizga savol, “kompyuter” so’zi o’zbekcha so’zmi?

Til boy bo’lmasa, uni boyitishning usulari bor! Bu borada o’zimizdagi tarjimonlar bilan maslahatlashish niyatim bor o’zi.

O’zbek tilida dasturlashga oid atamalar alternativi bo’lishi shart. Bu ish ertami-kechmi qilinadi. Hozirdan harakat qilish kerak. Agar hozirdan qilinmasa ertaga chala savodlar tarjima qilishni boshlaydi baribir. Keyin tuppa-tuzuk “ma’lumotlar bazasi”ni “berilganlar bazasi” deb o’tiramiz.

O’zbekcha matnda boshqa tildagi so’zlarni aralashtirib ishlatish o’ta noqulay. O’zimning maqolalarim bunga bir misol. Qo’shtirnoqlar to’lib ketadi. Ayniqsa ingliz tilida so’zlar yozilishi va o’qilishi har xil. O’zbekcha matnga bunaqa so’zlarni hadeb kiritaverish o’zbek tilining saviyasiga ham tasir qiladi. Tilni hurmat qilish kerak.

O’zbek tilining shu sohadagi lugati ingliz tiliga tobe bo’lib qolishi yaxshi emas.

Polshada dasturlash bo’yicha barcha kitoblar tarjima qilingan. Atamalar deyarli to’ligicha polyakchaga tarjima qilingan. Bu fakt axborot texnologiyalari sohasi polyak millatning o’zida qanchalik rivojlanganidan dalolat beradi. Ana endi mana shu mezon bilan o’zbek tiliga nazar solaylik. Juda achinarli.

© @brogrammist
👍28
Date obyektiga noreal sana ko'rsatilgan string berilsa, dasturda hech qanday xatolik xabari chiqmaydi.

Agar siz foydalanuvchi kiritgan ma'lumotlardan Date hosil qimoqchi bo'lsangiz, bu holatni hisobga olib keting. Chunki noto'g'ri sana bo'lsa ham new Date() bizga Date obyektini qaytaradi.

P.S. Shu narsalar bilan har safar bosh qotirmaslik uchun ham har xil kutubxonalar ishlab chiqilgan.
👍18
ReactJS haqidagi hujjatli filmni ko'rishga ulgurdingizmi? Men hozir ko'ryapman. To'g'risi boshida uncha qiziqmagandim, o'zim React'chi bo'lsam ham. Bitta JavaScript kutubxona haqida shunchalik film ishlash arziydimi o'zi degan fikr bor edi.

Ha arzirkan! 🙂

https://youtu.be/8pDqJVdNa44
👍4
Assalomu alaykum do'stlar! Kanalni kuzatib borayotganingiz uchun katta rahmat. O'ylaymanki ulashilayotgan ma'lumotlar sizga ozmi-ko'pmi manfaatli bo'lmoqda.

Men bu yerda ulashishni xohlaydigan maqolalar/videolar uchun g'oyalarim talaygina. Hamma narsa vaqt va mehnat talab qilganidek, o'sha maqola va videolarni tayyorlash ham cho'zilib ketadi ba'zida. Shuning uchun odamlar kuztganiga yarasha foyladali bilim ulashish muallif sifatida menim vazifamga kiradi.

Shunday ekan, kanaldagi kontekstdan kelib chiqib, ko'proq nimalar haqida maqola yozishimni xohlagan bo'lardingiz? Iltimos, fikrlaringizni izohlarda qoldiring.

Agar ko'pchilikning talab va takliflaridan kelib chiqilsa, maqolalar sifati va kuzatuvchilar uchun manfaati yaxshigina yuqorilashadi deb ishonaman. 🙂
👍26🎉2😁1
Qiziq "bug"

Foydalanuvchi tug'ilgan sanasini kiritganda forma validatsiyasi ishlaydi va kiritilgan sana to'g'riligi, foydalanuvchi 18 yoshdan kattaligi tekshiriladi. Ba'zi sabablarga ko'ra "datepicker" ishlatmay, sanani qo'lda kiritiladigan qilishimiz kerak edi. Shuning uchun 31-fevralga o'xshagan noto'g'ri sanalarga ham validatsiya zarur.

Kecha "customer support"dan xabar kelyapti. Foydalanuvchi "12.05.1990" sanasini kiritsa noto'g'ri sana deb xatolik ko'rsatib yotgan emish. Skrinshotlar bor. Sana to'g'ri ko'rsatilgan. Proyektni ham lokal, ham "staging"da tekshirib ko'rdim. Hammasi joyida. 🤔

Xatolik chiqishi mumkin bo'lgan har bitta nuqtani sinchiklab tekshirib chiqdim. Komponentdan tortib, ishlatilgan kutubxonalargacha. Testlar ham ishlayapti.

Yoshni tekshirishdagi `new Date().getFullYear()` dan boshqa barcha nuqtalarni test qilib chiqdim. Chunki eng boshidan `new Date()` pand beryotganiga ishongim kelmayotgandi.

So'ng noiloj, "support"dagilarga foydalanuvchi kompyuteridagi sistema sanasini tekshirib ko'rishi kerakligini aytdim. Lekin ich-ichimdan o'zimni xatolikni topolmay jinnicha bahona qilganday his qildim.

Keyin bilsak, rostan ham foydalanuvchi kompyuteri sanani 2005-yilga tushib qolgan ekan. Shuning uchun ham 1990-yilda tu'gilgan odamni hali 18 ga to'lmagan deb hisoblayotgan ekan, yaramas! 😄

Xulosa: EVERYTHING CAN FAIL!
😁42👍7🔥1🤯1
Aytgancha, NodeJS v19 da qo'shilgan --watch xususiyatidan foydalanyapsizmi? Hozircha eksperimental bo'lishiga qarmay oddiy, kichik proyektlarim uchun juda yaxshi ishlayapti. Oldin ishlatadigan Nodemon kutubxonasi endi deyarli kerak bo'lmay qoldi. Yangi proyektlarni setup qilish bitta kutubxonaga bo'lsa ham tezlashdi 🙂.

Ma'lumot uchun: --watch bilan har safar kodni o'zgartirganingizda, ishlab turgan dasturni to'xtatib, qaytadan ishga tushirib o'tirmaysiz. Node ning o'zi fayli saqlashingiz bilan qaytadan ishga tushadi, xuddi React muhitidagi hot-module-reloading kabi.
👍15🔥2
Bugun universitetda 🙂
#urishmanglar
😁15🔥5👍1😱1
Twitter algoritmi endi Open-Source!

Yaqinda Elon Musk Twitter rekomendatsiya algoritmini open-source qilishni va’da qilgandi va bugun o’sha va’da bajarildi. Algoritm kodini Githubdan topishingmiz mumkin. Elon Muskning aytishicha bundan maqsad algoritmi boshqalar ko’magida yanada yaxshilash va har xil eksploitatsiyalarda holi qilish (agar to’g’ri tushungan/tarjima qilgan bo’lsam). Undan tashqari algoritm qanday ishlashini Twitterning o’zida ham hech kim to’liq tushunmaydi. Chunki kod juda katta va murakkab, va unda “sharmandali” xatoliklar ham topilishi aniq ekan.

O’zim hali rpozitoriyni ko’zdan kechirmadim lekin boshqa odamlarning fikrlarini o’qiyapman. Eng "daxshati", lekin meni uchalik ham hayron qoldirmagan narsa, tivitlarni reytinglashda algoritmda “author_is_elon” (”avtor Elonmi?”) degan parametr bor ekan 😄. Shunga o’xshagan “is_republican”, “is_democrat” parametrlarni ham ko’rishingiz mumkin.

Ochiq qilingan kod algoritmning katta qismi lekin hammasi emas. Qolgani qismlari ham keyinchalik open-source qilinar ekan.

Twitterdan ko’p foydalanmayman, lekin yangliklardan boxabar bo’lib turish uchun kuchli frontendchililar va texnologiyalar profillarini doimiy kuzatib boraman. Twitter siyosiy va boshqa turdagi propagandalar va ziddiyatlar o’chog’iga aylanib qolgani hech kimga sir emas. Balki Elon Musk umid qilyotganiday bu qilingan ish holatni yaxshilar. Ko’ramiz.

Meta Facebook algoritmini open-source qilishga “duxi” yetmasak kerak 2 dunyoda 😄.

#offtopic
😁6👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Jahongir (Rahmonov) akani gaplarida jon bor. LinkedIn ham "musor" bilan to'lib ketti oxirgi paytlarda. Faqat yaqindan taniydigan odamlarimga qaytadan "follow" qildim.

JavaScript bilimlariningiz hayotingizni shunday osonlashtirib/avtomatlashtirib tursa maza qilarkan odam.🙂

P.S. Skriptni so'ramanglar, bermayman.

P.S.S. Xuddi kimdir so'raydiganday yozganimni qarang.


#heshteg
👍5😁31