article

Az informatikában az adattípus (gyakran röviden típus) az értékek egy halmazához rendelt név vagy címke és ezen halmaz értékein végrehajtható néhány művelet.

A programnyelvek explicit vagy implicit módon támogatják az adatípusok használatát, amelyeket a nyelv statikusan vagy dinamikusan ellenőriz típus kényszerítés, ezzel biztosítja, hogy érvényes, helyes programokat hozzon létre az adott nyelv.

Alapok


A jelentés nélküli bitek csoportjához szemantikai jelentéssel bíró típus hozzárendelése a célja a típus meghatározásnak. Típust gyakran vagy a memória területhez vagy egy objektumhoz illetve változóhoz rendelnek, önmagában a számítógép hardver nem tesz különbséget memóriacím, utasítás kód, karakter, integer vagy lebegőpontos szám között.

A típusok arról adnak információt a programnak és a programozónak, hogyan kell kezelni az adott bitek csoportját.

A típusok használata leginkább a következő területeken biztosít előnyt:

  • Biztonság - A típusok használata biztosítja a fordítóprogramnak, hogy felismerhessen értelmetlen vagy feltehetőleg érvénytelen kifejezéseket. Például, a "Hello, World" / 3 kifejezést érvénytelennek kell tekinteni, mivel az osztás művelete (általánosan elfogadottan) nem értelmezhető egy string és egy egész között.

  • Optimalizálás - A statikus típus ellenőrzés a fordítóprogram számára hasznos információkat biztosít arra vonatkozóan, hogy milyen utasítás kód alkalmazásával lehet hatékony programot előállítani. Egy elem típusából meghatározható például az adott elem helyfoglalási igénye.

  • Dokumentálás - A típusok használatával a program dokumentációja egyértelműbbé és érthetőbbé válik. Például ha létrehozunk egy időbélyeg típust, és egy eljárás eredményeként keletkező egész számhoz hozzá is rendeljük ezt a típust, akkor egyértelmű a továbbiakban a dokumentáció olvasója számára, hogy a keletkezett egészet a program a továbbiakban időbélyegnek használja. A típus így járulékos információt szolgáltat, az olvasónak egyértelművé válik az eljárás célja és eredméynének további használata.

  • Absztrakció (vagy modularitás) - A típusok használatával a programozó lehetőséget kap arra, hogy magasab szinten gondolkodjon a programról, ne az alacsony szintű megvalósítási kérdések legyenek a meghatározók.

Típus ellenőrzés


Az eljárás, ami vagy fordítási időben (statikus ellenőrzés) vagy végrahajtási időben (dinamikus ellenőrzés) ellenőrzi típuskényszerítés szabályait, és szükség esetén végrehajtja a előírt művelet(ek)et.

A statikus ellenőrzés elsődlegesen a fordítóprogram feladata. Ha a nyelv kikényszeríti a típushoz tartózó szabályok végrehajtását (ez általában a típuskonverziók végrehajtását jelenti, lehetőleg információ vesztés nélkül), akkor a nyelv erősen típusos, elenkező esetben gyengén típusos.

Statikus és dinamikus típusok


A dinamikus típus hozzárendelés és ellenőrzés szinte minden esetben a futásidőben történik, mivel az egyes változókhoz ekkor rendelődik hozzá az aktuális típusuk (program végrehajtási ideje). A statikus típus rendszer dinamikus használata általában szükségessé teszi egy olyan rendszer kidolgozást, ami a futási időben képes arra, hogy a kövesse az időben esetleg változó típushozzárendelések változásait. Ez az igény egyrést triviálisnak, de ugyanakkor a helyes működés biztosítása miatt nehézkes is tűnik.

C, C++, Java, ML, és a Haskell statikus típus kezelést és ellenőrzést használják, míg a Objective-C, Scheme, Lisp, Smalltalk, Perl, PHP, Visual Basic, Ruby, és a Python dinamikus kezelést és típusellenőrzés valósítják meg. A trend azt mutatja, hogy a típus kezelést a fordított nyelvekben használják.

Kacsa típusosság egy humoros meghatározása az ugynevezett scripting nyelveknél használatos dinamikus típus kezlésének, ameylek bizonyos esetekben feltételezésekkel élenek a típusokra:" (értékre hivatkozás esetén) ha valami úgy megy, mint egy kacsa és úgy hápog, mint egy kacsa, akkor az kacsa". A mondás Dave Thomas-tól ered, aki a Ruby nyelvet használok közösségének tagja.

A típusellenőrzés megértéséhez vegyük a következő pszeudokód példát:

var x; // (1) x := 5; // (2) x := "hi"; // (3)

A példában, (1) deklaráljuk az x nevet; (2) hozzárendeljük az 5 egész értéket az x névhez; majd (3) hozzárendeljük a "hi"string értéket az x névhez. A legtöbb statikus típus kezelést használó rendszerben a fenti kód töredék érvénytelen, mivel (2) és (3) esetben az x-hez összeférhetetlen típusokat próbálunk kapcsolni. A nem megfelelő típusok használat jelző hiba a fordítás alatt megjelenik, nem generálódik futtatható program.

Kontrasztként, egy egyszerű dinamikus típus kezelő rendszer megengedi a program futtatását, mivel az x névvel azonosított hely minden típussa összefér. A megvalósított dinamikus típus kezelő rendszertől függ, hogy hibajelzést ad - "típus hiba" - vagy esetleg hibás kifejezést generál. A lényeg, hogy az esetleges hibajelzés a program futása közben generálódik. Egy tipikus dinamikus típus kezelő rendszer megvalósítása estében a program egy "jelzőt" rendel minden értékhez, ahol a jelző az aktuális típust mutatja, és egy művelet végrehajtása előtt ellenőrzésre is kerül.

Például:

var x = 5; // (1) var y = "hi"; // (2) var z = x + y; // (3)

Ebben a kódtöredékben, (1) az 5 értéket rendeljük az x-hez x; (2) a "hi" értékelt rendeljük az y-hoz; majd (3) megkiséreljük összeadni x-et és y-ont.

Egy dinamikus típust kezelő nyelvnél, minden érték valójában egy típusjelző és egy érték párból áll, az (1) értékadás létrehozza a (egész, 5) párt és a (2) értékadás a (string, "hi") párt. Amikor a program megkisérli végrehajtani a (3) sort, a nyelv megvalósítása megvizsgálja a párok típusjelzőit egész és string, majd felismeri, hogy az + (összeadás) nem értelmezhető művelet erre a két típusra, ezért hibát jelez.

Néhány statikus típus kezelő rendszert használó nyelv létrehoz egy "hátsó ajtót" a nyelvben, hogy a programozónak lehetősége legyen olyan kódot írni, melyen nem történik statikus típuselenőrzés. Például a C és a Java a "szereposztás" angolul cast megoldást alkalmazza.

Statikus és dinamikus típusellenőrzés a gyakorlatban


Erős és gyenge típusosság


Típusok és a polimorfizmus


Típusok


  • egész típusok — az egész számok és a természetes számok típusai

  • összetett típusok — a típus elemi típusokból épül fel, pl. rekord. Absztrakt adattípusoknak vannak összetett adatípusú és intefész adattípusú jellemzőik is, attól függően, minek tekintjük őket.

Speciális típusok


Kompatibilitás, ekvivalencia, helyettesíthetőség


A kompatibilitás és ekvivalencia kérdése nagyon bonyolult és ellentmondásos, és közvetlenül kapcsolódik a helyettesíthetőség kérdéséhez; más szavakkal: ha adott A típus és b típus, akkor azok azonos vagy kompatibilis típusúak? Használható-e A értéke helyett B értéke?

Ha A kompatibilis B-vel, akkor A Begyik altípusa (de fordítva ez nem minden esetben igaz!) - mondja ki a Liskov féle helyettesítési elv.

A típuskonverzió használatával lehetséges, hogy egy típus kompatibilis legyen egy másikkal, egy helyettesítési környezetben.

Két különböző típus kompatibilitásra létezik metódus: a nevük (elnevezésük) kompatibilis és a struktúrálisan kompatibilisek. Ekkor az "ekvivalencia" és a "kompatibilitás" kifejezések azonos fogalmat takarnak.

  1. típus név kompatibiltás azt jelenti, hogy két változó csak akkor kompatibilis típusú, ha egyik vagy a másik megjelenik azonos delkarációban vagy deklarációkban és azonos típusnevet használnak.
  2. struktúrális kompatibilitás azt jelenti, hogy a két változó struktúrája identikus.

A két metódusnak különböző variációi léteznek, a legtöbb (programozási) nyelv ezeknek a technikáknak a különböző kombinációit alkalmazza.

Lásd még


programozási nyelvek | polimorfizmus

Informatika

Data type Datový typ Тип переменной தரவு இனம்

 

This article is licensed under the GNU Free Documentation License. It uses material from the "Adattípus".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld