# Dart

Dart har qanday platformada tezkor ilovalarni ishlab chiqish uchun dasturchiga interfeyslarni yasashga optimallashtirilgan dasturlash tili. Uning maqsadi [ko'p platformali](#user-content-fn-1)[^1] dasturlarni ishlab chiqish uchun eng samarali dasturlash tilini taklif qilishdir, ilova ramkalar[^2] uchun esa moslashuvchan turli platformalarda ishlay olishni taklif qiladi.

<figure><img src="https://3747947116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJUW5ifHYYmXeSg67r6kC%2Fuploads%2FlXRgZgCwbwJU7mYk9Myg%2Fimage.png?alt=media&#x26;token=dc481b87-76a7-4a42-8341-fc2de740ea6c" alt=""><figcaption></figcaption></figure>

Dasturlash tillari ularning texnik jihatlari bilan belgilanadi, tilning imkoniyatlari va kuchli tomonlarini tilning rivojlanish jarayonida qilingan tanlovlar hal qiladi. Dart'da esa  foydalanuvchi interfeysini ishlab chiqish uchun dasturchiga kerakli jihatlarga ko'proq ahamiyat qaratilgan va shu o'rinda mobile, web hamda desktop[^3] platformalariga muammosiz kompilyatsiya bo'lishini ta'minlaydi. Dart shuningdek [Flutter](https://flutter.dev/)'ni asosiy qismini tashkil qiladi. Flutter uchun dasturlash tilini va ilovalarni ishlashi uchun muhitni  Dart taminlaydi shuningdek, kodni formatlash, tahlil qilish va sinovdan o'tkazish kabi ko'plab asosiy ishlab chiqishdagi vazifalarini ham qo'llab-quvvatlaydi.

### Dart dasturlash tili <a href="#dasturlash-tili" id="dasturlash-tili"></a>

Dart dasturlash tili [<mark style="color:green;">type safe</mark>](#user-content-fn-4)[^4]<mark style="color:green;">:</mark> u o'zgaruvchining qiymati har doim o'zgaruvchining statik type'ga mos kelishini ta'minlash uchun statik turdagi tekshirishdan foydalanadi.Garchi type'lar majburiy bo'lsada, type annotatsiyalarini yozish xohishga qarab chunki Dart'da type inference mavjud bo'lib type'larni avtomatik ravishda aniqlay oladi.Bu bilan Dart sizni doim type'lar bilan ishlashga majbur qiladi degani emas ba'zi eksperimentlar va kodni dinamik bo'lishi zarur bo'lgan qismlari uchun <mark style="color:green;">dynamic</mark> type'dan ham foydalanishga imkon beradi.

Dart hech qanday qo'shimchalarsiz <mark style="color:blue;">sound null safety'</mark>ni qo'llab quvvatlaydi. Bu shuni anglatadiki siz qiymatni <mark style="color:blue;">null</mark> bo'lishini aytsangizgina <mark style="color:blue;">null</mark> bo'ladi. Sound null safaty bilan, Dart sizning dasturingiz ishlash jarayonida uchrashi mumkin bo'lgan null [<mark style="color:blue;">exception</mark>](#user-content-fn-5)[^5]'larni statik kod tahlili orqali himoya qiladi. Boshqa null-safe tillardan farqli o'laroq,Dart o'zgaruvchini [<mark style="color:blue;">non-nullable</mark>](#user-content-fn-6)[^6] deb belgilasa u o'zgaruvchi hech qachon null bo'lmaydi. Agar siz ishlayotgan kodni [<mark style="color:blue;">debugger</mark>](#user-content-fn-7)[^7]'da tekshirsangiz [<mark style="color:blue;">non-nullability</mark>](#user-content-fn-8)[^8] ish davomida ham sound null safety borligi uchun saqlanib qolganini ko'rishingiz mumkin.

### Dart kutubxonalari <a href="#dart-kutubxonalari" id="dart-kutubxonalari"></a>

Dart asosiy kutubxonalarga boy bo'lib, ko'plab kundalik dasturlash vazifalariga zarur bo'lgan funksionalliklarni taqdim etadi:

* [<mark style="color:blue;">Built-in</mark>](#user-content-fn-9)[^9]   types[^10], to'plamlar, va boshqa asosiy funksionalliklarni xar bir Dart dasturi uchun (<mark style="color:green;">`dart:core`</mark>)
* Ko'plab to'plamlar ya'ni queue, linked list, hashmap, va binary tree uchun (<mark style="color:green;">`dart:collection`</mark>)
* <mark style="color:blue;">JSON</mark> va <mark style="color:blue;">UTF-8</mark> kabi turli xil maʼlumotlar koʻrinishlari oʻrtasida konvertatsiya qilish uchun kodlovchilar va dekoderlar (<mark style="color:green;">`dart:convert`</mark>)
* Matematik konstantalar va funksiyalar, tasodifiy sonlarni hosil qilish uchun (<mark style="color:green;">`dart:math`</mark>)
* <mark style="color:blue;">Future</mark> va <mark style="color:blue;">Stream</mark> kabi <mark style="color:blue;">class</mark>'lar bilan asinxron dasturlashni qo'llab-quvvatlash (<mark style="color:green;">`dart:async`</mark>)
* Qat'iy o'lchamdagi ma'lumotlarni samarali boshqarish uchun (<mark style="color:green;">`dart:typed_data`</mark>)
* <mark style="color:blue;">File</mark>, <mark style="color:blue;">socket</mark>, <mark style="color:blue;">HTTP</mark> va boshqa <mark style="color:blue;">I/O</mark> jihatlarini qo'llab quvvatlash uchun(web ilovalaridan tashqari) (<mark style="color:green;">`dart:io`</mark>)&#x20;
* [<mark style="color:blue;">C</mark>](#user-content-fn-11)[^11] uslubidagi interfeysni taqdim etadigan boshqa dasturlash tillari qulayliklaridan foydalanish uchun  (<mark style="color:green;">`dart:ffi`</mark>)
* Bir nechta topshiriqlarni bir vaqtda bajarish uchun, bir-biridan mustaqil va <mark style="color:blue;">thread</mark>'larga o'xshaydigan lekin xotirani ulashmaydi, faqat xabarlar orqali aloqa qiladigan <mark style="color:blue;">isolate</mark>'lar ishlatiladi (<mark style="color:green;">`dart:isolate`</mark>)
* HTML elementlari va boshqa webga taalluqli ilovalar brauvzer va Document Object Model (DOM) bilan aloqa qilishi uchun (<mark style="color:green;">`dart:html`</mark>)

  <br>

[^1]: multi-platform

[^2]: frameworks

[^3]: Windows, MacOS, Linux ...

[^4]: o'zgaruvchilarning turlari o'zgarmasligi

[^5]: dasturdagi xatoliklar

[^6]: null qiymat qabul qilmaydigan

[^7]: qo'shimcha imkoniyatlarga ega kodni tekshirish vositasi

[^8]: null qiymat qabul qilmaslik

[^9]: Hech qanday qo'shimchalarsiz, avvaldan bor

[^10]: o'zgaruvchini turlarni

[^11]: C dasturlash tili
