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
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
Flutterda Dynamic island.
Dynamic Island - bu birinchi marta Apple tomonidan iPhone 14 Pro va Pro Max modellari bilan taqdim etilgan UI kontseptsiyasi. Bu UX (foydalanuvchi tajribasi)-ni to'xtatmasdan notification, alert va davom etayotgan harakatlarni ko'rsatishning uzluksiz usulini ta'minlash uchun mo'ljallangan.
Funksiya ekranning yuqori qismidagi tabletka shaklidagi kesmani ishlatadi va joriy faoliyat yoki bildirishnoma asosida uning hajmi va ichidagi kontentni dinamik ravishda o'zgartiradi.
Dinamik orolning asosiy xususiyatlari.
Jonli harakatlar: U musiqa tinglash, timer yoki sport natijalari kabi real vaqtda ma'lumotlarni ko'rsatishi mumkin, bu esa foydalanuvchilarga ilovalarni ochmasdan xabardor bo'lishni osonlashtiradi.
Bildirishnomalar: An'anaviy bildirishnoma banneri o'rniga foydalanuvchilar umumiy interfeysni yaxshilagan holda ogohlantirishlarni yanada integratsiyalashgan tarzda ko'rishlari mumkin.
Ko'p vazifa (multi-tasking): foydalanuvchilar bir vaqtning o'zida bir nechta ilovalar bilan ishlashlari mumkin, chunki Dinamik orol turli manbalardan ma'lumotlarni ko'rsatishi mumkin.
Manbalar:
1. Medium: Link
2. Medium: Link
3. Medium: Link
4. Video: Link
5. Video: Link
#Flutter
Dynamic Island - bu birinchi marta Apple tomonidan iPhone 14 Pro va Pro Max modellari bilan taqdim etilgan UI kontseptsiyasi. Bu UX (foydalanuvchi tajribasi)-ni to'xtatmasdan notification, alert va davom etayotgan harakatlarni ko'rsatishning uzluksiz usulini ta'minlash uchun mo'ljallangan.
Funksiya ekranning yuqori qismidagi tabletka shaklidagi kesmani ishlatadi va joriy faoliyat yoki bildirishnoma asosida uning hajmi va ichidagi kontentni dinamik ravishda o'zgartiradi.
Dinamik orolning asosiy xususiyatlari.
Jonli harakatlar: U musiqa tinglash, timer yoki sport natijalari kabi real vaqtda ma'lumotlarni ko'rsatishi mumkin, bu esa foydalanuvchilarga ilovalarni ochmasdan xabardor bo'lishni osonlashtiradi.
Bildirishnomalar: An'anaviy bildirishnoma banneri o'rniga foydalanuvchilar umumiy interfeysni yaxshilagan holda ogohlantirishlarni yanada integratsiyalashgan tarzda ko'rishlari mumkin.
Ko'p vazifa (multi-tasking): foydalanuvchilar bir vaqtning o'zida bir nechta ilovalar bilan ishlashlari mumkin, chunki Dinamik orol turli manbalardan ma'lumotlarni ko'rsatishi mumkin.
Manbalar:
1. Medium: Link
2. Medium: Link
3. Medium: Link
4. Video: Link
5. Video: Link
#Flutter
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
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
Flutter 3.27 versiyasi.
Bu versiyada framework, engine va ekotizim bo‘yicha yangilanishlar, jumladan, Impeller bilan ishlash va Cupertino vidjetlarini yaxshilash bo‘yicha yangilanishlar bor. Bundan tashqari, DevTools-da qiziqarli yangi xususiyatlar taqdim etilgan.
O'zgarishlar:
1. Cupertino vidjetlarida yangilanishlar.
2. Yaxshilangan Material theme va ba'zi button-lardagi kichik o'zgarishlar.
3. CarouselView-da qo'shimcha xususiyatlar.
4. Yaxshilangan Text selection.
5. Row va Column bolalariga bo'sh joy (spacing) berish imkoniyati.
6. Yangi Android qurilmalari uchun Impleller, eskilari uchun Skia default holatda.
7. IOS qurilmalarida UI bilan bog'liq muammolar tuzatildi.
8. Web-ga oid bir qancha yangilanishlar.
9. "build.gradle.kts" fayllarini support qilish.
va boshqalar...
Manba : Link
#Flutter
Bu versiyada framework, engine va ekotizim bo‘yicha yangilanishlar, jumladan, Impeller bilan ishlash va Cupertino vidjetlarini yaxshilash bo‘yicha yangilanishlar bor. Bundan tashqari, DevTools-da qiziqarli yangi xususiyatlar taqdim etilgan.
O'zgarishlar:
1. Cupertino vidjetlarida yangilanishlar.
2. Yaxshilangan Material theme va ba'zi button-lardagi kichik o'zgarishlar.
3. CarouselView-da qo'shimcha xususiyatlar.
4. Yaxshilangan Text selection.
5. Row va Column bolalariga bo'sh joy (spacing) berish imkoniyati.
6. Yangi Android qurilmalari uchun Impleller, eskilari uchun Skia default holatda.
7. IOS qurilmalarida UI bilan bog'liq muammolar tuzatildi.
8. Web-ga oid bir qancha yangilanishlar.
9. "build.gradle.kts" fayllarini support qilish.
va boshqalar...
Manba : Link
#Flutter
⚡1
Dartda (deyarli) foydasiz Tip-lar haqida ajoyib maqola ekan.
https://medium.com/@schultek/useless-tips-for-flutter-you-probably-never-need-64f912221e0d
https://medium.com/@schultek/useless-tips-for-flutter-you-probably-never-need-64f912221e0d
Medium
Useless Tips for Dart you probably never need.
There exist a lot of great articles highlighting the most useful Tips and Tricks for Flutter. This article is not one of them.
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.
2. List.generate - filled kabi aniq hajmdagi listni yaratadi, farqli tomoni, har bir qiymatni "generator" funksiyasi orqali belgilash mumkin.
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.
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.
5. List.unmodifiable - elementlarini o'zgartirib bo'lmaydigan list yaratadi.
6. List.empty - bo'sh list yaratadi va growable parametriga ko'ra list uzunligini nazorat qilish mumkin.
Manba: Link
#Dart
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
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
Kanaldagi postlar xaritasi 2-qism.
👉 1-qism.
93. Dartda List konstruktorlari.
94. Dartda raqamlar haqida.
95. Dizayn vs Arxitektura naqshlari.
96. Dartda EventLoop haqida.
97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
98. Dartda "Future" sinf konstruktorlari.
99. Dart Virtual Mashinasi haqida.
100. Dartda Garbage Collector.
101. Flutterda "debugInvertOversizedImages" haqida.
102. Dartda "covariant" haqida.
103. Flutterda RichText() va Text.rich() farqlari.
104. Flutterda Overlay va OverlayEntry vidjetlari.
105. HarmonyOS haqida.
106. Dartda generator funksiya kalit so'zlari.
107. Dart FFI haqida.
108. Dizayn naqshlari (Design patterns).
109. Singleton pattern.
110. Builder pattern.
111. Factory Method pattern.
112. Abstract Factory pattern.
113. Prototype pattern.
114. Adapter pattern.
115. Decorator pattern.
116. Proxy pattern.
117. Bridge pattern haqida qisqacha.
118. Facade pattern haqida qisqacha.
119. Composite pattern haqida qisqacha.
120. Flyweight pattern haqida qisqacha.
121. Chain of Responsibility pattern haqida qisqacha.
122. Mediator pattern haqida qisqacha.
123. State pattern haqida qisqacha.
124. Visitor pattern haqida qisqacha.
125. Command pattern haqida qisqacha.
126. Memento pattern haqida qisqacha.
127. Strategy pattern haqida qisqacha.
128. Iterator pattern haqida qisqacha.
129. Observer pattern haqida qisqacha.
130. Template Method pattern haqida qisqacha.
131. AGP vs Gradle farqlari.
132. Flutterda Deep Link.
👉 1-qism.
93. Dartda List konstruktorlari.
94. Dartda raqamlar haqida.
95. Dizayn vs Arxitektura naqshlari.
96. Dartda EventLoop haqida.
97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
98. Dartda "Future" sinf konstruktorlari.
99. Dart Virtual Mashinasi haqida.
100. Dartda Garbage Collector.
101. Flutterda "debugInvertOversizedImages" haqida.
102. Dartda "covariant" haqida.
103. Flutterda RichText() va Text.rich() farqlari.
104. Flutterda Overlay va OverlayEntry vidjetlari.
105. HarmonyOS haqida.
106. Dartda generator funksiya kalit so'zlari.
107. Dart FFI haqida.
108. Dizayn naqshlari (Design patterns).
109. Singleton pattern.
110. Builder pattern.
111. Factory Method pattern.
112. Abstract Factory pattern.
113. Prototype pattern.
114. Adapter pattern.
115. Decorator pattern.
116. Proxy pattern.
117. Bridge pattern haqida qisqacha.
118. Facade pattern haqida qisqacha.
119. Composite pattern haqida qisqacha.
120. Flyweight pattern haqida qisqacha.
121. Chain of Responsibility pattern haqida qisqacha.
122. Mediator pattern haqida qisqacha.
123. State pattern haqida qisqacha.
124. Visitor pattern haqida qisqacha.
125. Command pattern haqida qisqacha.
126. Memento pattern haqida qisqacha.
127. Strategy pattern haqida qisqacha.
128. Iterator pattern haqida qisqacha.
129. Observer pattern haqida qisqacha.
130. Template Method pattern haqida qisqacha.
131. AGP vs Gradle farqlari.
132. Flutterda Deep Link.
👍1
Dizayn vs Arxitektura naqshlari.
Dizayn naqshlari (design patterns).
Takrorlanadigan kod muammolari uchun muhim va qayta foydalanish mumkin bo'lgan yechimlardir. Ular kodlash paytida tez-tez duch keladigan kichikroq, aniq muammolarni hal qilishga yordam beradi, masalan, obyekt yaratish yoki komponentlarni ajratish.
Dizayn naqshlari tushunchasi "Gang of Four" (GoF) tomonidan o'zining "Design Patterns: Elements of Reusable Object-Oriented Software" klassik kitobida ommalashgan. Ushbu kitobda ular dizayn naqshlarining uchta asosiy turini taqdim etdilar: Creational, Structural va Behavioral.
Arxitektura naqshlari (architecture patterns).
Tizim darajasidagi takrorlanadigan muammolarni hal qilish uchun muhim, qayta foydalanish mumkin bo'lgan yechimlardir. Ular ilovangizning umumiy arxitekturasini tartibga solishga e'tibor qaratadilar. Ular butun tizimingiz qanday ishlashini ko'rsatadigan rejalardir.
Arxitektura naqshlari rejalashtirish bosqichida, hatto kodlashni boshlashdan oldin, tizimingizning turli qismlari qanday o'zaro ta'sir qilishini shakllantirish uchun ishlatiladi.
Manba : Link
Dizayn naqshlari (design patterns).
Takrorlanadigan kod muammolari uchun muhim va qayta foydalanish mumkin bo'lgan yechimlardir. Ular kodlash paytida tez-tez duch keladigan kichikroq, aniq muammolarni hal qilishga yordam beradi, masalan, obyekt yaratish yoki komponentlarni ajratish.
Dizayn naqshlari tushunchasi "Gang of Four" (GoF) tomonidan o'zining "Design Patterns: Elements of Reusable Object-Oriented Software" klassik kitobida ommalashgan. Ushbu kitobda ular dizayn naqshlarining uchta asosiy turini taqdim etdilar: Creational, Structural va Behavioral.
Arxitektura naqshlari (architecture patterns).
Tizim darajasidagi takrorlanadigan muammolarni hal qilish uchun muhim, qayta foydalanish mumkin bo'lgan yechimlardir. Ular ilovangizning umumiy arxitekturasini tartibga solishga e'tibor qaratadilar. Ular butun tizimingiz qanday ishlashini ko'rsatadigan rejalardir.
Arxitektura naqshlari rejalashtirish bosqichida, hatto kodlashni boshlashdan oldin, tizimingizning turli qismlari qanday o'zaro ta'sir qilishini shakllantirish uchun ishlatiladi.
Manba : Link
⚡1
Flutter Notes pinned «Kanaldagi postlar xaritasi 2-qism. 👉 1-qism. 93. Dartda List konstruktorlari. 94. Dartda raqamlar haqida. 95. Dizayn vs Arxitektura naqshlari. 96. Dartda EventLoop haqida. 97. Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari. 98. Dartda…»
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
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
Flutterda "WidgetsBindingObserver" va "AppLifecycleListener" farqlari.
Flutterda ilovaning hayot sikli (lifecycle)-ni boshqarish va hodisa (event)-larini kuzatish uchun ikkita asosiy sinf - WidgetsBindingObserver va AppLifecycleListener mavjud.
WidgetsBindingObserver.
Bu ilovaning hayot sikli hodisalarini tinglash imkonini beruvchi "mixin". U didChangeAppLifecycleState deb nomlangan metodni taqdim etadi, u ilovaning hayot sikli holati har doim oʻzgarganda (masalan, paused, resumed, inactive etc) ishga tushadi. Bu sinf Flutter ilovalaridagi hayot sikli hodisalarini kuzatishning an'anaviy usuli bo'lib kelgan.
AppLifecycleListener.
Flutter 3.13 versiyadan boshlab ilovaning hayot sikli hodisalarini tinglashning yangi usuli sifatida taqdim etildi. Bu sinf WidgetsBindingObserver bilan solishtirganda yanada sodda API taqdim etish orqali hayot siklidagi o'zgarishlarga javob berish jarayonini soddalashtiradi.
Masalan, eski usul orqali faqatgina aynan bir holat (state) o'zgarishini tinglash mumkin, yangi usul orqali esa, state-lar o'rtasidagi o'tish (transitions)-larni tinglashingiz mumkin.
Manbalar:
1. Official doc: Link
2. Official doc: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Flutter
Flutterda ilovaning hayot sikli (lifecycle)-ni boshqarish va hodisa (event)-larini kuzatish uchun ikkita asosiy sinf - WidgetsBindingObserver va AppLifecycleListener mavjud.
WidgetsBindingObserver.
Bu ilovaning hayot sikli hodisalarini tinglash imkonini beruvchi "mixin". U didChangeAppLifecycleState deb nomlangan metodni taqdim etadi, u ilovaning hayot sikli holati har doim oʻzgarganda (masalan, paused, resumed, inactive etc) ishga tushadi. Bu sinf Flutter ilovalaridagi hayot sikli hodisalarini kuzatishning an'anaviy usuli bo'lib kelgan.
AppLifecycleListener.
Flutter 3.13 versiyadan boshlab ilovaning hayot sikli hodisalarini tinglashning yangi usuli sifatida taqdim etildi. Bu sinf WidgetsBindingObserver bilan solishtirganda yanada sodda API taqdim etish orqali hayot siklidagi o'zgarishlarga javob berish jarayonini soddalashtiradi.
Masalan, eski usul orqali faqatgina aynan bir holat (state) o'zgarishini tinglash mumkin, yangi usul orqali esa, state-lar o'rtasidagi o'tish (transitions)-larni tinglashingiz mumkin.
Manbalar:
1. Official doc: Link
2. Official doc: Link
3. Article: Link
4. Article: Link
5. Article: Link
#Flutter
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
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
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
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
Does your work environment suck? Is your job boring? Try to fix it. But don't try forever. As Martin Fowler says, "you can change your organization or change your organization".
from book "The Pragmatic Programmer".
from book "The Pragmatic Programmer".