Type conversion — qiymatni bir ma’lumot turidan boshqasiga o‘tkazish jarayoni. Sonni matnga aylantirish, butun sonni floating-point ko‘rinishga kengaytirish yoki umumiy interfeys reference’ini aniq klassga tekshirib olish bunga misoldir. Conversion til tomonidan avtomatik bajarilishi yoki dasturchi tomonidan aniq so‘ralishi mumkin; har ikki holatda qiymat, aniqlik va xato siyosati tushunilishi kerak.
Implicit va explicit o‘tkazish
Implicit conversion operator yoki funksiya kutilgan type sabab avtomatik yuz beradi. Kichik integer katta diapazonga o‘tishi odatda xavfsiz widening hisoblanadi. Explicit cast dasturchining niyatini ko‘rsatadi va ehtimoliy narrowing, truncation yoki runtime tekshiruvni qabul qiladi.
Tilning coercion qoidalari kutilmagan natija berishi mumkin. Matn va sonni + operatorida aralashtirish ayrim tilda concatenation, boshqasida xato bo‘ladi. Boolean, null va bo‘sh satrning son bilan taqqoslanishi ham tilga xos. Muhim biznes qoidada implicit coercion o‘rniga aniq parse va conversion ishlatiladi.
Sonli conversion
Katta integer kichik bit diapazoniga o‘tganda overflow yuz beradi. Ba’zi muhit xato beradi, ba’zisi modulo bo‘yicha o‘raydi yoki yuqori bitlarni tashlaydi. Signed va unsigned orasidagi conversion manfiy qiymatni juda katta musbat songa aylantirishi mumkin. Boundary test minimal va maksimal qiymatlarni qamrab oladi.
Integer’dan floating point’ga o‘tishda diapazon keng bo‘lishi mumkin, ammo barcha katta integerlar aniq ifodalanmaydi. Floating point’dan integerga conversion kasr qismini yumaloqlash yoki kesishni talab qiladi. Moliyaviy qiymat binary float orqali o‘tkazilsa cent xatosi paydo bo‘lishi mumkin; decimal yoki minor-unit integer ishlatiladi.
Matnni parse qilish
String’dan songa o‘tish formatni talqin qilishdir. Decimal separator, minglik ajratgich, plus-minus, whitespace va exponent locale yoki protokolga bog‘liq. Machine format uchun locale-independent qoida ishlatiladi; foydalanuvchi kiritishi esa uning locale’i bilan parse qilinib, ichki canonical type’ga o‘tkaziladi.
Sana conversion’da timezone, daylight saving va mavjud bo‘lmagan local vaqt muammosi bor. 2026-07-17 sana, 2026-07-17T12:00:00Z esa aniq instantdir. Timezone ko‘rsatilmagan timestampni server local zonasi deb taxmin qilish turli deploymentda boshqa natija beradi.
Obyekt va representation
Upcasting subclassni base type sifatida ko‘rish bo‘lib, obyektning o‘zi o‘zgarmaydi. Downcast runtime type mos bo‘lmasa xato yoki null natija berishi mumkin. Pattern matching type tekshiruvi va qiymat olishni bitta xavfsiz operatsiyada birlashtiradi. Unsafe reinterpret cast esa bir xil bitlarni boshqa type deb talqin qiladi va alignment hamda memory model qoidalarini buzishi mumkin.
Serialization ham type representationini matn yoki baytga aylantiradi, ammo u oddiy cast emas. Enum nomi, decimal aniqligi, null va unknown field siyosati schema’da belgilanadi. Round-trip test decode(encode(x)) muhim xususiyatlarni saqlashini tekshiradi.
Xatolarni boshqarish
Tashqi input conversion’i muvaffaqiyatsiz bo‘lishi odatiy holat. Exception, result type yoki tryParse orqali xato ajratiladi; noto‘g‘ri qiymat jim default 0 ga aylantirilmaydi. Xato xabari kutilgan formatni tushuntiradi, lekin maxfiy xom inputni logga to‘liq yozmaydi.
Conversion zanjiri
Bir qiymat bir necha oraliq type orqali o‘tsa, har bosqich alohida yo‘qotish keltirishi mumkin. Decimal qiymat avval binary float, keyin string va yana decimalga aylansa asl aniqlik tiklanmasligi ehtimoli bor. Eng qisqa, ma’noni saqlaydigan conversion yo‘li tanlanadi va oraliq representation hujjatlashtiriladi.
Database driver, ORM va JSON serializer avtomatik conversion bajarishi mumkin. Ularning timezone, decimal, enum va null qoidalari application type’i bilan test qilinadi. Upgrade paytida default o‘zgarsa, compile muvaffaqiyatli bo‘lsa ham saqlangan ma’lumot semanticsi buzilishi mumkin.
Bog‘liq tushunchalar
Type system, Type coercion, Casting, Parsing, Serialization, Numeric overflow, Data type