Flutter Notes
203 subscribers
82 photos
8 videos
1 file
168 links
Avval bajaring.
Keyin to'g'ri bajaring.
Undan keyin esa yaxshiroq bajaring.

Android Notes : @android_notes_bek

Muallif : @Otabek_Nabijonov
Download Telegram
Dartda Reference, Shallow va Deep copy-lar haqida.

Reference copy.
Bu bir obyektning xotirada joylashgan joyini bildirib turuvchi havola (reference)-ni nusxalash. Yuqoridagi misolda, "person2" o'zgaruvchi shunchaki "person1" o'zgaruvchi o'zida obyektning xotirada joylashgan joyning havolasini nusxaladi.

Shallow copy.
Nomidan malumki, yuzaki nusxalash. Yuqoridagi misolda, "person3" o'zgaruvchi uchun xotirada alohida "Person" obyekti yaraladi lekin uning ichidagi obyektlar "person1" obyekti ichidagi obyektlarning havolasini nusxalaydi. Buning kamchilik tomoni, ichki obyektlar o'zgarsa boshqalariga ham tasir qiladi.

Deep copy.
Chuqur nusxalash bu butunlay yangi obyekt yaratish degani. Yuqoridagi misolda "person4" va "person5" o'zgaruvchilar uchun xotirada alohida obyekt va hatto uning ichidagi obyektlar ham alohida yaraladi.

#Dart
Dartda Runes class haqida.

Runes - bu Unicode skalyar qiymatlari ketma-ketligini ifodalaydi. Unicode skalyar qiymatlari, Unicode standartidagi belgilarni ifodalovchi butun sonlardir.

Unicode - bu dunyodagi barcha yozuvda ishlatiladigan har bir harf, raqam va belgi uchun noyob raqamli qiymat. Dart string UTF-16 kod birliklari ketma-ketligi bo'lganligi sababli, Unicode-ni satr ichida ifodalash maxsus sintaksisni talab qiladi.

Dart string UTF-16 kod birliklarining oddiy ketma-ketligi bo'lgani uchun satrdagi 32-bitli Unicode qiymatlari maxsus sintaksis yordamida ifodalanadi.

Unicode-ni ifodalashning odatiy usuli - "\uXXXX", bu yerda XXXX 4 xonali o'n oltilik (hex) qiymatdir. Masalan, yurak belgisi ♥️ - "\u2665". 4 ta hex raqamdan ko'proq yoki kamroq belgilash uchun qiymatni {} qavs ichiga qo'yiladi. Masalan, kulgan belgi 😆 - "\u{1f606}".

String.runes va String.codeUnits metodlar, berilgan satrning 16-bitli UTF-16 kod birliklarining o'zgarmas ro'yxatini qaytaradi.

Manba : Link
Unicode List : Link

#Dart
1
Dartda "parse" va "tryParse" metodlar farqi.

Dartdagi parse va tryParse metodlari raqamning String holatidan haqiqiy son qiymatiga aylantirish uchun ishlatiladi. Biroq, ikkala metod o'rtasida noto'g'ri input-lar bilan ishlashda farq bor.

Parse.
Bu metod int va double sinflarida mavjud bo'lib, satrni tahlil qilish va uni mos ravishda integer yoki double-ga aylantirish uchun ishlatiladi. Agar satrni yaroqli raqamga (valid number) ajratish mumkin bo'lmasa, FormatException xatolikni chiqaradi.

TryParse.
Bu metod int va double sinflarida ham mavjud va u parse metodiga o'xshab ishlaydi. Biroq, invalid input-lar uchun exception o'rniga tryParse metod null-ni qaytaradi. Bu dastur oqimini to'xtatmasdan, noto'g'ri kiritilgan ma'lumotlarni ehtiyotkorlik bilan boshqarishda qo'l keladi.

Manbalar:
parse : Link
tryParse : Link

#Dart
👍2
Dartda "null aware" operator turlari.

Safe Navigation (?.)
Obyektning maydonlari yoki metodlariga, obyekt null bo'lmagan holatdagina kirish imkonini beradi.


List<int>? nums;
print(nums?.length);


Default Null-Aware (??)
Obyekt yoki o'zgaruvchi null bo'lgan holatda, dastlabki qiymat beriladi.


int? a;
print(a ?? 10);


Fallback Assignment (??=)
O'zgaruvchi hozirgi vaqtda null bo'lganda qiymat beriladi, agar null bo'lmasa, qiymat berilmay o'tib ketadi.


String? name;
name ??= "David";
print(name);


Null-Aware Spread (...?)
Bir listni boshqa bir listga qo'shayotgan paytda, null bo'lmasagina qo'shadi.


List<int> list1 = [1, 2, 3];
List<int>? list2 = null;
List<int> list3 = [...list1, ...?list2];
print(list3); // [1, 2, 3]


Manba : Link

#Dart
👍2
Dartda Statik analiz va Linter haqida.

Ma'lumki, dasturiy ta'minotni sinovdan o'tkazish, ishlab chiqish bosqichida mahsulot sifatini o'lchash uchun amalga oshiriladi. Sinov usullaridan biri bu Statik test. Buni ikkita asosiy toifaga bo'lish mumkin, Statik tahlil va sharhlar (Review).

Sharhlarda dasturchilar, feedback oladilar va muammolarni shaxslar yoki jamoalar bilan muhokama qiladilar.

Statik tahlil kodlarni ishga tushirmasdan amalga oshirilishi mumkin bo'lgan avtomatlashtirilgan vositalar yordamida amalga oshiriladi. Buning asosiy kontseptsiyasi shundan iboratki, tool-lar yordamida dasturchilar tomonidan yozilgan kodni tahlil qilish.

Dartda statik tahlilni amalga oshirish uchun sizga "analyzer" paketi yordam beradi. Dastlabki holatda, siz uni dart-sdk bilan olasiz. Xatolar (error), ogohlantirishlar (warning) va boshqa mumkin bo'lgan muammolar uchun dart statik tahlilini sozlashingiz mumkin.

Buning uchun loyihamizga "analysis_options.yaml" ni qo'shishimiz kerak. Bu yerda biz tahlil qilish uchun turli qoidalarni qo'shishimiz/yangilashimiz mumkin. Bunga qo'shimcha ravishda, samarali dart-dan har qanday lint qoidasini qo'shishingiz mumkin.

Agar siz yangi flutter loyihasini yaratsangiz, default holatda "analysis_options.yaml" loyiha bilan birga keladi.

flutter_lints va lints paketi juda ko'p linter qoidalarini taqdim etadi. Biz ushbu paketni dev_dependencies-ga qo'shishimiz va uni "analysis_options.yaml" faylga kiritishimiz mumkin.

Manbalar :
1. Linter rules : Link
2. Medium : Link
3. Hashnode : Link

#Dart
2👍1
Dartda "Extension" metodlar.

Kengaytma (extension) metod - bu dasturchilarga mavjud sinflar yoki interfeyslarga, ularning kodlarini o'zgartirmasdan yangi metodlarni qo'shish imkonini beradi. Bu metodlardan xuddi asl sinfning bir qismi sifatida foydalanish mumkin.

Kengaytma metod yaratish uchun "extension" kalit so'zidan foydalaniladi. Uning ichida metod, getter/setter, static member va operator yozish mumkin.

Bundan tashqari, kengaytmalarga nom berishimiz mumkin, bu API konfliktlari yuzaga kelganda foydali bo'ladi. Kengaytma metodlar dinamik o'zgaruvchilar uchun ishlamaydi.

Manbalar :
Official doc : Link
Medium : Link
GFG : Link

#Dart
👍1
Dartda kengaytma turlari.

Extension type (kengaytma turi).
Dart 3.3 versiyada qo'shilgan, mavjud turni boshqa, faqat statik interfeys bilan o'rab oladigan kompilyatsiya vaqtidagi abstraktsiya. Ular statik JS interop-ning asosiy komponenti hisoblanadi.

Yuqoridagi misolda ikkala yechim ham ishlaydi, ammo ikkinchisi yanada mustahkam va moslashuvchan. Kengaytma turidan foydalanib, biz ma'lum xatti-harakatlarga ega yangi EvenNumber turini yaratishimiz mumkin. Bu nativ platformalar bilan o'zaro ishlash yoki unumdorlikni (performance) optimallashtirish uchun foydali.

Kengaytma turlarida konstruktor bo'lishi mumkin, kengaytma metodlarda esa yo'q.

Xulosa :
Oddiy funksiyalar uchun kengaytma metodlardan foydalaning. Murakkab funksiyalar, nativ platformalar bilan o'zaro ishlash yoki unumdorlikni optimallashtirish uchun kengaytma turlaridan foydalaning.

Manbalar :
1. Official doc : Link
2. Medium : Link

#Dart
👍1
Dartda "Callable" obyektlar.

Dart-da barcha ma'lumot turlari (data types) class va obyektlardir. Biz "int" kalit so'zi bilan o'zgaruvchi yaratganda, aslida "int" class-ning obyektini yaratgan bo'lamiz.

Endi dart-dagi funksiyalarni ko'rib chiqaylik. Dartda ishlatadigan har bir funksiya asosan Function class-ning obyektidir. Ammo funksiya o'zining noyob xususiyatiga egaligi sabab biz bu funksiyani chaqira olamiz.

Biz yaratadigan funksiyalar obyekt bo'lsa, ularni qanday chaqiramiz ?

Buning javobi esa mahsus "call()" metodi.

Dart chaqiriladigan (callable) obyektlarni qo'llab-quvvatlaydi. Bu shuni anglatadiki, agar biron bir sinf ichida call metodi e'lon qilingan bo'lsa, siz ushbu sinf obyektini chaqirishingiz mumkin.

Manbalar:
1. Official doc : Link
2. Medium : Link
3. GFG : Link

#Dart
Dartda "trim", "trimLeft" va "trimRight" metodlari.

trim - matndagi boshlanuvchi (leading) va tugaydigan (trailing) barcha bo'sh joylarni kesadi.

trimLeft - matndagi boshlanuvchi barcha bo'sh joylarni kesadi.

trimRight - matndagi tugaydigan barcha bo'sh joylarni kesadi.

#Dart
Dartda anonim funksiyalar.

Anonim funksiyalar, shuningdek lambda funksiyalari yoki Callback deb ham ataladi, bu nomga ega bo'lmagan funksiyalardir. Ular Dart-dagi kuchli xususiyat bo'lib, yanada ixcham va moslashuvchan kodni yaratishga imkon beradi.

Bu funksiyalarda nom yo'qligi ularni qisqa, bir martalik foydalanish holatlari uchun ideal qiladi. Nol yoki undan ortiq parametrlarni qabul qilishlari mumkin.

Dartda funksiyalar birinchi darajali fuqaro (citizen)-lardir, ya'ni ular o'zgaruvchilarga tayinlanishi, argument sifatida berilishi yoki boshqa funksiyalardan qaytarilishi mumkin.

Manbalar:
1. Official doc : Link
2. Medium : Link
3. GFG : Link

#Dart
2👍1
Dartda StringBuffer haqida.

StringBuffer- satrlarni samarali birlashtirish uchun sinf.

write*() metodlaridan foydalangan holda string-ni bosqichma-bosqich qurishga ruxsat beradi. String-lar faqat "toString" chaqirilganda bitta satrga birlashtiriladi.

String bu bitta yoki qo'sh tirnoq ichiga olingan belgilar to'plami va u o'zgarmasdir (immutable). Bundan farqli o'laroq, StringBuffer ham bitta yoki qo'sh tirnoq ichiga olingan belgilar to'plamidir, lekin u o'zgaruvchan (mutable).

String sinfida har xil operatsiyalarni bajarganimizda, har safar xotirada yangi obyekt yaratiladi, u har bir bajarilgan operatsiya uchun xotirani sarflaydi. StringBuffer bilan bunday emas, har gal biz turli amallarni bajarganimizda, o'rniga bir xil obyekt o'zgartiriladi.

Manbalar:
1. Official doc : Link
2. Medium : Link

#Dart
🆒2
Dartda to'plamlar (collections).

Dartda asosiy to'plam turlari 3 ta, List, Set va Map interfeyslar.

List.
Bu dublikatlarni o'z ichiga olishi mumkin bo'lgan elementlarning tartiblangan to'plami. List-lar indekslanadi, ya'ni siz elementlarga ularning joylashuvi bo'yicha kirishingiz (access) mumkin.

Set.
Bu noyob elementlarning tartibsiz (unordered) to'plamidir. Set takroriy qiymatlarga ruxsat bermaydi, ya'ni bir qiymatning yagona (unique) bo'lishini taminlaydi.

Map.
Bu kalit-qiymat (key-value) juftliklari to'plami bo'lib, har bir kalit yagonadir (unique). Map-lar ma'lumotlarni qidirishni samarali qilish uchun qiymatlarni kalitlar bilan bog'lash imkonini beradi.

Dart shuningdek, "dart:collection" kutubxonasi orqali maxsus to'plamlar, Queue, LinkedList va boshqa to'plam interfeyslar bilan birlashgan class-larni taqdim etadi.

Manbalar:
1. Official doc: Link
2. Article: Link
3. Dart collection: Link
4. GFG: Link

#Dart
👍3
Dartdagi Loop-lar farqi.

Dartda eng keng tarqalgan iteratsiya mexanizmlari:

For Loop: chegara (range) ma'lum bo'lganda boshqariladigan iteratsiya uchun idealdir. Umuman olganda, for sikl Dartda eng tezidir, ayniqsa sikl o'zgaruvchisi sikldan tashqarida e'lon qilingan va qo'lda oshirilganda.

While Loop: Agar takrorlashlar soni oldindan ma'lum bo'lmaganda va holat (condition)-ga qarab boshqarishda ishlatiladi. While sikl For sikl kabi tezdir, ayniqsa iteratsiyalar soni oldindan belgilanmagan sharoitlarda foydalanilganda. Biroq, agar vaziyat murakkab bo'lsa yoki u ko'proq xarajat (overhead)-larni o'z ichiga olsa, ular biroz sekinroq bo'lishi mumkin.

Do-While Loop: while sikliga o'xshaydi, lekin kamida bitta bajarilishni kafolatlaydi, chunki shart sikldan keyin tekshiriladi.

For…in Loop: sikli to'plam (collection)-larni takrorlashning qisqacha usulini taklif qiladi, o'qish oson, lekin unumdorlik (performance)-da potentsial xarajatga ega.

forEach method: Bu metod to'plamlar bo'yicha funksional iteratsiyaga imkon beradi, ko'pincha o'qilishi osonligi uchun maqtovga sazovor. Bu metod For yoki While sikllariga qaraganda sekinroq, chunki u qoʻshimcha xarajatlarni qoʻshadigan funksiya chaqiruvlarini oʻz ichiga oladi.

Map method: Bu metod to'plamdagi har bir elementni o'zgartirib, yangi ro'yxat (List)-ni qaytaradi. Kollektsiyalarni funksional uslubda o'zgartirish uchun ishlatiladi. Bu metod For yoki While sikllariga qaraganda sekinroq, chunki u yangi to'plamlarni yaratadi va qo'shimcha jarayon (processing)-ni o'z ichiga oladi.

Manba : Link

#Dart
🆒1
Dartda List konstruktorlari.

1. List.filled - list hajmini oldindan berish, qaysi qiymat bilan to'ldirish va qiymat o'sib boruvchi bo'lish yoki yo'qligini begilash uchun.

List.filled(int length, E fill, {bool growable = false});

2. List.generate - filled kabi aniq hajmdagi listni yaratadi, farqli tomoni, har bir qiymatni "generator" funksiyasi orqali belgilash mumkin.

List.generate(int length, E generator(int index), {bool growable = true});

3. List.from - mavjud iteratsiya (list, map, set)-dan yangi list yaratadi, elementlar toifasidan kelib chiqib turni belgilaydi va har xil turdagi elementlarni qabul qilishi mumkin.

List.from(Iterable elements, {bool growable = true});

4. List.of - mavjud iteratsiyadan yangi list yaratadi, ko'rsatilgan turni talab qiladi. Bu barcha elementlarning shu turda bo'lishini belgilaydi va "type-safety" ni ta'minlaydi.

List.of(Iterable<E> elements, {bool growable = true});

5. List.unmodifiable - elementlarini o'zgartirib bo'lmaydigan list yaratadi.

List.unmodifiable(Iterable elements);

6. List.empty - bo'sh list yaratadi va growable parametriga ko'ra list uzunligini nazorat qilish mumkin.

List.empty({bool growable = false});

Manba: Link

#Dart
3
Dartda raqamlar haqida.

1. int - bu tur 64-bitli butun sonni ifodalaydi. U hech qanday kasr komponentisiz butun sonlarni saqlashi mumkin. Int uchun maksimal qiymat 2^63 - 1 (taxminan 9,22 kvintillion), minimal qiymat esa -2^63 (taxminan -9,22 kvintillion).

2. double - bu tur 64-bitli ikki aniqlik (double-precision)-dagi o'nlik raqamni ifodalaydi. U kasrli qiymatlarni ifodalash uchun ishlatiladi. Double uchun maksimal cheklangan qiymat taxminan 1,7976931348623157 × 10^308.
Minimal ijobiy qiymat taxminan 5 × 10^-324. Shuningdek, u NaN (Not a Number), musbat cheksizlik (positive infinity) va salbiy cheksizlik (negative infinity) kabi maxsus qiymatlarni ifodalashi mumkin.

3. num - bu tur int va double uchun abstrakt super-sinfdir. Bu ko'proq moslashuvchan raqamli ko'rinishga imkon beradi va butun yoki o'nlik qiymatlarini qabul qilish imkonini beradi. Server-dan keladigan json malumotlar ichida, deylik balans qiymatlari bazida butun va bazida o'nlik bo'lib kelish holatida juda foydali.

4. BigInt - bu abstrakt klass ixtiyoriy aniqlikdagi butun sonlarni ifodalash uchun ishlatiladi. 64-bit bilan cheklangan int-dan farqli o'laroq, BigInt mavjud xotira ruhsat berganicha kattalashishi mumkin. Bu klass int turi chegarasidan oshib ketadigan juda katta butun sonlar bilan hisob-kitoblarni bajarish kerak bo'lganda foydalidir. Masalan, u kriptografiya yoki ilmiy hisob-kitoblarda katta sonlarni boshqarishi mumkin.

Konvertatsiya: BigInt ni toInt() va toDouble() kabi metodlardan foydalanib int yoki double ga aylantirishingiz mumkin, lekin ehtiyot bo'ling, chunki BigInt int yoki double chegaralaridan oshib ketsa, bu aniqlikni yo'qotishiga olib kelishi mumkin. BitInt-ni int-ga o'girishdan oldin 'isValidInt' orqali tekshirish tavsiya qilinadi.

Dartdagi raqamlarning ko'rinishi (representation) platformadan platformaga farq qilishi mumkin. Bu shuni anglatadiki, agar siz kodingizni DartVM-ga joylashtirsangiz, o'lcham boshqacha bo'ladi va agar siz kodingizni brauzerda joylashtirsangiz, o'lcham boshqacha bo'ladi.

Manbalar:
1. int doc: Link
2. double doc: Link
3. num doc: Link
4. BigInt doc: Link
5. Medium: Link

#Dart
👍3
Dartda EventLoop haqida.

EventLoop (voqealar sikli).
Bu Flutter ilovalariga bloklanmaydigan operatsiyalarni bajarishga imkon beradi, bu esa UX-ni silliq bo'lishi uchun zarurdir. Masalan, tarmoq soʻrovi tugashini kutayotganda, EventLoop ilovaga foydalanuvchi maʼlumotlarini qayta ishlash va UI yangilanishlarini koʻrsatishni davom ettirish imkonini beradi.

Ps: Dart kodlari yagona/asosiy isolate-da ishga tushadi, lekin istasangiz ko'proq isolate yaratishingiz mumkin. Har bir yangi Isolate o'zining alohida xotirasi va eventloop-ga ega bo'ladi.

Flutter ilovasi ishga tushganda, Dart runtime uning uchun ajratilgan oqim jarayoni (thread process)-ni yaratadi. Bu jarayon 2 ta asosiy navbat (queue)-ni ishga tushiradi: microtask va event.

Har ikkala navbat FIFO (first-in, first-out) asosida ishlaydi. EventLoop doimiy ravishda ushbu queue-larni tekshiradi va vazifa (task)-larni quyidagicha qayta ishlaydi:

Microtask Queue: Bu queue, event queue-ga nisbatan ustunlik qiladi. EventLoop bo'sh turganda, event queue-ga o'tishdan oldin u birinchi navbatda microtask queue-dagi barcha vazifalarni bajaradi.

Event Queue: Barcha microtask-lar qayta ishlangandan so'ng, EventLoop event queue-dagi vazifalarni bajaradi. Bunga User interaksiyalari, timer-lar va boshqa asinxron hodisalar (future, stream etc) kiradi.

Manbalar:
1. Video: Link
2. Medium: Link
3. Article: Link
4. Article: Link
5. Article: Link

#Dart
👍4
Dartda "Future" sinf konstruktorlari.

1. Future().
Bu konstruktor Timer.run() orqali asinxron hisoblash qiymatini qaytaradigan Future obyektini yaratadi. whenComplete() yoki then() metodlari orqali tugallangan qiymatni olishingiz mumkin.

2. Future.delayed().
Bu konstruktor berilgan kechikish (delay)-dan keyin hisoblash natijasini qaytaradigan Future obyektini yaratadi.

3. Future.error().
Bu konstruktor tezda xato (error) bilan yakunlanadigan Future obyektini yaratadi.

4. Future.microtask().
Bu konstruktor "scheduleMicrotask" bilan asinxron hisoblash natijasini o'z ichiga olgan Future obyektini yaratadi. Microtask queue-dagi event-lar 1-chi bo'lib ishga tushishini hisobga olsak, bu konstruktorga berilgan parametr tezda ishga tushadi.

5. Future.sync().
Bu konstruktor sinxron bajariladigan hisoblash natijasini qaytaradigan Future obyektini yaratadi va kamdan-kam holatlarda ishlatiladi.

6. Future.value().
Bu konstruktor qiymat bilan yakunlangan Future obyektini yaratadi. Agar value() ichiga beriladigan parametr Future obyekti bo'lmasa, parametr Microtask queue ichiga qo'yiladi, aks holda Event queue ga o'tkaziladi.


Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link

#Dart
Dart Virtual Mashinasi haqida.

Dart VM, Dart ilovalari uchun yengil ishga tushish muhiti bo'lib xizmat qiladi. Dart VM bir qancha imkoniyatlarni taqdim etadi, jumladan JIT va AOT kompilyatsiya, DevTools, Heap va Isolate.

JIT va AOT kompilyatsiya haqida batafsil.

Heap.
Bu koddagi har bir element uchun qancha xotira ajratilishini boshqaradigan axlat yig'uvchi (garbage collector).

Isolate.
Bu Dart virtual mashinasida boshqa izolyatsiyalardan mustaqil ravishda ishlaydigan hisoblash birligi bo'lib, operatsiyalarni bir vaqtning o'zida va parallel ravishda bajarishga imkon beradi.

Izolyatsiyalardagi xotiralar alohida bo'lgani sababli, izolyatsiyalar bir-biri bilan malumot almashishni portlar orqali amalga oshiriladi.

Mutator thread.
Bu Dart dasturini ishga tushirishda virtual mashinaning umumiy C API-dan foydalanadigan oqimdir. Istalgan vaqtda izolyatsiyaga faqat bitta mutator oqim ulangan bo'lishi mumkin. Bundan tashqari, izolyatsiyaga bir nechta yordamchi oqimlar ulanishi mumkin, masalan:

Orqa fonda ishlaydigan JIT kompilyator oqimlari, bir vaqtning o'zida GC belgilash oqimlari va GC tozalash oqimlari.

AST yadrosi (Kernel Abstract Syntax Tree).
Dart kodini AST yadrosiga tarjima qilish jarayoni CFE (Common Front End) deb nomlangan dart paketi tomonidan boshqariladi.

Dart dasturi ishga tushganda, Dart VM dastur strukturasini ifodalovchi AST-ni yuklaydi. Ushbu AST dangasalik bilan tahlil qilinadi (parsed lazily), ya'ni VM faqat kerak bo'lganda kodning kerakli qismlarini qayta ishlaydi va resurslardan foydalanishni optimallashtiradi.

Manbalar:
1. Article : Link
2. Medium : Link
3. Medium : Link
4. Video : Link

#Dart
Dartda Garbage Collector.

Dartning axlat yig'uvchisi (GC) Dart Runtime ichida joylashgan va Dart dasturlash tilining muhim komponenti bo'lib, xotirani avtomatik va samarali boshqarish uchun mo'ljallangan.

Dart, xotirani ikkita asosiy avlod (generation)-ga ajratadigan avlod axlat yig'ish strategiyasidan foydalanadi:

Yangi avlod (young space scavenger).
Ushbu komponent qisqa muddatli obyektlar bilan bog'liq xotirani bo'shatish uchun javobgardir. Xotira maydoni faol (active) va faol bo'lmagan (inactive) qismlarga bo'linadi, yangi obyektlar faol qismga o'tkaziladi. Faol qismi to'lganida, tirik obyektlar faol bo'lmagan yarmiga o'tkaziladi. Chiqindilarni yig'ish obyektning holatini (alive yoki dead) eng pastdagi (root) obyektlaridan boshlab havolalarni tekshirish orqali aniqlaydi.

Eski avlod (parallel mark and sweep collectors).
Parallel belgilash (marking) obyekt grafigini aylanib o'tish orqali xotiradagi foydalanilayotgan obyektlarni aniqlaydi va bir vaqtning o'zida ishlatilmayotgan obyektlarni o'chiradi. O'chirilgan obyektlar keyingi axlat yig'ish jarayonida qayta ishlash (recycling) uchun xotira hovuziga (Heap)-ga qaytariladi.

GC ishga tushish vaqti.
Chiqindilarni yig'ish ishi User ilova bilan interaksiya bo'lmaganda tegishli vaqtlarda ishga tushadi. Axlat yig'uvchi tomonidan taqdim etilgan ilgaklar (hooks) Flutter engine-ga ilova ishlamayotganida yoki User bilan hech qanday interaksiya bo'lmaganda uni xabardor qilish imkonini beradi.

Manbalar:
1. Medium: Link
2. Medium: Link
3. Linkedin: Link

#Dart
👍2
Dartda "covariant" haqida.

covariant - bu Dart 2.12 versiyada qo'shilgan, vorislik (inheritance) irarxiyasida xavfsiz tarzda kengaytirilishi mumkin bo'lgan tur (type) parametrni belgilash uchun ishlatiladigan kalit so'z. Boshqacha qilib aytadigan bo'lsak, u bola sinfiga, tur tizimi (type system)-da hech qanday muammo tug'dirmasdan, ota sinfda ishlatilganidan ko'ra aniqroq turdan foydalanishga imkon beradi.

Faraz qilaylik, bizda "Animal" deb nomlangan ota sinf bor, unda "Food" turidagi parametrni qabul qiluvchi "eat" deb nomlangan metod mavjud. Shuningdek, bizda "Cat" deb nomlangan bola sinfi bor, u Animal-dan voris oladi. Aytaylik, biz faqat "Fish"-ni parametr sifatida qabul qilish uchun Cat-dagi "eat" metodini qayta yozmoqchimiz, chunki mushuklar faqat baliq iste'mol qiladilar. Bu yerda covariant yordamga keladi.

Manbalar:
1. Official doc: Link
2. Medium: Link
3. Medium: Link
4. Article: Link

#Dart
👍2