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
Aytgancha Instagram va YouTube kanalimga har kuni Reels/Shorts yuklab boryapman.

Insta: https://instagram.com/brogrammistuz

YouTube: https://youtube.com/@brogrammistuz
👍9
- Siz programmistmisiz?
- Yog'e, shunchaki havaskorman.
- Unda grammistmisiz?
- 😐

#kunhazili
😁30👍2🤔2
HTML tarixiga nazar solsak, bu til SGML tiliga asoslangan va takomillashtirilgan.

SGML (Standard Generalized Markup Language) 1980-yillarda "machine-readable" (mashina o'qiyoladigan) hujjatlar uchun ishlab chiqilgan.

SGML o'z navbatida GML tiliga asoslangan. GML (General Markup Language) 1960-yillarda IBM tominidan ishlab chiqilgan. Aniqrog'i Charles Goldfarb, Edward Mosher, va Raymond Lorie'lar uning ustida ishlagan.

GML qisqartmasi aslida General Markup Language emas, o'sha 3 ta dasturchi familiyalarining bosh harfidir:
Goldfarb Mosher Lorie

Respekt 👍
👍24
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