Conversie tip

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , în special în programare , conversia de tip (denumită în mod necorespunzător casting sau tipecastare , de la numele unuia dintre modurile în care apare) este operația cu care o variabilă este convertită dintr-un tip de date în altul: Acest pas se face pentru a profita de unele caracteristici ale ierarhiilor de tip. De exemplu, valorile unui interval limitat (cum ar fi numerele întregi) pot fi stocate într-o cantitate mică de memorie și apoi convertite într-un format diferit care poate permite operațiuni noi, cum ar fi împărțirea la câteva zecimale de precizie.

În limbajele de programare orientate pe obiecte , conversia de tip permite programelor să trateze obiectele ca și cum ar fi de tip strămoș, de exemplu pentru a simplifica interacțiunea cu aceste obiecte.

Tipuri de conversie

Există două tipuri de conversie de tip: implicită și explicită . Termenul folosit pentru a se referi la conversia implicită este constrângerea (aceasta: constrângere ), în timp ce cea mai comună metodă de conversie explicită se numește casting (substantiv care, uneori, este folosit în mod necorespunzător pentru a indica sensul general al conversiei). Conversia explicită se poate face și cu funcții de conversie definite separat, cum ar fi constructorii supraîncărcați .

Conversie tip implicită

Conversia de tip implicită, cunoscută și sub numele de coerciție în limba engleză, se face automat de către compilator . Unele limbaje de programare necesită chiar ca această funcționalitate să fie implementată în compilator.

Într-o expresie de tip mixt, în timpul rulării , datele unuia sau mai multor subtipuri pot fi convertite în mai multe tipuri generice, astfel încât expresia să fie evaluată corect. De exemplu, următorul cod C este valid:

 dublu d;
lung l;
int i;

dacă (d> i) d = i;
dacă (i> l) l = i;
dacă (d == l) d * = 2;

Deși d , l și i aparțin unor tipuri de date diferite, ele sunt convertite automat la același tip de fiecare dată când se efectuează o comparație sau o atribuire. Acest comportament lingvistic trebuie utilizat cu prudență, deoarece ar putea duce la consecințe neașteptate. De exemplu, dacă ați încerca să atribuiți valoarea unei variabile de tip double unuia de tip int , ar exista o pierdere de informații: partea zecimală, de fapt, s-ar pierde (fiecare compilator, dacă este setat la avertismentul corect nivel, ar notifica situația dezvoltatorului). În mod similar, conversia dintr-un număr întreg într-un tip zecimal vă poate face să pierdeți precizia, datorită granularității acestui tip de date din urmă (pentru mai multe informații, consultați intrarea în virgulă mobilă ). În cel mai frecvent caz, acest lucru cauzează probleme atunci când trebuie comparate o variabilă întreagă și o variabilă în virgulă mobilă (pentru egalitate).

Conversie de tip explicit

Un exemplu de distribuire într-un fragment de cod C :

 runde int (valoare float) {
   return (int) (valoare + 0,5);
}

Codul definește, doar cu titlu de exemplu, o funcție simplă care implementează operația de rotunjire a unui număr zecimal pozitiv. Deoarece valoarea expresiei value + 0.5 este de tip float , este necesar să tăiați partea zecimală: pentru a face acest lucru, se utilizează o conversie explicită la tipul int . Conversia poate avea loc și invers, ca în codul următor:

 int a = 5;
int b = 3;
plutitor c, d;

c = a / b; / * c conține acum valoarea 1.0 * /
d = (plutitor) a / b; / * d ia valoarea așteptată: 1.6666666 * /

Deși c este de tip float , nu își asumă valoarea așteptată, deoarece împărțirea dintre a și b (ambele de tip int ) este interpretată ca o divizare întreagă , în care orice parte zecimală a coeficientului este aruncată. Pentru a obține rezultatul așteptat de 1.6666 ..., este necesar să se convertească în mod explicit în float cel puțin unul dintre divizori și dividende (în acest caz dividendul), astfel încât și celălalt operand să fie promovat automat (termen care indică conversia de la un subtip la un tip mai generic) și expresia este evaluată după cum se dorește.

Există mai multe tipuri de conversii explicite:

controlat
înainte de efectuarea conversiei, în timpul rulării , se efectuează o verificare a validității acesteia. Dacă conversia este ilegală, apare o eroare.
necontrolat
nu se face nicio verificare: dacă tipul țintă nu poate conține valoarea convertită, rezultatul este nedefinit.
model de biți
Datele nu sunt interpretate deloc, dar reprezentarea sa binară este pur și simplu copiată.

Fiecare limbaj de programare are propriile reguli pentru conversiile de tip: în general, este permis pentru obiecte și tipuri de bază.

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT