Tastare dinamică

Toate limbajele de programare permit, direct sau indirect, manipularea valorilor . În general, este prin variabile , care sunt o asociere (spunem și o legătură) între un simbol și o valoare sau succesiunea de valori, simbolul permițând programatorului să identifice și să manipuleze aceste valori.

Tastarea unei variabile constă în asocierea cu variabila sa simbolică a unui „tip” de date, permițând computerului să știe dacă acesta este de tip numeric, textual etc., să aloce zone de memorie în consecință. De dimensiuni suficiente pentru a stoca aceste date și, eventual, pentru a verifica dacă operațiile programate pe această variabilă (operații matematice, procesare de text etc.) sunt în concordanță cu tipul acesteia.

Tastarea dinamică este de a lasa computerul face operațiunea tastarea „on the fly“ în timpul executării codului, spre deosebire de limbi în cazul în care tipul static tastate de analiză se efectuează în amonte ( de obicei , în timpul compilării din program). Indiferent de momentul în care se efectuează această analiză, metoda de tastare poate forța adnotări explicite de tip pe expresiile din program sau poate avea un mecanism de inferență a tipului. Rețineți că majoritatea limbilor tastate dinamic au acest mecanism.

Tastarea dinamică poate fi o soluție foarte convenabilă pentru dezvoltarea rapidă a programelor, în special atunci când tipul obiectelor manipulate nu este neapărat cunoscut în prealabil sau când programatorul dorește să permită pentru comoditate schimbarea tipului unei variabile. De asemenea, este necesar pentru dezvoltarea unui protocol meta-obiect - sau MOP - unde este interzisă tastarea statică .

Exemple

Tastarea statică

De exemplu, în C sau C ++ , următorul fragment de program:

int a; a = 5; int b = a + 1;

definește o variabilă notată „a”, de tip întreg („ int”), apoi îi atribuie valoarea 5. Apoi, o variabilă b, de același tip, este definită și inițializată în același timp de rezultatul expresiei a + 1. C ++ este un limbaj tipizat static . În C ++ modern (după C ++ 11 ), cuvântul cheie autopermite să nu declare tipul anumitor variabile. Tipul variabilei trebuie apoi dedus de compilator prin analize contextuale.

int a = 1; auto b = a + 1;

Tastare dinamică

În Common Lisp , vom scrie:

(let ((a 5)) ...)

Aici, crearea unei variabile lexicale se face fără a se specifica tipul acesteia. Tipul datelor nu este asociat cu simbolul care denotă variabila, ci este codificat în datele în sine. Astfel, în scopul „lăsați”, putem interoga tipul variabilei a (este o aplicație de reflexivitate ):

(let ((a 5)) (when (numberp a) (print "a est un nombre")) ...)

În plus, în timpul execuției, „a” ar putea primi un obiect de un alt tip, dacă programul îi permite:

(let ((a 5) (setf a "je suis une chaîne") ...)

Implicațiile tastării dinamice

Marea flexibilitate pe care o permite tastarea dinamică este în general plătită de:

  • un consum excesiv de memorie corespunzător codificării „din mers” a tipului din valoare;
  • o pierdere de timp în timpul testelor programului, erorile de consistență a tipului fiind detectate numai la executarea liniei de cod în cauză și nu imediat ce este compilată;
  • o pierdere a performanței din cauza indirecțiilor suplimentare; totuși, acest cost suplimentar de rulare este compensat de creșterea puterii computerelor actuale și permite dezvoltarea rapidă a aplicațiilor  ;
  • o pierdere a mentenabilității codului, cititorul codului sursă fiind capabil să aibă dificultăți în a înțelege tipul variabilelor și chiar mai mult să realizeze că codul poate fi conceput în funcție de variabilitatea acestui tip.

Pentru operațiunile algoritmice scumpe, limbaje de scripting cum ar fi Python , Tcl, sau Ruby poate interfata cu bibliotecile scrise în nivel scăzut de limbaj , cum ar fi limbajul C . În plus, unele limbi (în special Common Lisp ) permit o declarație statică opțională de tip, pentru a dovedi coerența tastării la momentul compilării și pentru a elimina indirecțiile.

Atunci când o funcție primește date de tip incorect la runtime (eroare de tip runtime), se lansează o excepție .

Exemple

Vezi și tu