Co máme na mysli pod kontrolou typu v programovacím jazyce?


Nejlepší odpověď

Kontrola typu se provádí pomocí kontroly typu, která ověří, že typ konstrukce (konstantní, proměnná, pole, seznam, objekt) odpovídá tomu, co se očekává v kontextu použití. Tím je zajištěno, že budou detekovány a hlášeny určité typy programovacích chyb. Zvažte například následující výraz zahrnující operátor modulo 8\% 3,5, tento výraz bude mít za následek chybu, protože operátor modulo očekává dvě celá čísla. Kontrola typů potřebuje vědět – Syntaktické konstrukty v jazyce (např. Operátory) –Základní typy jazyka (int, real) – Pravidla pro přiřazování typů konstrukcím Např. „Pokud jsou oba operandy + int, výsledek je int“

Existují dva typy kontroly typu statické a dynamické

Kontrola statického typu: Kontrola typu prováděná v době kompilace. Při použití těchto jazyků je nutné před jejich použitím deklarovat typ proměnných (kompilátor potřebuje vědět, ke kterému datovému typu proměnná patří). Zvažte například příkaz v c ++ int a = 10; zde kompilátor potřebuje znát datový typ proměnné „a“ před použitím. Např. C, C ++, JAVA, C # jsou některé staticky napsané jazyky

dynamické Kontrola typu: Kontrola typu se provádí za běhu. Při použití těchto jazyků nemusíte specifikovat ani deklarovat typ proměnné, ale kompilátor sám zjistí, o jaký typ proměnné jde, když jí poprvé přiřadíte hodnotu. Nyní zvažte několik příkazů v pythonu: str = „Python“ str2 = 10 Zde nemusíte deklarovat datový typ. Samotný překladač bude vědět, ke kterému typu proměnná patří, když jí poprvé přiřadíte hodnotu (str1 je datového typu „String“ a str2 je typu „int“). Např. VBScript, Python jsou jazyky s dynamickým typem.

Odpověď

Kontrola typu testuje, zda je operace na proměnné používá kompatibilní typ. Různé jazyky mají různé úrovně kompatibility proměnných. Silně psaný kontrolovaný jazyk má přísná pravidla pro typy proměnných ve výrazu. Na druhé straně mince jsou jazyky, které umožňují míchání různých typů. Tyto jazyky budou určitým způsobem kompenzovat smíšené typy pomocí některých pravidel proměnných převodů.

Například v některých jazycích s přísným typem můžete přidat pouze dvě celá čísla nebo dvě čísla s plovoucí desetinnou čárkou, ale při pokusu o nahlášení chyby přidat celé číslo do float. V jiných jazycích, pokud přidáte celé číslo do floatu, může to implicitně převést celé číslo na float a poté provést přidání.

C ++ je někde uprostřed. V C ++ umožňuje některé implicitní převody. C a C ++ má několik mezer. Nejprve se nazývá casting. Casting v zásadě říká kompilátoru o proměnné jako o „tomto typu“, na rozdíl od deklarované hodnoty. Například v příkladu výše, pokud chceme, aby se s floatem zacházelo jako s int, můžeme float seslat na int.

Příklad: int x, a; float y, b;

b = x + y;

a = x + (int) y; nebo možná budete chtít a = (int) (x + y);

Protože ukazatele jsou obvykle psány, můžeme použít casting, aby jedna struktura vypadala jako jiný typ struktury.

typedef struct {/ * members * /} A;

typedef struct {/ * members * /} B;

A ax;

B * bp;

bp = &ax; // Chyba: různé typy ukazatelů!

bp = (B *) &ax; // efektivně definuje překrytí A s B jako sjednocení

U ukazatelů existuje také void *, což je ukazatel zástupných znaků. Umožňuje použití tam, kde je povolen jakýkoli typ ukazatele, například funkce typu mem, např. memcpy.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *