Fara í innihald

Staðvær breyta

Úr Wikipediu, frjálsa alfræðiritinu

Staðvær breyta, einnig stundum nefnt kyrrleg breyta, í forritun er breyta sem einungis er hægt að nálgast innan þess gildissviðs sem hún var skilgreind í.

Í tölvunarfræði hefur staðvær breyta, eða static variable, nokkrar merkingar og fer það eftir notkun og samhengi. Í öllum tilfellum vísar þó að orðið static til þess að breyta verði óbreytt og stundum tiltæk fyrir utan skilgreiningu hennar. Static breytur eru jafnvel kallaðar constant breytur til að þeim verði ekki ruglað við kvikar (volatile ) breytur. Það er m.a. hægt að nota static breytur sem fasta, sem breytur í local föllum og sem klasabreytur.

static breytur sem fastar. Forritarar nota oft fasta sem eru skilgreindir sem tákn í staðinn fyrir tölur. Til dæmis gæti verið auðveldara að skrifa, lesa og viðhalda forriti, sem heldur utan um reikninga með nálgun á pí, með því að nota breytu sem heitir „PI“ í stað þess að skrifa „3.14159“ í gegnum allt forritið.

static breytur sem breytur í local föllum. Sum mál leyfa föllum að varðveita gildi breyta milli kalla þannig að fallið varðveiti stöðu (state) sína ef það þarf þess. Til dæmis gæti staðvær breyta í falli skráð fjölda tilfella sem kallað er í það með því að nota innri teljara. Annars væri bara hægt að gera þetta með víðværum (global) breytum.

Static sem klasabreytur. Hlutbundin forritunarmál innihalda hugtökin „klasi“, sem heldur utan um breytur og föll, og „hluti“ (object) þar sem klasar eru upphafsstilltir. Staðvær breyta í því samhengi er sú sem á einungis við klasann sjálfann en ekki tilvik af hlut.

Eftirfarandi dæmi, í C++, sýnir hvernig breyta sem er skilgreind staðvær (static) í falli viðheldur stöðu sinni milli kalla í það fall.


  #include <iostream>
  using namespace std;
  void showstat( int curr ) {
      static int nStatic;    // Gildi nStatic er viðhaldið milli hvers kalls í fallið
      nStatic += curr;
      cout << "nStatic is " << nStatic << endl;
  }
  int main() {
      for ( int i = 0; i < 5; i++ )
         showstat( i );
  }

Úttak úr dæminu að ofan:

   nStatic is 0 
   nStatic is 1 
   nStatic is 3 
   nStatic is 6 
   nStatic is 10