Operator de misiune

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

În informatică, operatorul de atribuire stabilește sau resetează valoarea stocată în locația de memorie asociată cu o variabilă . În majoritatea limbajelor de programare imperative, declarația de atribuire este una dintre instrucțiunile de bază.

Operatorul de atribuire vă permite în mod normal să atribuiți valori diferite aceleiași variabile în momente diferite în timpul execuției programului.

Notări

Cele mai frecvente reprezentări textuale pentru atribuire sunt semnul egal („=”) și „: =”. Aceste două forme sunt tipice în limbaje de programare, cum ar fi C , în care operatorul de atribuire este un operator infix (ocupă o poziție intermediară între cei doi operanzi).

variabile = espressione BASIC , Fortran , C , Java , Windows PowerShell , shell Bourne , ...
variabile := espressione ALGOL , Pascal , Ada , Dylan , PL / SQL , ...

Alte posibilități sunt o săgeată, un cuvânt cheie (cuvânt cheie), o combinație de cuvinte cheie și operator.

variabile <- espressione Obiectiv Caml , S , R , ...
espressione -> variabile R.
variabileespressione APL
LET variabile = espressione DE BAZĂ
MOVE espressione TO variable COBOL
set variabile to espressione AppleScript
set variabile = espressione C coajă
Set-Variable variabile (espressione) Windows PowerShell
variabilă <= expresie VHDL

Unele limbaje orientate spre expresie, cum ar fi Lisp și Tcl, utilizează în mod uniform o sintaxă de prefix pentru toate instrucțiunile , inclusiv atribuirea.

(setq variabile espressione ) Lisp , Scheme ( set! ), ...
set variabile espressione Tcl

În multe dintre exemplele de mai sus, atribuirea „continuă” de la dreapta la stânga, adică variabila se află în partea stângă a expresiei de atribuire, în timp ce în dreapta este valoarea (sau expresia) de atribuit. Operatorul = este întotdeauna utilizat în acest fel. Cu toate acestea, în unele cazuri, se respectă convenția opusă (operatorul „săgeata spre dreapta” -> din R, construiți MOVE...TO din COBOL).

În orice caz, indiferent de convenție, direcția atribuirii este fixă ​​și este o greșeală să schimbați pozițiile variabile și espressione .

Operațiuni

Semantic , un operator de atribuire modifică starea curentă a unui program în execuție. În consecință, o atribuire depinde de conceptul de variabilă. Într-o misiune:

  • espressione este evaluată în starea curentă a programului.
  • variabile i se atribuie valoarea calculată, înlocuind valoarea anterioară a variabilei.

Exemplu: Presupunând că a este o variabilă numerică, atribuirea a := 2*a înseamnă că conținutul variabilei a este dublat după executarea instrucțiunii.

Un exemplu în codul C :

 int x = 10 ; 
pluteste y ;
x = 23 ;
y = 32,4 ;

În acest exemplu, variabila x este declarată mai întâi ca int și i se atribuie valoarea 10. Observați că declarația și atribuirea apar în aceeași instrucțiune. În a doua linie y este declarat fără atribuire. În al treilea rând, valoarea 23 este reatribuită variabilei x În cele din urmă, lui y se atribuie valoarea 32.4.

Într - o operație de atribuire este necesar ca valoarea espressione este bine definită (trebuie să fie valid rvalue ) și că variabile reprezintă o entitate modificabil (adică, este un non-const valid lvalue ). În unele limbi, cum ar fi Perl , nu este necesar să declarați o variabilă înainte de a-i atribui o valoare.

Atribuire paralelă

Unele limbaje de programare, cum ar fi Python , Perl , Ruby , Windows PowerShell și JavaScript (începând cu 1.7), permit atribuirea mai multor variabile în paralel. În pseudocod :

 a, b: = 0,1

care atribuie simultan 0 la a și 1 la b . Dacă partea dreaptă a unei sarcini este un tip de matrice variabilă, această caracteristică se numește despachetarea secvenței :

 lista var : = 0,1
a, b: = listă

Lista este despachetată astfel încât 0 să fie atribuit lui a și de la 1 la b . Mai interesant,

 a, b: = b, a

Schimbați valorile lui a și b . Într-o limbă fără atribuire paralelă, aceasta ar fi trebuit să fie implementată cu utilizarea unei variabile temporare:

 var t: = a
a: = b
b: = t

din moment ce a:=b ; b:=a lasă atât a cât și b cu valoarea inițială a lui b .

Valoarea unei misiuni

În majoritatea limbajelor de programare orientate spre expresie, o instrucțiune de atribuire este, de asemenea, o expresie, a cărei valoare este valoarea atribuită. Acest lucru permite constructe tipice, cum ar fi C x = y = a care atribuie valoarea unei a atât x și y , și în while (f = read()) { } , care atribuie valoarea returnată de o funcție la o variabilă și, în același timp, o folosește pentru a controla o buclă.

În alte limbaje de programare, o declarație de atribuire nu este o expresie și, prin urmare, nu are nicio valoare: în aceste cazuri, astfel de construcții nu sunt posibile. Un astfel de caz este Scheme . De asemenea, în Python , atribuirea nu este o expresie și, prin urmare, nu are „valoare”.

În ML și Haskell , nu există niciun operator de atribuire

Cesiune și atribuire unice

În programarea funcțională , atribuirea nu este recomandată în favoarea unei singure atribuții , numită și legare de nume sau inițializare . Atribuirea unică diferă de atribuirea descrisă prin faptul că se poate face o singură dată, de obicei când variabila este creată; nu sunt permise alte misiuni. Odată creat prin atribuire, numele variabilei nu este o variabilă, ci un obiect imuabil .

Atribuirea unică este singura formă de atribuire disponibilă în limbaje funcționale pure, cum ar fi Haskell, care nu are conceptul de variabile în sensul limbajelor imperative. Limbajele funcționale impure permit atât atribuirea unică, cât și atribuirea normală (deși este utilizată mai puțin decât în ​​programarea imperativă). De exemplu, în Scheme, puteți utiliza atât o singură atribuire, cât și o atribuire adevărată pentru toate variabilele. În OCaml, este permisă doar o singură atribuire cu sintaxa let nome = valore ; cu toate acestea, atribuirea adevărată poate fi utilizată pe elementele matrice și șiruri cu operatorul <- . .

Cesiune și egalitate

Programatorii fără experiență confundă uneori operatorul de atribuire cu operatorul de egalitate relațională, deoarece "=" înseamnă egalitate în matematică și este folosit ca operator de atribuire în multe limbi. Cu toate acestea, atribuirea schimbă valoarea unei variabile, în timp ce egalitatea este un test care verifică dacă două expresii au aceeași valoare.

În multe limbi, operatorul de atribuire este un singur simbol egal ("="), în timp ce operatorul de egalitate este o pereche de egali ("=="); în unele limbi, cum ar fi BASIC , se folosește un singur simbol pentru ambele și sunt discriminate pe baza contextului.

Acest lucru poate duce la erori dacă nu se folosește forma corectă ( = , == , : = ). Aceasta este o problemă obișnuită cu limbi cum ar fi C , unde operatorul de atribuire returnează valoarea atribuită și poate fi cuibărit valid în interiorul unei expresii (cum ar fi o funcție care returnează o valoare). De exemplu, dacă intenția a fost de a compara două valori în educație în if în care operatorul de atribuire returnează o valoare care este foarte probabil să fie evaluată ca fiind TRUE și va fi then clauză evaluată then , preluând programul în mod neașteptat. Unii compilatori pot găsi aceste situații și pot alerta programatorul despre o posibilă eroare.

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