5. Javascript ma'lumot turlari ?
Javascript'da 8 ta ma'lumot turi mavjud va ular qiymatiga qarab 2 turga bo'linadi Primitive va Reference
* Primitive ma'lumot turlari: string, number, boolean, bigint, symbol, null, undefined.
* Non - Primitive ma'lumot turlari: object.
1. Number ma'lumot turi !
Number qiymati butun va kasr sonlarni ko'rsatadi.
Number() funksiya qiymatni number'ga o'tkazishda foydalaniladi.Number("123"); // returns 123
Number("123abc"); // returns NaN
Number(""); // returns 0Number ma'lumot turi 64-bitli IEEE 754 double-precision hisoblanadi, ya'ni sonlarni binary formatda ko'rsatish uchun 64 bit'dan foydalaniladi.
1 bit - musbat yo manfiy belgisi uchun
11 bit - exponent uchun (-1022 va 1023)
52 bit - kasr qismi uchun
Number ma'lumot turi
-(2^53 − 1) va (2^53 − 1) orasidagi sonlar qabul qiladiInfinity va NaN ham Number ma'lumot turiga kiradi.2. String ma'lumot turi !
String qiymati matn ma'lumot turini ko'rsatadi va qiymat 16-bit unsigned integer (UTF-16) bilan kodlangan bo'ladi.
String() funksiya string ma'lumot yaratish uchun ishlatiladi. new String() orqali String Object yaratiladi.const str = new String("JasX");3. Boolean ma'lumot turi !
Boolean ma'lumot turi
true va false qiymat ko'rsatadi va logical operator deb ham ataladi. Boolean() funksiya boolean bo'lmagan qiymatlarni true yoki false qiymatga o'tkazish uchun ishlatiladi.Boolean(""); // false
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // false
Boolean("hello"); // true
Boolean([]); // true
Boolean({}); // true4. BigInt ma'lumot turi !
BigInt ma'lumot turi katta raqamli qiymat qabul qiladi, ya'ni Number qabul qilolmaydigan sonlarni
-(2^53 − 1)'dan kichik va (2^53 − 1)'dan katta. BigInt() funksiya Number'larni BigInt'ga o'tkazadi primitive qiymat qaytaradilet bigIntFromNumber = BigInt(9007199254740992);
console.log(bigIntFromNumber); // 9007199254740992n
let bigIntFromString = BigInt("9007199254740992");
console.log(bigIntFromString); // 9007199254740992n
5. Symbol ma'lumot turi !
Symbol antiqa va o'zgarmas primitive qiymat hisoblanadi va Object uchun unique
key sifatida ham foydalanilishi mumkin. Symbol'ning asosiy vazifasi antiqa key yaratish va bu key boshqa Object key'lar bilan xar xil bo'lishi kafolatlangan. Symbol() funksiya antiqa key yaratish uchun ishlatiladi.let sym1 = Symbol("desc");
let sym2 = Symbol("desc");
console.log(sym1 === sym2); // false6. null ma'lumot turi !
null ma'lumot turi qiymat yo'qligini bildiradi va turli holatlarda paydo bo'lishi mumkin, masalan object'ning biron bir property'sida qiymat bo'lmasa. null boolean operator'lar uchun false qiymat beradi.
7. undefined ma'lumot turi !
undefined global object'ning xosasi va global scope o'zgaruvchisi hisoblanadi. O'zgaruvchi e'lon qilinsa, lekin qiymat berilmasa undefined qiymat beriladi.
let a;
console.log(a); // undefined
8. Object ma'lumot turi !
Object bu ma'lum bir narsaning xususiyatlar to'plami, xususiyat bu
name (key) va qiymat'ning birlashmasi. Xususiyatning qiymat har qanday ma'lumot turi bo'lishi mumkin.let obj = {
key: value
};new Object() constructor object yaratib beradi.let obj = new Object();
obj.key = 'value';
console.log(obj.key); // {key: 'value'}
Array vs Funksiya
let arr = []
function log() {}
console.log(typeof arr); // object
console.log(typeof log); // function .
Javascript'da Array ma'lumot turi mavjud emas. Array bu ma'lumot'larni to'plash uchun ishlatiladi va Object'ning ustiga qurilgan global object'ning bir turi hisoblanadi.
Funksiya'ni
typeof qilib tekshirganda Function qaytaradi. Lekin Javascript'da function ma'lumot turi mavjud emas. Funksiya Object hisoblanadi.🔗 developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
#javascript #interview
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥3💯1
Nega Number ma'lumot turi
Izohlarda fikringizni yozib qoldiring 👇
[-(2^53 − 1) - (2^53 − 1)]'dan tashqari sonlarni qabul qilmaydi.Izohlarda fikringizni yozib qoldiring 👇
🔥5
Jasur - IT Blog
Nega Number ma'lumot turi [-(2^53 − 1) - (2^53 − 1)]'dan tashqari sonlarni qabul qilmaydi. Izohlarda fikringizni yozib qoldiring 👇
Javascript Number ma'lumot turi IEEE 754 standarti orqali 64-bit'li ikkilik formatidagi (
double-precision) raqamlarni ko'rsatadi.IEEE 754 - floating-point arifmetikasi uchun Institute of Electrical and Electronics Engineers tomonidan ishlab chiqilgan texnik standart hisoblanadi.
64 bit - Javascript number ma'lumotlarni kodlash (encode qilish) uchun.
1 bit - musbat yo manfiy belgisi uchun
11 bit - butun sonning Exponent qismini ko'rsatadi
52 bit - kasr qismi uchun (mantissa)
Javascript number ma'lumotlarni
bit'dan numberga o'tkazish uchun shu formuladan foydalanadi.Number = (-1)^sign × (1 + mantissa) × 2^exponent
JavaScript floating-point representation
53-bit hisoblanadi. Ya'ni ( 1 + mantissa ), 1bit + 52 bit. 1 bit implicit leading bit, 52 bit implicit leading bit deyiladi.Shuning uchun Javascript floating-point uchun umumiy 53 bit sarflaydi.
Bundan kelib chiqadi:
Number.MAX_SAFE_INTEGER
2^53 – 1'ga teng. Number.MIN_SAFE_INTEGER
-(2^53 - 1)'ga teng.Agar Number bu qiymatdan ortib ketsa, maximum precision 53 bit'dan oshib ketadi. Natijada, Aniqlikda xatoliklar va Hisoblashda noaniqliklar kelib chiqadi.
🔗 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🎉1
Web Sahifa'ga tashrif buyurilgan qurilmani aniqlash responsiv dizayn, analitika, feature o'zgartirish kabi vazifalar uchun foydali bo'ladi.
Sahifa mobil qurilmada yoki kompyuterda ko'rilayotganligini aniqlash uchun
Navigator.userAgent xususiyatidan foydalaniladi.Navigator.userAgent browser'ning user agenti (user agent of the browser) qaytaradigan string'ni o'z ichiga oladi.
Masalan:
console.log(navigator.userAgent);
// Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36
Navigator.userAgent qaytaradigan
string orqali qurilma turini aniqlash mumkin, bunga sabab qurilmalarda string farq qiladi.Qurilma turini aniqlash uchun qo'shimcha RegExp'dan foydalanamiz, ya'ni
RegExp.prototype.test().RegExp.prototype.test()
test() metodi regular expression'ni match qilingan ma'lumot ichidan qidiradi va mavjudligiga qarab boolean ma'lumot (true, false) qaytaradi.Masalan:
const str = 'table football';
const regex = new RegExp('foo');
console.log(regex.test(str)); // true
Mobil qurilma ekanligini aniqlash uchun
/Mobile|Android|iPhone|iPad/i Regular Expression'dan foydalanamiz.const detectDeviceType = () => /Mobile|Android|iPhone|iPad/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop';
detectDeviceType();
Bu kod'da
Navigator.userAgent string qaytaradi va .test() RegExp bilan stringni test qiladi. Agar string ichida berilgan experssion mavjud bo'lsa .test() true qaytaradi. Natija, qurilma mobil bo'ladi./Mobile|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i - Mobil qurilmani aniqlash uchun expression'ni kengaytirish mumkin.Kelajakda browser'larda .userAgent() ishlamasligi mumkin, ya'ni browser o'zi haqida ma'lumot bermasligi mumkin.
Qurilmani tekshirish uchun: device-detecting.vercel.app
🔗 30secondsofcode.org/js/s/detect-device-type
#javascript #deviceDetection
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
subtitles.vtt file'ni fetch qilib yangi o'zgaruvchi'ga saqlanadi. Qidirilgan keyword subtitle'dan ishlatilgan vaqti olinadi (e.g.,
00:00:10.500 -- 00:00:12.000). parseTime() orqali vaqt'ni string'dan date'ga o'tkaziladi va
video.play() orqali qo'yiladi.video.currentTime = matchedTime;
video.play();
P.s. Bekarchilkdan buyam bir eksperiment
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉6👍3❤2
Navigator dasturchilarga foydalanuvchining veb-brauzeriga kirish va u bilan o‘zaro aloqada bo‘lish imkonini beradi, bu dasturchilarga website'ni yanada yaxshilashga yordam beradi
Masalan: Navigator obyektidan foydalangan holda foydalanuvchining brauzeri versiyasi, ekran o‘lchami, til sozlamalari va internet tezligini aniqlashi mumkin. Bu ma’lumotlar yordamida saytni yanada yaxshilash mumkin.
Navigator obyekti foydalanuvchining geografik joylashuvini aniqlashda ham ishlatilinadi. Bu til tarjimalari, valyuta konvertatsiyasi va mahalliy ob-havo ma’lumotlarini taqdim etishga imkon beradi.
Navigator Global Window Object'ni bir qismi hisoblanadi.
let navigatorObject = window.navigator;
Navigator object property orqali o'zimizga kerak bo'lgan ma'lumotlarni olishimiz mumkin
⚠️ Navigator Object xususiyatlari foydalanuvchining brauzeri haqida har doim aniq ma’lumot bermasligi mumkin. Masalan, foydalanuvchilar eskirgan yoki o‘zgartirilgan brauzerlardan foydalanayotgan bo‘lishi mumkin, bu esa noto‘g‘ri ma’lumotlarga olib keladi. Bundan tashqari, barcha brauzerlar Navigator obyektining barcha funksiyalarini qo‘llab quvvatlamaydi.
navigator Object'ni console'ga chiqaradigan bo'lsak, hamma browser da ham bir xil ma'lumotni ko'rsatmaydi
Masalan: Chrome orqali deviceMemory aniqlash mumkin, lekin FireFox'da bu ma'lumot mavjud emas
Battery Charge Detecting
Navigator object orqali qurilma quvvatini (zaryadini) aniqlash uchun Battery Status API'dan foydalanamiz
navigator.getBattery() orqali Battery Status API'ga kiriladi va BatteryManager object'ni resolve qilish uchun Promise qaytaradi.BatteryManager Object
level, charging property'larni o'z ichiga oladi.level - qurilma quvvati (0 dan 1 gacha qiymatda)
charging - boolean qiymat qaytaradi, qurilma quvvat olyaptimi yuqmi aniqlash uchun
Battery Status API ko‘plab yangilangan brauzerlarda privacy concerns sababli qo‘llab-quvvatlanmaydi. Bu API eski versiyadagi Chrome, Edge va ba’zi boshqa brauzerlarda ishlaydi, lekin Firefox yoki Safari’da ishlamasligi mumkin.
if ('getBattery' in navigator) {
navigator.getBattery().then((battery) => {
console.log(`Battery level: ${battery.level * 100}%`);
console.log(`Charging: ${battery.charging ? 'Yes' : 'No'}`);
});
} else {
console.log('Battery Status API is not supported in this browser.');
}🔗 bito.ai/resources/navigator-object-javascript-javascript-explained
#javascript #navigator
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Jasur - IT Blog
Photo
👍3❤2🎉2
Storage class'lar C++'da lifespan, scope va o'zgaruvchilarning xotira manzili'ni (storage location) aniqlash uchun yordam beradigan keyword'lar hisoblanadi.
Storage class'lar o'zgaruvchilar xotirada qanday saqlanishini, qancha vaqt davomida mavjud bo'lishini, va qayerda foydalanilishi mumkinligini boshqaradi.
C++'da 4 ta asosiy
storage class'lar mavjud mavjud:*
auto : Bu block yoki funksiyada e'lon qilingan local o'zgaruvchilar uchun default storage classes hisoblanadi. auto storage class-ga ega o'zgaruvchilar avtomatik saqlanadi. Masalan: Bironta block yoki funksiya bajarilishni (execute) boshlasa, ichkarida e'lon qilingan
auto o'zgaruvchilar xotiraga saqlanadi, va execute process (bajarilish jarayoni) tugagandan keyin xotiradan olib tashlanadi.Auto o'zgaruvchi e'lon qilish:
auto int a = 5;
Yoki default holat'da :
int a = 5;
C++'da O'zgaruvchilar default holatda auto bo'lgani uchun, auto keyword kam holatda ishlatilinadi.
*
register : Bu storage class compiler'ga o‘zgaruvchini protsessor'dagi (CPU) tezkor va kichik xotiraga saqlashni taklif qiladi. Ammo, hozirga compiler'lar bu so'rovni rad qilishi mumkin.Register o'zgaruvchi e'lon qilish:
register int counter = 5;
register storage class o'zgaruvchilari ham automatic xotiraga saqlash xususiyatiga ega.
*
static : Qachonki program execute bo'lishni boshlaganda static storage class ishlatilagan o'zgaruvchilar uchun xotiradan alohidan joy ajratiladi va program to'xtaguncha o'sha joyga saqlanadi.Masalan:
#include <iostream>
using namespace std;
void example() {
// Local scope
static int x = 0;
x++;
cout << x << endl;
}
int main() {
example(); // Output: 1
example(); // Output: 2
return 0;
}
auto vs static asosiy farqlari, auto o'zgaruvchilar har block yoki funsiya ishlashni boshlaganda xotiraga saqlanib, ishlashdan to'xtaganda olib tashlanadi. static o'zgaruvchi esa to'liq program ishlaganda saqlanadi
*
extern : "extern" storage class boshqa fayllarda aniqlangan o‘zgaruvchilarni e’lon qilish uchun ishlatiladi. Bu o‘zgaruvchining butun dastur davomida ishlatish imkonini beradi. "extern" o‘zgaruvchilar global scopega ega bo‘ladi va odatda bir nechta fayllar orasida o‘zgaruvchilarni ulashish uchun ishlatiladi.Masalan: file1.cpp
#include <iostream>
using namespace std;
extern int counter;
void increment() {
counter++;
cout << "Counter: " << counter << endl;
}
file2.cpp
#include <iostream>
using namespace std;
extern int counter;
extern void increment();
int counter = 0;
int main() {
cout << "Initial counter: " << counter << endl;
increment();
cout << "After increment: " << counter << endl;
return 0;
}
🔗 javatpoint.com/cpp-storage-classes
#cpp #storageClass
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🎉1😇1
React 19 foydalanishga tayyor (stable) bo'libdi!
🔗 react.dev/blog/2024/12/05/react-19
Bundan oldin Aprel oyida beta versiyasi taqdim qilingan edi.
Asosiy o'zgarishlar haqida:
✅ vercel.com/blog/whats-new-in-react-19
✅ admiral-studios.com/blog/react-19-2024-update-will-next-js-lose-its-relevance-what-do-experts-say
#react
Please open Telegram to view this post
VIEW IN TELEGRAM
react.dev
React v19 – React
The library for web and native user interfaces
👍5❤3🔥2😇1
Biz ko'p foydalanadigan matn'ni nusxalash tugmasi (button) qanday qilinadi ?
Hozirgi yangi browser'larda matn'ni nusxalash uchun Asynchronous Clipboard API'dan foydalanish osonroq
Eski brauzerlarga ham qo'llab-quvvatlash kerak bo'lsa, boshqa yo'llardan foydalangan yaxshiroq, ammo u yo'l biroz murakkab
Asynchronous Clipboard API - clipboard buyruqlariga javob berish imkonini beradi. Masalan: matn'ni qirqib olish, nusqalash va matn'ni joylashtirish (cut, copy vs paste)
*Copy
Nusxalashdan oldin, browser Clipboard API'ni qo'llab-quvvatlaydimi yo'qmi tekshirish kerak
if (navigator && navigator.clipboard && navigator.clipboard.writeText) return 'true'
Matn'ni nusxalash uchun
navigator.clipboard.writeText("Selected Text");To'liq kod:
const copyToClipboard = str => {
if (navigator && navigator.clipboard)
return navigator.clipboard.writeText(str);
return Promise.reject('API is not available.');
};str - nusxalash kerak bo'lgan matn*Paste
Matn'ni
paste qilish uchun .readText() funksiyadan foydalanamiznavigator.clipboard.readText()
Matn'ni joylashtirish uchun, joylashtirmoqchi bo'lgan input yoki textarea'ga
navigator.clipboard.readText() Promise qaytargandan keyin .value qilib joylaymiz.Masalan:
navigator.clipboard
.readText()
.then(text=>{document.getElementById('outputText').value = text})
*Cut
Matn'ni qirqish uchun
.writeText() funksiya'dan foydalanamiznavigator.clipboard
.writeText(textToCut)
.then(() => { inputField.value = '' })
textToCut - matnTekshirish uchun: clipboard-operations.vercel.app
🔗 30secondsofcode.org/js/s/copy-text-to-clipboard/#the-asynchronous-clipboard-api
#javascript #clipboard
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤4👍3
🗂 404 - Not Found Page
Qachonki web sahifa (page) yangilanganda, 404 NOT FOUND error qaytaradi. Bu holat deployment'dan ( Vercel, Netlify va h.k ) keyin sodir bo'ladi.
Bu error saytingiz React asosida ishlab chiqilgan SPA (Single Page Application) bo'lgani uchun sodir bo'ladi.
Agar saytga root (asosiy) / orqali tashrif buyurilsa, avtomatik ravishda
Ammo, agar siz to'g'ridan-to'g'ri shu
* Vercel Deployment
Bu muommoni hal qilish uchun
Bu kod Vercel serveriga har qanday kiruvchi URL manzilini asosiy root yo‘nalishga qayta yozishni buyuradi.
Agar ichki sahifaga o‘tish amalga oshirilsa, Vercel bu so‘rovni root manzilga yo‘naltiradi va xatolikni oldini oladi.
* Netlify Deployment
Bu muommoni Netlify deployment'da hal qilish uchun
* Har qanday so‘rov /index.html ga yo‘naltiriladi.
* 200 kodi brauzerga so‘rov muvaffaqiyatli qayta ishlanganini bildiradi.
🔗 dev.to/stanlisberg/resolving-the-vercel-404-page-not-found-error-after-page-refresh-9b9
🔗 answers.netlify.com/t/support-guide-i-ve-deployed-my-site-but-i-still-see-page-not-found/125?utm_source=404page&utm_campaign=community_tracking
🔗 docs.netlify.com/routing/redirects
#react #spa #notFound
✅ @jasurkh_dev
Qachonki web sahifa (page) yangilanganda, 404 NOT FOUND error qaytaradi. Bu holat deployment'dan ( Vercel, Netlify va h.k ) keyin sodir bo'ladi.
Menimcha ko'pchilik bu muommo'ga duch kelgan !
Bu error saytingiz React asosida ishlab chiqilgan SPA (Single Page Application) bo'lgani uchun sodir bo'ladi.
Agar saytga root (asosiy) / orqali tashrif buyurilsa, avtomatik ravishda
index.html yuklanadi. Keyinchalik boshqa sahifalarga o'zgarganda, index.html sahifasi o'zgarmaydi (faqat tashqi ko‘rinishda sahifa almashadi). Ammo, agar siz to'g'ridan-to'g'ri shu
root sahifalardan birini ochsangiz yoki shu sahifada bo'lganingizda "refresh" qilsangiz (qayta yuklasangiz), web-serverdan ushbu faylni taqdim etishni so'raydi… ammo bu fayl aslida mavjud emas. Shuning uchun siz 404 xatosini olasiz.* Vercel Deployment
Bu muommoni hal qilish uchun
vercel.json yaratib rule configuration yozish kerak{
"rewrites": [
{"source": "/(.*)", "destination": "/"}
]
}Bu kod Vercel serveriga har qanday kiruvchi URL manzilini asosiy root yo‘nalishga qayta yozishni buyuradi.
Agar ichki sahifaga o‘tish amalga oshirilsa, Vercel bu so‘rovni root manzilga yo‘naltiradi va xatolikni oldini oladi.
"rewrites" - Bu Vercelda so‘rovlarni qayta yozish qoidalari ro‘yxati"source": "/(.*) - Bu qism har qanday URL yo‘nalishini anglatadi"destination": "/" - Har qanday URL so‘rovi asosiy root (index.html) ga yo‘naltiriladi.* Netlify Deployment
Bu muommoni Netlify deployment'da hal qilish uchun
_redirects file yaratib rule configuration yozish kerak/* /index.html 200
* / - barcha URL-larni bildiradi (masalan, /recipeDetails/... yoki boshqa ichki sahifalar).* Har qanday so‘rov /index.html ga yo‘naltiriladi.
* 200 kodi brauzerga so‘rov muvaffaqiyatli qayta ishlanganini bildiradi.
🔗 dev.to/stanlisberg/resolving-the-vercel-404-page-not-found-error-after-page-refresh-9b9
🔗 answers.netlify.com/t/support-guide-i-ve-deployed-my-site-but-i-still-see-page-not-found/125?utm_source=404page&utm_campaign=community_tracking
🔗 docs.netlify.com/routing/redirects
#react #spa #notFound
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4💯2⚡1
Yaxshi dam olinglar
Rasm
✅ @jasurkh_dev
try {
// Some error message
} catch (e) {
window.open(`https://stackoverflow.com/search?q=[js]+${e}`, '_blank');
}Rasm
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7🔥1👏1
Jasur - IT Blog
Photo
🔥5😁2❤1
🗂 Linked List (1- qism)
Linked List - bir-biriga bog‘langan
node - bu Linked List'ning qismlari, ya'ni elementlari.
Linked List element'lari 2 ta qismga bo'linadi: data vs address
Node - bu Linked List'ning asosiy tuzilmasi. U ma'lumotlar'ni va keyingi node manzilini saqlaydi. Node kamida bitta
*Xotiradagi O'zgaruvchi
Butun 15 sonini
*Xotiradagi massivlar
Array'dagi elementlar xotirada ketma-ket saqlanadi. Shuning uchun, har bir element oldingi elementdan keyin saqlanadi.
Kompyuter'da faqat
Massivdagi elementlarni olib tashlash yoki qo‘shishda, undan keyin keladigan har bir elementni yangi element uchun joy ochish uchun yuqoriga siljitish yoki olib tashlangan elementning o‘rnini egallash uchun pastga siljitish kerak. Bunday siljish operatsiyalari ko‘p vaqt talab qiladi.
*Xotiradagi Linked List
Linked List'lardan foydalanishning afzalligi shundaki,
Har bir
Linked List'ni birinchi elementi Head, oxirgi elementi Tail deb ataladi.
Linked List'ni yomon taraflari shundaki, biz array'dan foydalanganimizdek,
Linked List'ning asosiy 3 ta turi mavjud
*Singly Linked Lists:
Bu eng keng tarqalgan. Har bir
*Doubly Linked Lists:
Har bir
*Circular Linked Lists:
Bu oxirgi element birinchi element bilan bog‘langan bo'ladi.
🔗 w3schools.com/dsa/dsa_theory_linkedlists_memory.php
📹 youtu.be/N6dOwBde7-M?si=jEpM9F6RUZjMhs0L
📹 youtube.com/watch?v=WqrbIUggEXQ&t=6155s
#algorithm #linkedList
✅ @jasurkh_dev
Linked List - bir-biriga bog‘langan
node'lardan iborat chiziqli ma'lumot tuzilmasi (Data Structure) hisoblanadi.node - bu Linked List'ning qismlari, ya'ni elementlari.
Linked List insertion (yangi element qo'shish) yoki deletion (mavjud elementni olib tashlash) uchun Array'ga nisbatan osonroq va samaraliroq hisoblanadi
Linked List element'lari 2 ta qismga bo'linadi: data vs address
data qismi haqiqiy ma’lumotlarni saqlaydi, address qismi esa keyingi ulangan node'ni manzilini saqlaydi.Node - bu Linked List'ning asosiy tuzilmasi. U ma'lumotlar'ni va keyingi node manzilini saqlaydi. Node kamida bitta
address'ga ega bo‘lishi kerak. Oxirgi node'ning manzil qismida null qiymati bo‘ladi, bu ro‘yxatning tugashini bildiradi.*Xotiradagi O'zgaruvchi
Butun 15 sonini
myNumber o‘zgaruvchiga saqlamoqchimiz va bu son ikki bayt (16 bit) ko‘rinishida saqlanadi. myNumber xotirasidagi manzil 0x7F30 deb faraz qilaylik.0x7F30 aslida myNumber butun son qiymati saqlanadigan xotiraning ikkita baytining birinchisining manzilidir. Kompyuter butun sonli qiymatni o‘qish uchun 0x7F30 manzil'ga borganida, u birinchi baytni ham, ikkinchi baytni ham o‘qiydi.⚠️ Kompyuter o'zining arxitekturasiga va o'zgaruvchini e'lon qilgan dastur tiliga qarab, qoidalar va bit'lar o'zgarishi mumkin.
*Xotiradagi massivlar
Array'dagi elementlar xotirada ketma-ket saqlanadi. Shuning uchun, har bir element oldingi elementdan keyin saqlanadi.
myArray = [3,5,13,2] array'ni xotiraga saqlaymiz. myNumber xotiradagi manzil 0x7F28 deb faraz qilaylik.Kompyuter'da faqat
myArray ning birinchi baytining manzili bor, shuning uchun myArray[2] kodi bilan 3-elementga kirish uchun birinchi ikkita butun sondan sakrab o‘tadi. Butun son ikki baytda saqlanadi, shuning uchun u 0x7F28 dan 2x2 bayt oldinga o‘tadi va 0x7F32 manzilidan boshlab 13 qiymatni o‘qiydi.Address Value
-----------------------
0x7F28 - 3
0x7F29
0x7F30 - 5
0x7F31
0x7F32 - 13
0x7F33
Massivdagi elementlarni olib tashlash yoki qo‘shishda, undan keyin keladigan har bir elementni yangi element uchun joy ochish uchun yuqoriga siljitish yoki olib tashlangan elementning o‘rnini egallash uchun pastga siljitish kerak. Bunday siljish operatsiyalari ko‘p vaqt talab qiladi.
⚠️ Bu real vaqt tizimlarida muammolarni keltirib chiqarishi mumkin.
*Xotiradagi Linked List
Linked List'lardan foydalanishning afzalligi shundaki,
node'lar xotirada har qanday bo‘sh joyda saqlanadi, elementlar massivlarda saqlangani kabi node'lar bir-birining ortidan ketma-ket saqlanishi shart emas. node'larni qo‘shish yoki olib tashlashda ro‘yxatdagi qolgan node'larni siljitish shart emas.Har bir
node 4 baytni egallaydi. Butun sonli qiymatni saqlash uchun 2 bayt, ro‘yxatning keyingi node manzilini saqlash uchun esa 2 bayt ishlatiladi.Linked List'ni birinchi elementi Head, oxirgi elementi Tail deb ataladi.
Linked List'ni yomon taraflari shundaki, biz array'dan foydalanganimizdek,
myArray[5] deb yozish orqali node ga to‘g‘ridan-to‘g‘ri kira olmaymiz. Linked List dagi 5-th node ga o‘tish uchun biz head deb nomlangan birinchi node dan boshlashimiz, keyingi node ga o‘tish uchun o‘sha node ning pointer idan foydalanishimiz kerak.Linked List'ning asosiy 3 ta turi mavjud
*Singly Linked Lists:
Bu eng keng tarqalgan. Har bir
node'da ma’lumotlar va keyingi node manzili mavjud.*Doubly Linked Lists:
Har bir
node'ga oldingi node manzilini qo'shamiz. Shunday qilib, biz istalgan yo‘nalishda: oldinga yoki orqaga yurishimiz mumkin.*Circular Linked Lists:
Bu oxirgi element birinchi element bilan bog‘langan bo'ladi.
Linked List Array'ga nisbatan 2 marta ko'proq xotira egallaydi. Chunki, Linked List har bir node uchun qo‘shimcha pointer (yoki reference) saqlaydi, bu esa qo‘shimcha xotira talab qiladi.
🔗 w3schools.com/dsa/dsa_theory_linkedlists_memory.php
#algorithm #linkedList
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2❤1
🗂 Linked List in Javascript (2- qism)
Yuqorida ta’kidlanganidek, ListNode ikkita elementni o‘z ichiga oladi: ma’lumotlar va keyingi node'ning manzili.
* Node Class & Constructor
LinkedList class yaratishdan oldin, ListNode yaratishimiz kerak. LinkedList'ni tashkil etuvchi node'larni yaratish uchun class Node ishlatiladi.
Har bir node data xossasiga va next xossaga ega bo‘ladi. data xususiyati node'da saqlanadigan ma’lumotlarni saqlaydi. next xususiyat LinkedList'ning keyingi node'ga ishora qiladi.
JavaScriptda ListNode'ni quyidagicha amalga oshirishimiz mumkin:
* Linked List Class & Constructor
Endi Node Class'ga ega bo‘lganimiz sababli, biz LinkedList class'ni yaratishimiz mumkin. LinkedList Class head va tail xususiyatlariga ega.
Head - LinkedList'dagi birinchi node'ga ishora qiladi.
Tail - LinkedList'dagi oxirgi node'ga ishora qiladi.
Agar LinkedList bo'sh bo'lsa ya'ni bironta node mavjud bo'lmasa head va tail qiymati null'ga teng bo'ladi
* Yangi node qo'shish
add() method LinkedList'ning oxiriga yangi node qo'shadi. Agar List'ning birinchi elementi (head) null qiymatga ega bo'lsa, yangi
Ushbu usulning time complexity'si O (1) ga teng, chunki u yangi node'ni qo‘shish uchun LinkedList orqali loop o‘tishi shart emas.
* Linked List Loop
PrintAll usuli head node'dan boshlanadi va har bir node orqali tail node'ga yetguncha takrorlanadi.
Endi biz buni yangi LinkedList yaratish va unga ba’zi node'larni qo‘shish orqali sinab ko‘rishimiz mumkin.
* Ma'lum bir index'dagi node'ni olish
get usuli node'ning ma’lumotlarini ko‘rsatilgan indeks'da qaytaradi. U indeks qiymatini qabul qiladi va ko‘rsatilgan indeksdagi node'ga yetib borguncha LinkedList orqali takrorlanadi. Keyin o‘sha node'ning ma’lumotlarini qaytaradi.
Ushbu usulning time complexity'si O(n) ga teng, chunki u ko‘rsatilgan indeksdagi node'ni topish uchun LinkedList orqali o‘tishi kerak.
Massivlar buning uchun yaxshiroq variant, chunki ular istalgan vaqt kirish imkoniyatiga ega. Massivdagi elementga murojaat qilishning time complexity'gi O(1) ga teng.
👨💻 github.com/bradtraversy/traversy-js-challenges/blob/main/07-stacks-queues-linked-lists/10-linked-list-implementation/readme.md
📹 youtu.be/ZBdE8DElQQU?si=S2P__kh9HkIO61MT
🔗 freecodecamp.org/news/implementing-a-linked-list-in-javascript
#algorithm #linkedList #js
✅ @jasurkh_dev
Yuqorida ta’kidlanganidek, ListNode ikkita elementni o‘z ichiga oladi: ma’lumotlar va keyingi node'ning manzili.
* Node Class & Constructor
LinkedList class yaratishdan oldin, ListNode yaratishimiz kerak. LinkedList'ni tashkil etuvchi node'larni yaratish uchun class Node ishlatiladi.
Har bir node data xossasiga va next xossaga ega bo‘ladi. data xususiyati node'da saqlanadigan ma’lumotlarni saqlaydi. next xususiyat LinkedList'ning keyingi node'ga ishora qiladi.
JavaScriptda ListNode'ni quyidagicha amalga oshirishimiz mumkin:
class Node {
constructor(data) {
this.data = data
this.next = null
}
}this.data = data - Node class'ga uzatilgan ma’lumotlar joriy obyektning data xususiyatiga saqlanadi.this.next = null node'ning next xossasiga null'ga o‘rnatadi.* Linked List Class & Constructor
Endi Node Class'ga ega bo‘lganimiz sababli, biz LinkedList class'ni yaratishimiz mumkin. LinkedList Class head va tail xususiyatlariga ega.
Head - LinkedList'dagi birinchi node'ga ishora qiladi.
Tail - LinkedList'dagi oxirgi node'ga ishora qiladi.
Agar LinkedList bo'sh bo'lsa ya'ni bironta node mavjud bo'lmasa head va tail qiymati null'ga teng bo'ladi
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
}
}* Yangi node qo'shish
add() method LinkedList'ning oxiriga yangi node qo'shadi. Agar List'ning birinchi elementi (head) null qiymatga ega bo'lsa, yangi
node head'ga biriktiriladi. Agar head qiymatga ega bo'lsa, yangi node tail'ga biriktiriladi.Ushbu usulning time complexity'si O (1) ga teng, chunki u yangi node'ni qo‘shish uchun LinkedList orqali loop o‘tishi shart emas.
add(data) {
const node = new Node(data);
if (this.head === null) {
this.head = node;
} else {
this.tail.next = node;
}
this.tail = node;* Linked List Loop
PrintAll usuli head node'dan boshlanadi va har bir node orqali tail node'ga yetguncha takrorlanadi.
printAll() {
let current = this.head;
while (current !== null) {
console.log(current.data);
current = current.next;
}
}Endi biz buni yangi LinkedList yaratish va unga ba’zi node'larni qo‘shish orqali sinab ko‘rishimiz mumkin.
const list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.printAll();
* Ma'lum bir index'dagi node'ni olish
get usuli node'ning ma’lumotlarini ko‘rsatilgan indeks'da qaytaradi. U indeks qiymatini qabul qiladi va ko‘rsatilgan indeksdagi node'ga yetib borguncha LinkedList orqali takrorlanadi. Keyin o‘sha node'ning ma’lumotlarini qaytaradi.
Ushbu usulning time complexity'si O(n) ga teng, chunki u ko‘rsatilgan indeksdagi node'ni topish uchun LinkedList orqali o‘tishi kerak.
Massivlar buning uchun yaxshiroq variant, chunki ular istalgan vaqt kirish imkoniyatiga ega. Massivdagi elementga murojaat qilishning time complexity'gi O(1) ga teng.
get(index) {
let current = this.head;
let i = 0;
while (i < index) {
current = current.next;
i++;
}
return current.data;
}🔗 freecodecamp.org/news/implementing-a-linked-list-in-javascript
#algorithm #linkedList #js
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3🎉3👍1😁1😇1
Lazy loading - bu veb-sahifaning ma’lum qismlarini foydalanuvchi yoki brauzerga kerak bo'lmaguncha yuklamasdan kutib turish (render qilish jarayonini to'xtatib turish)
Hammasini birdaniga yuklash (eager loading) o‘rniga, brauzer ba’zi resurslarni faqat foydalanuvchiga kerak sahifa bilan o‘zaro aloqaga kirishgandan keyin so‘raydi.
Agar Lazy loading to‘g‘ri amalga oshirilsa, sahifaning yuklanish tezligini oshirishga yordam beradi.
Bu turdagi yuklash 'dangasa' (lazy) deb ataladi, chunki u brauzerni ishini kechiktirishga undaydi.
Masalan, blog postda sahifaning yuqori qismida rasm, pastki qismida diagramma bor deb faraz qilaylik. Blog postini o‘qiyotgan foydalanuvchi bir necha daqiqa davomida matnning pastki qismiga yetib bormasligi mumkin, shuning uchun brauzer foydalanuvchi o‘sha bo‘limga o‘tmaguncha diagrammani yuklashni kutadi. Shunday qilib, sahifa dastlab tezroq yuklanadi, chunki brauzer ikkita rasm o‘rniga bitta rasm yuklamoqda.
Veb-sahifa yuklanganda, foydalanuvchi ko‘rayotgan qismi 'yuqori qism' (
above the fold) deb ataladi, foydalanuvchi hali ko‘rmayotgan qismi esa 'quyi qism' (below the fold) deb ataladi."above the fold" va "below the fold" gazeta maketlaridan kelib chiqqan. Gazetalar, odatda, gorizontal bo‘yicha ikkiga buklangan, oldingi yarmi esa buklangan joydan yuqorida joylashgan bo‘ladi.
* Rasmlar uchun lazy loading amalga oshirish
Lazy loading-ni amalga oshirishning bir usuli — bu
img tegida loading atributidan foydalanish. Quyidagi misolda ko‘rsatilganidek, loading="lazy" qo‘shish brauzerga foydalanuvchi rasmga yaqinlashguncha uni yuklamaslikni buyuradi<img src="example.com/image" loading="lazy">
* Eager loading nima ?
Eager loading — bu barcha veb-sahifa resurslarini bir vaqtning o‘zida yuklash jarayoni. Murakkab va kodi ko‘p bo‘lgan veb-ilovalar, masalan, onlayn o‘yinlar, ko‘pincha eager loading'dan foydalanishni afzal ko‘radi.
<img src="example.com/image" loading="eager">
loading="eager" atributidan foydalanildi, bu esa rasmni darhol yuklashni ta'minlaydigan standart hisoblanadi. Bu, darhol ko'rilishi kerak bo'lgan muhim rasmlar uchun ishlatilinadi.image tag'da default holatda
loading attribute qiymati eager bo'ladi🔗 cloudflare.com/learning/performance/what-is-lazy-loading
React'da component dinamik tarzda yuklanish uchun,
React.lazy funksiyasi ishlatilinadiOdatda, Lazy loading React ilovalarida ko'p ishlatilmaydi, chunki React ko'pincha bitta sahifali ilovalar (SPA) yaratish uchun ishlatiladi. React odatda butun ilovani bitta faylga birlashtiradi (bundle qiladi).
Misol: Lazy Loading Component
import React, { Suspense } from "react";
const LazyComponent = React.lazy(() => import("./LazyComponent"));
function App() {
return (
<div>
<h1>Welcome to My App</h1>
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
export default App;React.lazy faqat LazyComponent render qilinganda dinamik ravishda import qiladi.Suspense fallback komponent yuklanayotgan paytda zaxira UI taqdim etadi (loader).
Default holatda, NgModul'lar tezda yuklanadi. Bu shuni anglatadiki, ilova yuklanganda, barcha NgModul'lar darhol yuklanadi, ular hozirgi vaqtda zarur yoki yo'qligiga qaramay.
Lazy loading dastlabki paket (bundle) o'lchamlarini kichikroq saqlashga yordam beradi, bu esa yuklash vaqtlarini qisqartirishga yordam beradi.
Angular modullarini lazy loading qilish uchun AppRoutingModule routing konfiguratsiyasida
component o'rniga loadChildren'dan foydalaniladiconst routes: Routes = [
{
path: 'items',
loadChildren: () => import('./items.module').then(m => m.ItemsModule)
}
];
🔗 v17.angular.io/guide/lazy-loading-ngmodules
#lazyLoading #react #angular
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3⚡2
React component'ni Angular project'da ishlatib ko'rdim.
React kutubxonani o'rnatib olamiz
npm install react react-dom
* package.json
{
.....
"react": "^19.1.0",
"react-dom": "^19.1.0",
.....
}TypeScript bilan ishlash uchun kerakli
@type kutubxonalarni ham o‘rnatamiznpm install --save-dev @types/react @types/react-dom
* tsconfig.json
{
"compilerOptions": {
"jsx": "react"
}
}React component yaratamiz (e.g. src/react/HelloReact.tsx)
import React from 'react';
const HelloReact = () => {
return <div>Hello from React!</div>;
};
export default HelloReact;
Yaratilgan React component'ni DOM'ga joylashtirish (render qilish) uchun ReactWrapper funksiya yozamiz.
import React from 'react';
import ReactDOM from 'react-dom/client';
import HelloReact from './HelloReact';
export function renderReactComponent(container: HTMLElement) {
const root = ReactDOM.createRoot(container);
root.render(<HelloReact />);
}
Bu funksiyada
ReactDOM.createRoot() orqali React komponentini render qilamiz. React o‘zining virtual DOM mexanizmi yordamida HelloReact komponentini HTML elementga aylantiradi.@Component({
selector: 'app-react-wrapper',
template: `<div id="react-root"></div>`,
standalone: true,
})
export class ReactWrapperComponent implements AfterViewInit {
constructor(private elRef: ElementRef) {}
ngAfterViewInit() {
const container = this.elRef.nativeElement.querySelector('#react-root');
renderReactComponent(container);
}
}ReactWrapperComponent vazifasi, Render qiling React component'ni Angular componentda ochilgan
<div id="react-root"></div>'ga joylash.AfterViewInit — bu Angular lifecycle metodi hisoblanadi. Uning vazifasi - ngAfterViewInit funksiyasi ichidagi kodlarni komponentning barcha
view elementlari to‘liq render qilingandan keyin ishga tushirishdir.AfterViewInit - angular.dev/api/core/AfterViewInit
Hosil bo'lgan Angular component'ni istalgan joy'da foydalana olamiz
<app-react-wrapper></app-react-wrapper>
🔗 medium.com/@zacky_14189/embedding-react-components-in-angular-the-easy-way-60f796b68aef
#react #angular
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3❤2😁1
🗂 Cache Busting in React / Vite
React projectda frontend’ga yangi feature (xususiyat) qo‘shdim va saytni deploy qildim. Lekin ayrim brauzerlarda eski versiya chiqib qolmoqda. Bu holat caching muammosi bilan bog‘liq
Brauzer har doim har bir faylni qayta yuklab olish o‘rniga, uni bir marta yuklab olgach, keyingi marta site'ga kirilganda aynan o‘sha faylni cache’dan olib foydalanadi.
Muammo shundaki, loyiha build qilinganda fayllar yangilansa ham, ularning nomi (main.js kabi) o‘zgarmasligi mumkin. Natijada foydalanuvchi sayt'ga kirganda, brauzer fayl nomi bir xil bo‘lgani uchun uni eski versiyadan – ya’ni cache’dan olib ishlatadi. Shuning uchun yangi o‘zgarishlar ko‘rinmaydi.
"Cache Busting" — bu yangi fayllarni avtomatik ravishda yangi nom bilan yaratish usuli. Har safar build qilinganda fayl nomiga hash qo‘shiladi, hash bu raqam va harflar'dan tashkil topgan birikma. Project har build qilinganda, o'zgarish kiritilgan file'da hash o'zgaradi
Masalan:
Shunda brauzer bu faylni yangi fayl deb biladi va cache o‘rniga yangisini yuklaydi.
React (Vite) loyihada,
Bu konfiguratsiya har bir faylni
🔗 keycdn.com/support/what-is-cache-busting
🔗 maxtsh.medium.com/the-ultimate-guide-to-cache-busting-for-react-production-applications-d583e4248f02
#reactjs #vite #cache #busting
✅ @jasurkh_dev
React projectda frontend’ga yangi feature (xususiyat) qo‘shdim va saytni deploy qildim. Lekin ayrim brauzerlarda eski versiya chiqib qolmoqda. Bu holat caching muammosi bilan bog‘liq
Frontend loyihalar (masalan, React) yangilanganda, foydalanuvchilarning brauzeri ko‘pincha eski fayllarni keshlangan (cache) holatda saqlab qoladi.
Brauzer har doim har bir faylni qayta yuklab olish o‘rniga, uni bir marta yuklab olgach, keyingi marta site'ga kirilganda aynan o‘sha faylni cache’dan olib foydalanadi.
Muammo shundaki, loyiha build qilinganda fayllar yangilansa ham, ularning nomi (main.js kabi) o‘zgarmasligi mumkin. Natijada foydalanuvchi sayt'ga kirganda, brauzer fayl nomi bir xil bo‘lgani uchun uni eski versiyadan – ya’ni cache’dan olib ishlatadi. Shuning uchun yangi o‘zgarishlar ko‘rinmaydi.
"Cache Busting" — bu yangi fayllarni avtomatik ravishda yangi nom bilan yaratish usuli. Har safar build qilinganda fayl nomiga hash qo‘shiladi, hash bu raqam va harflar'dan tashkil topgan birikma. Project har build qilinganda, o'zgarish kiritilgan file'da hash o'zgaradi
Masalan:
main.js → main.a3f5s3.js
Shunda brauzer bu faylni yangi fayl deb biladi va cache o‘rniga yangisini yuklaydi.
React (Vite) loyihada,
vite.config.ts fayl'dagi build'ga rollupOptions qo'shish orqali Cache Busting qilish mumkin:export default defineConfig({
build: {
outDir: 'dist',
assetsDir: 'assets',
rollupOptions: {
output: {
entryFileNames: 'assets/[name].[hash].js',
chunkFileNames: 'assets/[name].[hash].js',
assetFileNames: 'assets/[name].[hash].[ext]',
},
},
},
})Bu konfiguratsiya har bir faylni
hash bilan nomlaydi, shunda brauzer eskisini emas, yangisini yuklaydi.🔗 keycdn.com/support/what-is-cache-busting
🔗 maxtsh.medium.com/the-ultimate-guide-to-cache-busting-for-react-production-applications-d583e4248f02
#reactjs #vite #cache #busting
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4❤2⚡1
Angular'da komponentlar ikkita asosiy usul bilan ishlatiladi:
* Module'lar orqali
* Standalone component'lar orqali
Angular Modules (Modullar)
Modul - bu bir nechta komponent yoki servise'larni bir joyga jamlaydigan konteyner.
@NgModule({
declarations: [MyComponent],
exports: [MyComponent]
})
export class MyModule {}* Har bir komponent avval modulga
declarations orqali qo‘shiladi.* Qo'shilgan component'dan boshqa joyda foydalanish uchun imports orqali chaqiriladi.
Agar komponent declarations'ga qo‘shilgan bo‘lsa, uni faqat o‘sha modul ichida ishlatish mumkin. Uni boshqa modul'da ishlatish uchun, export qilingan bo‘lishi va modul import qilingan bo‘lishi kerak.
Standalone Components ( Mustaqil komponentlar )
Standalone component'lar Angular 14 versiyada qo'shilgan bo'lib, standalone komponent o‘zini o‘zi boshqaroladi - unga modul kerak emas.
Istagan boshqa komponentni React komponent'lariga o‘xshab to‘g‘ridan-to‘g‘ri imports qilib ishlatsa bo‘ladi.
@Component({
standalone: true,
selector: 'app-hello',
template: '<p>Hello!</p>',
imports: [CommonModule]
})
export class HelloComponent {}React:
import Card from './Card'
Angular:
imports: [CardComponent]
React component'lar ham standalone component hisoblanadi
Qulay tarafi: Tezroq ishlaydi, kod kamroq, soddaroq
Kamchiligi: Katta loyihalarda boshqaruv biroz murakkab bo‘lishi mumkin
🔗 medium.com/@ausaf.cs/angular-modules-vs-standalone-components-a-detailed-comparison-7b28c803cdd2
🔗 lynkz.com.au/blog/2024-angular-standalone-vs-modules
#angular #standalone #module
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥3