Lazán típusos

A Programozás Wiki wikiből

Egy programozási nyelvet akkor tekintünk lazán típusosnak, ha benne a változók tartalmának és a kifejezések eredményének átértelmezése csak igen lazán korlátozott.

A lazán típusos nyelvek jellemzően megengednek minden - vagy legalábbis sok - típusátértelmezést addig, amíg az alábbi feltételek közül legalább egy teljesül:

  • a forrás és a céltípus tárolásához szükséges memóriaterület mérete megegyezik (pl. egy 4 darab bájtból álló vektor átértelmezhetó egy 4 bájton tárolt egésszé)
  • a forrás és a céltípus azonos típusosztályba tartozik (pl. egy előjeles egész átértelmezhető előjel nélküli egésszé, egy 16-bites szó átértelmezhető byte-tá, tetszőleges mutató átértelmezhető más típusú vagy típus nélküli mutatóvá, és objektumreferenciák átértelmezhetők más objektumokra mutató referenciákká, mutatókká)
  • a forrás és a céltípus adatábrázolási módja hasonló (pl. egy bájtokból álló vektor jellemzően átértelmezhető karakterfüzérré)


A laza típusosság előnye, hogy az ellenőrzött típusátalakítások mellett - vagy azok helyett - lehetővé teszi a tárolt és feldolgozott adatok típusának mindössze átértelmezését (is), amely pusztán azt befolyásolja, hogy a program a továbbiakban miként fogja értelmezni és feldolgozni a már egyszer letárolt és előállt adatokat - de azokon tényleges feldolgozást és ellenőrzést nem jelent. Ennek köszönhetően a laza típusátalakításokkal dolgozó programok gyorsabban futhatnak.

Ugyanakkor az ellenőrzések kiiktatása azt a veszélyt rejti magában, hogy az egymással nem felülről kompatibilis típusok között ill. nem kölcsönösen egyértelmű leképezést jelentő irányban történő átalakítások hibás adatértelmezést vagy adatvesztést okoznak. (Pl. egy 16-bites előjeles egész egy bájttá történő átértelmezése adatok elvesztését és sérülését okozza, ha a 16-bites előjeles negatív vagy 255-nél nagyobb számot tárolt. Hasonló módon egy bájtokból álló vektor zérusterminált sztringgé alakítása során is adatok veszhetnek el, ha a vektorban tárolt bájtok között szerepelt ASCII 0 karakter, vagy az utolsó bájt maga nem ilyen karakter volt benne.)

Lazán típusos nyelvek például a C és a Pascal nyelv egyes bővítései is.