Wat bedoelen we met typecontrole in een programmeertaal?


Beste antwoord

Typecontrole wordt gedaan door de typecontrole die verifieert dat het type van een constructie (constant, variabele, array, lijst, object) komt overeen met wat wordt verwacht in de gebruikscontext. Dit zorgt ervoor dat bepaalde soorten programmeerfouten worden gedetecteerd en gerapporteerd. Beschouw bijvoorbeeld de volgende uitdrukking waarbij de modulo-operator 8\% 3.5 betrokken is. Deze uitdrukking zal resulteren in een fout aangezien de modulo-operator twee gehele getallen verwacht. Type checker moet weten over – Syntactische constructies in taal (bijv. Operatoren) –Basis soorten taal (int, real) – Regels voor het toewijzen van typen aan constructies Bijv. “Als beide operanden van + int zijn, is het resultaat int”

Er zijn twee soorten typecontrole Statisch en Dynamisch

Statische typecontrole: typecontrole uitgevoerd tijdens het compileren. Wanneer u deze talen gebruikt, wordt u gedwongen om het type variabelen te declareren voordat u ze gebruikt (compiler moet weten tot welk gegevenstype de variabele behoort). Beschouw bijvoorbeeld een statement in c ++ int a = 10; hier moet de compiler het datatype van variabele “a” kennen voordat hij deze gebruikt. Bijv. C, C ++, JAVA, C # zijn enkele Statisch getypte talen

Dynamisch Type controle: Type controle uitgevoerd tijdens runtime. Wanneer u deze talen gebruikt, hoeft u het type variabele niet te specificeren of te declareren, maar de compiler berekent zelf welk type een variabele is wanneer u hem voor het eerst een waarde toewijst. Beschouw nu enkele uitspraken in python: str = “Python” str2 = 10 Hier hoeft u het datatype niet aan te geven. De compiler zelf weet tot welk type de variabele behoort als je er voor het eerst een waarde aan toewijst (str1 is van het gegevenstype “String” en str2 is van het type “int”). Bijv. VBScript en Python zijn Dynamisch getypeerde talen.

Antwoord

Typecontrole is testen om te zien of de bewerking op variabelen gebruiken een compatibel type. Verschillende talen hebben verschillende niveaus van variabele compatibiliteit. Sterk type gecontroleerde taal heeft strikte regels voor variabeletypen in expressie. Aan de andere kant van de medaille zijn er talen waarin verschillende typen kunnen worden gemengd. Deze talen zullen gemengde typen enigszins compenseren door enkele regels voor variabeleconversie te gebruiken.

In sommige strikte typetalen kunt u bijvoorbeeld slechts twee gehele getallen of twee drijvende-kommagetallen toevoegen, maar een fout markeren als u probeert om een ​​geheel getal aan een float toe te voegen. Als u in andere talen een geheel getal aan een float toevoegt, kan het impliciet het gehele getal naar een float worden geconverteerd en vervolgens de optelling uitvoeren.

C ++ bevindt zich ergens in het midden. In C ++ zijn enkele impliciete conversies mogelijk. C en C ++ hebben een aantal mazen in de wet. Ten eerste heet gieten. Casten is in feite de compiler vertellen om iets van een variabele als “dit type” in tegenstelling tot de gedeclareerde waarde. Als we bijvoorbeeld in het bovenstaande voorbeeld willen dat de float wordt behandeld als een int, kunnen we de float casten naar een int.

Voorbeeld: int x, a; zweven y, b;

b = x + y;

a = x + (int) y; of misschien wil je a = (int) (x + y);

Aangezien pointers over het algemeen worden getypt, kunnen we casten gebruiken om een ​​structuur eruit te laten zien als een ander type structuur.

typedef struct {/ * leden * /} A;

typedef struct {/ * leden * /} B;

A ax;

B * bp;

bp = &ax; // Fout: verschillende soorten verwijzingen!

bp = (B *) &ax; // definieert effectief een overlay A met B als een unie

Met pointers is er ook een leegte * die een wildcard pointer is. Staat gebruik toe waar elk type aanwijzer is toegestaan, zoals mem-type functies, bijv. memcpy.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *