Bosh sahifa Wiki Type system

Type system

Type system — dastur qiymatlari va ifodalarini turlarga ajratib, ular ustida qaysi amallar qonuniy ekanini belgilaydigan qoidalar majmuasidir. Type integer, matn, funksiya, record yoki domain obyektini ifodalashi mumkin. Tizim noto‘g‘ri kombinatsiyani compile vaqtida yoki runtime’da aniqlab, dastur xatolarining bir qismini cheklaydi.

Static va dynamic typing

Statically typed tilda expression type’i odatda bajarilishdan oldin tekshiriladi. Annotation majburiy bo‘lishi yoki compiler inference qilishi mumkin. Dynamically typed tilda qiymat runtime type’ga ega bo‘lib, amal bajarilganda tekshiriladi. Bu tasnif “kuchli” yoki “zaif” typing bilan bir xil emas.

Gradual typing typed va untyped qismlarni bir dasturda bog‘laydi. Boundary’da runtime check yoki cast qo‘shiladi. Annotation coverage oshishi API va toolingni yaxshilashi mumkin, ammo any kabi escape hatch kafolatni kamaytiradi.

Nominal va structural typing

Nominal tizim moslikni declaration identity yoki explicit inheritance orqali belgilaydi. Bir xil fieldga ega ikki class nomi boshqa bo‘lsa alohida type bo‘lishi mumkin. Structural tizim esa qiymatning kerakli memberlarga egaligini tekshiradi.

Structural typing adapter kodini kamaytiradi, lekin tasodifiy mos shape domain ma’nosi bir xil ekanini anglatmaydi. Branded yoki opaque type bir xil primitive asosidagi UserId va OrderIdni aralashtirishni oldini olishi mumkin.

Polimorfizm

Parametric polymorphism generic funksiya bir nechta type uchun bir xil mantiqda ishlashiga imkon beradi. Constraint type kerakli operationni bildiradi. Subtype polymorphism base interface orqali turli implementationni qabul qiladi. Ad-hoc polymorphism overload yoki type class bilan bir nomga type bo‘yicha boshqa amal tanlaydi.

Variance generic container subtypingini boshqaradi. Mutable container ko‘pincha invariant, faqat o‘qiladigan producer covariant bo‘lishi mumkin. Noto‘g‘ri variance type safety’ni buzadi.

Null va xato

Nullable type qiymat yo‘qligini type darajasida ko‘rsatadi. Flow analysis null checkdan keyin type’ni toraytiradi. Optional type yo‘qlikni explicit variantga aylantiradi, lekin uni ko‘r-ko‘rona unwrap qilish runtime xatoni qaytaradi.

Result yoki algebraic data type muvaffaqiyat va xatoni bir type’da ifodalaydi. Exhaustive pattern matching barcha variantni ko‘rib chiqishga yordam beradi. Exception esa alohida control-flow modeli bo‘lib, checked yoki unchecked bo‘lishi mumkin.

Xavfsizlik va chegaralar

Type safety memory safety bilan bog‘liq bo‘lishi mumkin, lekin barcha type-safe til barcha security xatodan holi emas. SQL injection, access control va business invariant ko‘pincha oddiy type’dan tashqarida. Refinement type yoki domain constructor validated qiymatni ifodalashi mumkin.

Foreign function interface, unsafe block, deserialization va reflection type system kafolatidan chiqish nuqtalaridir. Ular kichik, audit qilinadigan wrapper ichida saqlanadi va runtime validation bilan himoyalanadi.

Type evolyutsiyasi

Public type’ga yangi variant yoki field qo‘shish consumer exhaustivenessini buzishi mumkin. Sealed hierarchy compile-time nazorat beradi, open hierarchy esa extensionga ruxsat beradi. Library qaysi contractni taklif qilishini hujjatlashtiradi.

Type alias yangi nominal xavfsizlik bermasligi mumkin; u faqat boshqa nomdir. Opaque wrapper constructor orqali invariantni majburiy qiladi. Serialization type bilan bir xil emas: runtime object type-safe bo‘lsa ham tashqi JSON yaroqsiz bo‘lishi mumkin. Decoder validationdan keyin domain type yaratadi. Schema va type definition parallel o‘zgarmasligi uchun code generation yoki contract test qo‘llanadi.

Bog‘liq tushunchalar

Static typing, Dynamic typing, Type inference, Polymorphism, Subtyping, Generic programming, Type safety