Bosh sahifa Wiki Data type

Data type

Data type — qiymat qanday ma’lumotni ifodalashi, xotirada yoki uzatishda qanday ko‘rinishi va unga qaysi amallar ruxsat etilishini belgilovchi formal tasnifdir. Integer, string, boolean va date oddiy turlar; array, record, class va union murakkab turlarga misol bo‘ladi.

Qiymatlar to‘plami va amallar

Type faqat storage hajmi emas. Masalan, integer ustida qo‘shish ma’noli, string ustida concatenation bajariladi. Ikkalasi bir xil byte ketma-ketligida saqlanishi mumkin, ammo type talqinni va valid operatsiyani belgilaydi.

Range ham type qismidir. 8 bit unsigned integer 0 dan 255 gacha qiymat saqlaydi. Overflow ayrim tilda wrap, boshqasida exception yoki undefined behavior beradi. Moliyaviy qiymat binary floating-point emas, belgilangan precision decimal bilan ifodalanishi mumkin.

Static va dynamic typing

Statically typed tilda expression type’i compile vaqtida tekshiriladi. Dynamic typed tilda qiymat type’i runtime’da aniqlanadi. Bu “type yo‘q” degani emas; xato faqat boshqa bosqichda aniqlanadi. Type inference programmer annotation yozmasa ham compiler type topishiga imkon beradi.

Strong va weak typing aniq yagona formal shkala emas. Odatda implicit conversion qanchalik erkinligi haqida ishlatiladi. Masalan, string va integerning avtomatik qo‘shilishi qulay bo‘lishi, biroq yashirin coercion xatosini keltirishi mumkin.

Primitive va composite turlar

Primitive type til yoki runtime tomonidan asosiy qiymat sifatida qo‘llanadi. Composite type boshqa turlardan tuziladi:

  • array bir xil turdagi elementlar ketma-ketligi;
  • tuple belgilangan pozitsiyalardagi turli qiymatlar;
  • record nomlangan fieldlar to‘plami;
  • map key va value juftliklari;
  • union bir necha variantdan aynan bittasi;
  • optional qiymat mavjud yoki yo‘qligini ifodalaydi.

Nullni barcha reference typelarga ruxsat etish runtime xatolarini oshiradi. Nullable yoki optional type mavjud emaslikni type tizimida aniq ko‘rsatadi va callerga tekshirish majburiyatini beradi.

Nominal va structural typing

Nominal tizimda ikki type bir xil fieldlarga ega bo‘lsa ham deklaratsiya yoki inheritance aloqasisiz mos hisoblanmaydi. Structural tizimda talab qilingan field va methodlar mavjudligi yetarli. Nominal model domain identitetini, structural model esa moslashuvchan interface compositionni kuchaytiradi.

Generic type List<T> kabi containerning element turini parametr qiladi. Variance List<Dog>ning List<Animal>ga mosligini belgilaydi. Mutable collectionda covariance yozish xavfsizligini buzishi mumkin, shu sabab read-only va mutable interfeyslar turlicha qoidaga ega.

Serialization va schema

Process xotirasidagi type network yoki disk formatiga avtomatik teng emas. Integer width, endianness, timestamp timezone va string encoding aniq belgilanadi. JSON number integer va decimalni alohida saqlamasligi mumkin; consumer o‘z type’iga conversion qiladi.

Schema registry message field turlarini versionlaydi. Fieldni integerdan stringga almashtirish producer va consumer compatibilitysini buzishi mumkin. Database migration ham type conversionda mavjud qiymatlar yangi range va formatga mosligini tekshiradi.

Database va qidiruv tizimi

Database data type constraint, index va query optimizerga ma’no beradi. Sana text bo‘lsa range query va sorting noto‘g‘ri ishlashi mumkin. Search mappingda text tokenlanadi, keyword aniq qiymat sifatida indekslanadi; ikkalasi ko‘rinishda string bo‘lsa ham amallari farq qiladi.

Type tanlash precision, range, nullability va kelajak evolyutsiyasiga asoslanadi. Juda umumiy string validationni applicationga ko‘chiradi, haddan ortiq tor type esa qonuniy kelajak qiymatini qabul qilmasligi mumkin.

Bog‘liq tushunchalar

Type system, Static typing, Dynamic typing, Generic type, Serialization, Schema, Nullability