Precedent | Tabelă de materii | Următor |
Înțelegerea variabilelor Ruby | Ruby Number Classes and Conversions |
Acum că am acoperit elementele de bază ale variabilelor în Ruby, următoarea sarcină este să explicăm domeniul de aplicare al variabilelor Ruby.
Ce este sfera de cuprindere a variabilelor?
Scopul de cuprindere definește locul dintr-un program în care o variabilă este accesibilă. Ruby are patru tipuri de domeniu de variabilă, local, global, instanță și clasă. În plus, Ruby are un tip de constantă. Fiecare tip de variabilă este declarat prin utilizarea unui caracter special la începutul numelui variabilei, așa cum este prezentat în tabelul următor.
Numele începe cu | Scopul variabilei |
---|---|
$ |
O variabilă globală |
@ |
O variabilă de instanță |
sau _ |
O variabilă locală |
|
O constantă |
@@ |
O variabilă de clasă |
În plus, Ruby are două pseudo-variabile cărora nu li se pot atribui valori. Acestea sunt nil, care este atribuită variabilelor neinițializate și self, care se referă la obiectul în curs de execuție. În restul acestui capitol vom analiza pe rând fiecare dintre aceste domenii de variabilă.
Detectarea domeniului de aplicare al unei variabile Ruby
Evident, puteți spune domeniul de aplicare al unei variabile uitându-vă la nume. Uneori, însă, trebuie să aflați domeniul de aplicare în mod programatic. O tehnică utilă pentru a afla domeniul de cuprindere al unei variabile este utilizarea metodei defined? defined? va returna domeniul de cuprindere al variabilei la care se face referire, sau nil dacă variabila nu este definită în contextul curent:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Variabile locale Ruby
Variabilele locale sunt locale pentru construcția de cod în care sunt declarate. De exemplu, o variabilă locală declarată într-o metodă sau în cadrul unei bucle nu poate fi accesată în afara acelei bucle sau metode. Numele variabilelor locale trebuie să înceapă fie cu un semn de subliniere, fie cu o literă minusculă. De exemplu:
loopcounter = 10_LoopCounter = 20
Variabile globale în Ruby
Variabilele globale în Ruby sunt accesibile din orice punct al programului Ruby, indiferent de locul în care sunt declarate. Numele variabilelor globale sunt prefixate cu un semn de dolar ($). De exemplu:
$welcome = "Welcome to Ruby Essentials"
Utilizarea variabilelor globale este puternic descurajată. Problema cu variabilele globale este că, nu numai că sunt vizibile oriunde în codul unui program, dar ele pot fi, de asemenea, modificate din orice punct al aplicației. Acest lucru poate îngreuna urmărirea erorilor.
Este util să știți, totuși, că un număr de variabile globale predefinite vă sunt disponibile, în calitate de dezvoltator Ruby, pentru a obține informații despre mediul Ruby. Un scurt rezumat al fiecăreia dintre aceste variabile este cuprins în tabelul următor.
Numele variabilei | Valoarea variabilei | |
---|---|---|
|
Locația ultimei erori | |
$_ |
Șirul citit ultima dată de gets |
|
$. |
Numărul liniei citite ultima dată de interpret | |
$& |
Șirul la care a corespuns ultima dată regexp | |
$~ |
Ultima potrivire regexp, ca o matrice de subexpresii | |
$ n |
A n-a subexpresie din ultima potrivire (la fel ca $~ ) |
|
$= |
Cazul în care-insensibilitate la majuscule și minuscule | |
$/ |
Separatorul înregistrării de intrare | |
$\ |
Înregistrarea de ieșire separator | |
|
Numele fișierului de script ruby care se execută în prezent | |
$* |
The argumentele liniei de comandă utilizate pentru a invoca scriptul | |
$$ |
ID-ul de proces al interpretului Ruby | |
$? |
Starea de ieșire a ultimului proces copil executat |
De exemplu, putem executa metoda gets pentru a prelua date de la tastatură, și apoi să facem referire la variabila $_ pentru a prelua valoarea introdusă:
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
Alternativ, am putea găsi ID-ul de proces al interpretului Ruby:
irb(main):007:0> $$=> 17403
Variabile de clasă Ruby
O variabilă de clasă este o variabilă care este partajată între toate instanțele unei clase. Aceasta înseamnă că există o singură valoare a variabilei pentru toate obiectele instanțiate din această clasă. Acest lucru înseamnă că dacă o instanță a unui obiect schimbă valoarea variabilei, acea nouă valoare se va schimba, în esență, pentru toate celelalte instanțe ale obiectului.
O altă modalitate de a gândi variabilele de clasă este ca variabile globale în contextul unei singure clase.
Variabilele de clasă sunt declarate prin prefixarea numelui variabilei cu două caractere @ (@@). Variabilele de clasă trebuie să fie inițializate în momentul creării. De exemplu:
@@total = 0
Variabile de instanță Ruby
Variabilele de instanță sunt similare variabilelor de clasă, cu excepția faptului că valorile lor sunt locale pentru anumite instanțe ale unui obiect. De exemplu, dacă o clasă conține o variabilă de instanță numită @total, dacă o instanță a obiectului modifică valoarea curentă a lui @total, modificarea este locală doar pentru obiectul care a făcut modificarea. Alte obiecte din aceeași clasă au propriile lor copii locale ale variabilei care sunt independente de modificările făcute în orice alt obiect.
Variabilele de instanță sunt declarate în Ruby prin prefixarea numelui variabilei cu un singur semn @:
@total = 10
Ruby Constant Scope
Constantele Ruby sunt valori care, odată ce li se atribuie o valoare, nu trebuie modificate. Spun ar trebui pentru că Ruby diferă de majoritatea limbajelor de programare prin faptul că permite ca valoarea unei constante să fie modificată după ce a fost declarată, deși interpretul va protesta ușor cu un mesaj de avertizare.
Constantele declarate în cadrul unei clase sau al unui modul sunt disponibile oriunde în contextul acelei clase sau acelui modul. Constantele declarate în afara unei clase sau a unui modul au domeniu de aplicare global.
Precedent | Carte de materii | Succesor | Carte de materii | Succesor |
Înțelegerea variabilelor Ruby | Clasi și conversii de numere Ruby |