Variabilă locală

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 20 februarie 2016; verificările necesită 13 modificări .

În programare, o variabilă locală este o variabilă declarată într- un bloc de cod. Sfera unei variabile locale începe în punctul declarației sale și se termină la sfârșitul acestui bloc [1] [2] . De exemplu, în C , variabilele declarate în interiorul unei funcții sau bloc sunt locale (în C, blocurile sunt delimitate prin acolade { și }) [3] .

Există limbaje de programare în care o variabilă locală poate fi declarată doar într-o funcție, deoarece în aceste limbi o variabilă locală declarată într-un bloc este declarată în funcție de locația imediată a acestui bloc.

Organizarea în memorie

Variabilele locale sunt stocate pe stiva de apeluri în majoritatea limbilor [4] . Aceasta înseamnă că, dacă o funcție se autoinvocă recursiv, atunci variabilele sunt recreate de fiecare dată și li se alocă memorie personală, în loc să fie scrise în același loc.

Restricții

O variabilă locală este limitată doar de cantitatea de memorie alocată de sistemul de operare sau computer pentru stivă.

Limbile similare Algol vă permit să aranjați imbricarea de blocuri arbitrar de mare și fiecare va avea propriile variabile locale.

Domeniul de aplicare

Variabilele locale fac posibilă recursiunea [5] .

Variabilele locale sunt utilizate pentru a evita problemele cu efecte secundare care pot apărea cu variabilele globale.

Limbajele de programare care folosesc apelul după valoare oferă fiecărei subrutine un domeniu local de variabile locale cu o copie locală a argumentelor transmise acesteia.

O variabilă locală este orice parametru de funcție (de exemplu, în limbajul C) care nu utilizează referințe sau pointeri.

Variabile locale statice

Variabilele statice sunt un tip special de variabile locale disponibile în multe limbi populare (inclusiv c/c++, Visual Basic, VB.NET), a căror esență este că această variabilă își păstrează valoarea în fiecare apel de funcție. Și în fiecare apel, va fi exact la fel ca la închiderea corpului acestei funcții înainte de [6] .

localîn Perl

Perl are un cuvânt cheie, local, pentru „localizarea” variabilelor, dar în acest caz, localnu înseamnă ceea ce majoritatea oamenilor s-ar aștepta să însemne. [2] Creează o variabilă temporară cu o durată de viață limitată, dar situată în spațiul de nume global. Acest lucru vă permite să vedeți această variabilă în orice funcție numită din acest bloc. Pentru a crea variabile lexicale, care sunt mai mult ca variabile automate, utilizați my. Pentru a înțelege cum funcționează, luați în considerare următorul cod:

$a = 1 ; sub f () { local $a ; $a = 2 ; g (); } sub g () { print "$a\n" ; } g (); f (); g ();

Rezultat:

unu 2 unu

acest lucru se întâmplă cu un nume de variabilă globală $acare începe să indice o nouă variabilă temporară creată în funcție f(), dar valoarea globală este restabilită la ieșirea din f(). Utilizarea myîn acest caz localar fi tipărită 1 de trei ori, deoarece în acest caz variabila $aar fi într-adevăr locală funcției f()și nu ar fi văzută g(). Din acest motiv, mulți cred că operatorul localar trebui să aibă un alt nume, cum ar fi save. [5]

Variabile locale în Ruby

Ruby ca limbaj a fost inspirat și de Perl, dar în acest caz, notația a fost simplificată: numele unei variabile globale trebuie să fie precedat de un semn $, de exemplu, $variable_name, în timp ce o variabilă locală pur și simplu nu are un Semnul $ în fața numelui său, de exemplu, nume_variabilă (în timp ce în Perl toate valorile scalare au un $ în față).

Un exemplu de utilizare a variabilelor locale în C

#include <stdio.h> int a = 0 ; // variabilă globală int main () { printf ( "%d" , a ); // va fi afișat numărul 0 { int a = 1 ; // este declarată variabila locală a, variabila globală a nu este vizibilă printf ( "%d" , a ); // va fi afișat numărul 1 { int a = 2 ; // încă o variabilă locală în bloc, variabila globală a nu este vizibilă, iar variabila locală anterioară nu este vizibilă printf ( "%d" , a ); // va fi afișat numărul 2 } } }

Va emite:

012

Note

  1. Variabile locale . Data accesului: 26 februarie 2013. Arhivat din original pe 4 august 2013.
  2. Exemplul 22-8. Domeniul de aplicare al variabilelor locale . Consultat la 26 februarie 2013. Arhivat din original pe 16 februarie 2013.
  3. Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. 1.6.3 Domeniul de aplicare static și structura blocului // Compilatorii : principii, tehnici și instrumente. - Ed. a II-a. - Williams, 2008. - S.  62 . — 1184 p. - ISBN 978-5-8459-1349-4 .
  4. Variabile locale . - „În mod implicit, variabilele locale sunt stocate în stivă.” Data accesului: 26 februarie 2013. Arhivat din original pe 4 august 2013.
  5. 22.2.1. Variabilele locale fac posibilă recursiunea. . Consultat la 26 februarie 2013. Arhivat din original pe 16 februarie 2013.
  6. Variabile statice (link descendent) . Data accesului: 26 februarie 2013. Arhivat din original la 30 ianuarie 2013.