Ghidul începătorului pentru tipul de constrângere tipuri de date

Pentru oricine care a programat o perioadă lungă de timp, ați folosit mai mult decât probabil un număr de limbi de programare diferite. Având în vedere peisajul de software de astăzi, este, de asemenea, probabil că ați lucrat atât cu limbi puternic tastate, cât și cu limbi slabe.

Asta înseamnă că ați lucrat în limbi de programare care necesită să specificați tipul de date al variabilelor dvs., ce funcții se vor întoarce și așa mai departe și că ați lucrat în limbi de programare care nu aveți nevoie să setați explicit acele informații.

Dacă știți exact despre ce vorbesc, atunci aceste articole de serie probabil nu sunt pentru dvs.; totuși, dacă intri în programare sau doar începi să folosești o nouă limbă care este tastată dinamic (sau tastată slab), atunci există o serie de lucruri care merită remarcate deoarece se referă la lucrul cu tipurile de date.

În această serie vom examina limbile dinamice, modul în care sunt definite variabilele, modul în care sunt deduse tipurile de date ale acestora și sunt diferite de cele ale acestora și modul de evitare a unor capcane majore care vin cu lucrul cu aceste limbi.

Înțelegerea tipurilor de date

Înainte de a ne uita de fapt la capcanele tipului de coerciție și suntem foarte probabil să vă cunoașteți capcanele, este important să înțelegeți ce tipuri de date sunt și cum diferă de la limbile puternic tipărite și limbajele dinamice tipizate.

Limbi bine tipizate

În general, este foarte probabil să găsiți limbi puternice în familia de limbi de programare care sunt compilate. Aceasta include limbi precum C și C++.

Totuși, acolo sunteți excepții.

Există câteva limbi care sunt compilate într-o formă de bytecode sau un tip de limbă intermediară și apoi sunt procesate de un interpret. Java este un astfel de limbaj. Aceste limbi sunt puternic tastate. Ele sunt de asemenea compilate. Dar ele nu sunt neapărat compilate în executabile binare, ci prin octet care este interpretat de un software terț.

Știu că sună puțin confuz, deci poate că un cod va contribui la clarificarea acestui lucru. În limbile puternic tipizate, declarați întotdeauna tipul de date pe care o variabilă o va reprezenta. 

De exemplu:

șir exemplu = "Vulpea brună sărată peste câinele leneș"; int = 42; dublă numerar = 99,99; boolean există = adevărat;

Deși codul ar trebui să fie suficient de simplu pentru a fi explicabil, observați că acesta afișează variabile care dețin șiruri, tipuri numerice și valori booleene.

În limbile puternic tipizate, trebuie să indicați și tipul de informație pe care o funcție o va reveni. Luați următoarele exemple:

șirul public getGreeting () return "Hello world!";  boolean public esteAlive () return true;  void public doSomething () pentru (int i = 0; i < 10; i++ )  // Perform something  

Rețineți că în exemplul de mai sus, funcția finală are un tip de returnare de vid. Aceasta înseamnă că funcția nu se întoarce orice. Când începem să ne uităm la limbi dinamice, vom vedea cum diferă acestea.

Evident, acestea sunt extrem de simple, dar este bine ca ele să facă un punct: Limbile puternic tipizate au variabile și funcții care au setat explicit tipul lor de date.

Limbi în format dinamic

Când vine vorba de limbi dinamice tipizate, există un număr de lux care vin cu posibilitatea de a defini variabile și de a crea funcții.

În exemplele anterioare, variabila exemplu poate deține doar a şir. Asta înseamnă că nu poate să dețină un număr de virgulă mobilă sau o valoare booleană - aceasta trebuie sa țineți un șir. În limbi dinamice tipărite, nu este cazul.

În schimb, variabilele se pot referi la un șir într-un punct în timpul duratei de viață a programului, un întreg în alt punct și o valoare booleană la un alt punct. Desigur, acest lucru poate deveni confuz dacă nu se adoptă un anumit tip de standarde de codificare, dar acest lucru depășește domeniul de aplicare al acestui punct.

Ideea este că variabilele definite în limbajele dinamice tipizate se pot referi la diferite tipuri de date prin execuția unui program.

De exemplu:

var exemplu; example = "Vulpea brună sărată peste câinele leneș"; exemplu = 42; exemplu = 99,99; exemplu = adevărat;

Rețineți că aceste variabile nu au un tip de date - ele sunt pur și simplu declarate ca tip var și apoi sunt setate după cum este necesar. Unele limbi definesc variabilele în mod diferit față de ceea ce vedeți mai sus, dar punctul nu este acela de a arăta cum o face o altă limbă. Trebuie să arătăm cum variabilele nu se referă la un anumit tip de date.

Funcțiile funcționează într-un mod similar. Aceasta este, mai degrabă decât definirea tipului de returnare a datelor, pur și simplu definiți funcția și returnați o valoare.

funcția getGreeting () return "Hello world!";  funcția este Alive () return true;  funcția doSomething () pentru (var i = 0; i < 10; i++ )  // Perform something  

Din nou, limbile diferite vor necesita definirea unor funcții în moduri diferite (de exemplu, unele limbi nu utilizează funcția funcţie cuvânt cheie, dar utilizați în schimb def cuvânt cheie), dar esența este că nu trebuie să specificați în mod explicit tipul de date care vor fi returnate din funcție.

Acesta poate fi un instrument foarte puternic; cu toate acestea, poate face dificilă citirea codului, dificil de înțeles ce se va întoarce funcția și / sau dificultăți de a ști cum să configurați codul extern pentru a apela funcțiile (cum ar fi în cazul comparațiilor, condiționărilor și așa mai departe pe).

Din acest motiv, standardele de codificare și convențiile clare de numire sunt importante. Din nou, totuși, acesta este un subiect care nu se încadrează în această serie.

Urmeaza…

Acum, că am analizat cât de puternic limbile de tipar și limbajele tastate dinamic gestionează variabilele, funcțiile și tipurile de date în general, ne putem îndrepta atenția asupra modului în care coerciția de tip funcționează în contextul mai larg al aplicațiilor scrise dinamic limbaje tipărite.

În mod specific, ne uităm la modul în care putem folosi performanța în avantajul nostru și ne putem uita la modul în care s-ar putea să ajungem să introducem erori, nefiind explicit explicit în codul nostru. Deci, începând din următorul articol, vom face exact acest lucru.

Între timp, adăugați toate comentariile, întrebările și feedbackul general la feedul de mai jos!

Cod