Statikus típuskezelés

A Programozás Wiki wikiből

Statikus típuskezelést alkalmaz egy programozási nyelv, egy futtatóplatform vagy egy rendszer, ha benne a változók és kifejezések típusa előre egyértelműen eldönthető, rögzített, és az egyes futási vagy végrehajtási menetek között nem változik.

A statikus típuskezelés előfeltétele a változók, paraméterek és a függvények visszatérési típusának explicit kifejezése és rögzítése azok deklarációjában. Utóbbi birtokában minden az adott változóra, paraméterre vagy függvényre hivatkozó másik kódrészlet vagy kifejezés típusa is egyértelműen eldönthetővé válik, illetve pusztán formális elemzéssel, a kód tényleges végrehajtása nélkül is meghatározható az is, hogy egy adott - az előbbiekből eredően ismert típusú operanduson vagy operandusok között - művelet értelmes -e. Így számos elemi típushiba már a program kódjának elkészültét követően, de akár az első futás megkezdését megelőzően kiszűrhetővé válik; bár ennek ellenére rendkívül sokféle típus- és műveleti hiba továbbra is bekövetkezhet futásidőben is a programban.

A statikus típuskezelés másik nagy előnye, hogy alkalmazása esetén szintén előre, a program futtatása nélkül, már azt megelőzően is eldönhető, hogy az egyes műveletek során az operandusok között pontosan milyen műveleteket és esetleges átalakításokat kell elvégezni, így előre legenerálható az ehhez szükséges műveleti kód is. Utóbbinak ráadásul a program futása során, futásidőben már nem kell ellenőriznie az operandusok típusát sem a művelet elvégzésének megkezdése előtt, ami gyorsabb futást tesz lehetővé a dinamikus típuskezeléshez képest, ahol ezen vizsgálatok és ellenőrzések elvégzése minden egyes műveleti sor végrehajtásának és kifejezés kiértékelésének megkezdése előtt szükségesek, az összes futási menet során, újra és újra, ami csökkenti a program tényleges feldolgozóteljesítményét.

A statikus típuskezelés ugyanakkor egy komoly hátránnyal is rendelkezik. Nem teszi ugyanis lehetővé ugyanazon kódsorok és műveleti definíciók felhasználását eltérő típusú operandusokon és paramétereken történő műveletvégzéshez, akkor sem, ha a kifejezés ill. a műveletek mindegyik típus esetében értelmesek, egyértelműek és végrehajthatók lehetnének. Emiatt a statikus típuskezelést alkalmazó nyelvekben sokszor ugyanazt az eljárást vagy kódrészletek gyakran részben vagy egészében duplikálni kell, az eljárásoknak és metódusoknak pedig ún. túltöltött változatait kell létrehozni, hogy többfajta típusú paraméterekkel is meghívhatók legyenek. Ez lassítja a fejlesztés sebességét és rontja a kód karbantarthatóságát is.

Utóbbi problémákon a generikus típusokat és templating szerkezeteket is támogató statikus nyelvek ugyan némileg enyhítenek, de továbbra is plusz kód írását igénylik a teljesen dinamikus megoldásokhoz képest.