Dart Turlardagi o'zgartirish (konvertatsiya)

Hozirgi kunda ishlatilayotgan barcha dasturlash tillarida bo’lgani kabi Dart dasturlash tilida ham turlarni biridan boshqasiga o’tkazish imkoniyati mavjud. Birinchi o’rinda eng oddiy turlar uchun ko’rib chiqadigan bo’lsak.

Biz barcha dasturlash tillarida sonlarni yozayotganimizda butun yoki haqiqiy sonligidan qat’iy nazar ular aslida o’zi satr deb hisoblanadi. Chunki ular ham belgilardan yaratiladi. Ammo kompilyatsiya jarayonida dasturlash tili kompilyatori buni tekshiradi va o’zining shartlariga mos ravishda turlarga ajratadi. Xo’p agarda satr turidagi qiymatni qanday biz butun yoki haqiqiy songa o’tkaza olamiz? Bu savolga javob kerakli tur va uning parse funksiyasidan foydalanish orqali bo’ladi. Endi buni misollar orqali ko’rib o’tamiz.

Butun sonlar uchun parse() funsiya sintaksisi:

int parse(String source, {int? radix})

source - satr butun qiymatga o’tkazilishi kerak bo’lgan. radix esa bu ixtiyoriy parametr bo’lib, satrda ifodalangan qiymat qaysi sanoq sistemasida ekanligini ko’rsatib o’nlik sanoq sistemasiga o’tkazish mumkin. Biz asosan o’nlik sanoq sistemasida ishlaymiz, ammo kompyuter esa ikkilik sanoq sistemasida ishlagan holatda kerakli vazifalarni bajaradi. Bu kodda faqat 1 satrini butun songa o’tkazilganini ko’rishingiz mumkin:

// Butun sonlar
void main() {
String satr = "1";
int son = int.parse(satr);
print("$son -> ${son.runtimeType}");
}
>> 1 -> int

Agarda sizga boshqa sanoq sistemasidagi qiymatni o’nlikka o’tkazish vaqtida quyidagi yo’lni qo’llang:

void main() {
String txt = "101";
int son = int.parse(txt, radix: 2);
print(son);
}
>> 5

radix parametrida txt nomli satrdagi qiymat 2 lik sanoq sistemasida deb ifoda etilmoqda. Shu tufali 101 sonini o’nlik sanoq sistemasiga o’tkazib, natijada 5 qiymatini ekranga chiqarmoqda.

parse() – funksiya sintaksisi double turi uchun ozgina boshqacha ya’ni radix nomli ixtiyoriy parametr olib tashlangan. Mana bunday:

int parse(String source)

// Haqiqiy sonlar
void main() {
String satr = "101";
double son = double.parse(satr);
print("$son -> ${son.runtimeType}");
}
>> 101.0 -> double

Satrni mana bu misollardagi kabi berish to’g’ri hisoblanadi:

  • "3.14"
  • " 3.14 \xA0"
  • "0."
  • ".0"
  • "-1.e3"
  • "1234E+7"
  • "+.12e-9"
  • "-NaN"

Bu kodda E yoki e harfi 10 ning darajasi ekanligi, ya’ni asos 10 o’rnida e harfi kelmoqda va +, – ishoralaridan keyin keluvchi raqam darajasini bildiradi: 1234E+7 = 1234 * 107,

Butun va haqiqiy sonlarni satrga o’tkazish uchun esa toString() funksiyasi qo’llaniladi. Mana bu kabi:

// Satr
void main() {
int butun_son = 5;
double haqiqiy_son = 101.5;
String satr = butun_son.toString() + haqiqiy_son.toString();
print("$satr -> ${satr.runtimeType}");
}
>> 5101.5 -> String

Hozir kodda 2 ta turdagi o’zgaruvchilar qiymati satrga o’tkazilib, bir-biriga qo’shib yuborilmoqda. Shuning uchun 5101.5 chiqmoqda. Yana bu funksiyani to’plam va ro’yxat turlari uchun ham ishlata olamiz.

Ro’yxat elementlari ichidan takrorlanganlarini o’chirib yuborishimiz kerak bo’lsin. Bunda ro’yxatdan to’plamga va aksincha ortga to’plamdan ro’yxatga o’tishimiz kerak bo’ladi. Bu uchun esa ro’yxatning toSet() va to’plamning toList() funksiyasidan foydalanamiz.

void main() {
List<int> list = [1, 1, 1, 2, 2, 3];
var natija = list.toSet().toList();
print(natija);
}
>> [1, 2, 3]

list o’zgaruvchisi birinchi to’plamga o’tkazildi va takrorlangan elementlar o’chirib tashlanadi hamda ro’yxatga qaytarildi.

Lug’at elementlari kaliti va qiymatini bu funksiyalar orqali alohida ro’yxat yoki to’plam qilib ajratib olishimiz mumkin. Buning uchun avval keys va values xususiyatlari orqali olishimiz kerak lug’atdan.

void main() {
Map sayyoralar = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Mars'};
final keysSet = sayyoralar.keys.toSet();
final valuesList = sayyoralar.values.toList();
print(keysSet);
print(valuesList);
}
>> {1, 2, 3} >> [Mercury, Venus, Mars]

Oldin o’zgarmaslar mavzusida final turi bilan tanishgandik. Bu turdagi o’zgaruvchiga qiymat dastur ishlagan vaqtda o’zlashtirib olinar edi. Hozir ham mana shunday holat bo’lmoqda va bu ham bir misol.