Edellinen | Sisällysluettelo | Seuraava |
Ruby-muuttujien ymmärtäminen | Rubyn numeroluokat ja muunnokset |
Nyt kun olemme käsitelleet muuttujien perusteet Rubyssä, seuraava tehtävä on selittää Rubyn muuttujien laajuus.
Mikä on muuttujan laajuus?
Laajuusalue määrittää, mihin kohtaan ohjelmassa muuttujaa voidaan käyttää. Rubyssä on neljä muuttujan laajuustyyppiä: local, global, instance ja class. Lisäksi Rubyssä on yksi vakiotyyppi. Kukin muuttujatyyppi ilmoitetaan käyttämällä erikoismerkkiä muuttujan nimen alussa seuraavassa taulukossa esitetyllä tavalla.
Nimi alkaa nimellä | Muuttujan laajuus |
---|---|
$ |
Globaalinen muuttuja |
Instanssimuuttuja | |
tai _ |
Lokaali muuttuja |
|
Vakio |
@@ |
Luokkamuuttuja |
Lisäksi, Rubyssä on kaksi pseudomuuttujaa, joille ei voida antaa arvoja. Nämä ovat nil, joka osoitetaan alustamattomille muuttujille, ja self, joka viittaa parhaillaan suoritettavaan objektiin. Tämän luvun loppuosassa tarkastelemme kumpaakin näistä muuttujien laajuuksia vuorollaan.
Ruby-muuttujan laajuuden havaitseminen
Muuttujan laajuuden voi ilmeisesti päätellä muuttujan laajuuden katsomalla sen nimeä. Joskus sinun on kuitenkin selvitettävä laajuus ohjelmallisesti. Hyödyllinen tekniikka muuttujan laajuuden selvittämiseen on käyttää metodia defined? defined? palauttaa viitattavan muuttujan laajuuden tai nil:n, jos muuttujaa ei ole määritelty nykyisessä kontekstissa:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Rubyn paikalliset muuttujat
Lokaalit muuttujat ovat paikallisia siinä koodikonstruktiossa, jossa ne on ilmoitettu. Esimerkiksi metodissa tai silmukassa ilmoitettua paikallista muuttujaa ei voi käyttää kyseisen silmukan tai metodin ulkopuolella. Paikallisten muuttujien nimien on alettava joko alleviivauksella tai pienellä kirjaimella. Esimerkiksi:
loopcounter = 10_LoopCounter = 20
Rubyn globaalit muuttujat
Rubyn globaaleihin muuttujiin pääsee käsiksi mistä tahansa Ruby-ohjelmassa riippumatta siitä, missä ne on ilmoitettu. Globaalien muuttujien nimien edessä on dollarimerkki ($). Esimerkiksi:
$welcome = "Welcome to Ruby Essentials"
Globaalien muuttujien käyttöä ei suositella. Globaalien muuttujien ongelmana on se, että ne näkyvät missä tahansa ohjelmakoodissa ja niitä voidaan myös muuttaa mistä tahansa ohjelmassa. Tämä voi vaikeuttaa virheiden jäljittämistä.
On kuitenkin hyödyllistä tietää, että sinulla Ruby-kehittäjänä on käytettävissäsi joukko ennalta määriteltyjä globaaleja muuttujia, joiden avulla voit saada tietoa Ruby-ympäristöstä. Lyhyt yhteenveto jokaisesta näistä muuttujista on seuraavassa taulukossa.
Muuttujan nimi | Muuttujan arvo |
---|---|
|
Viimeisimmän virheen sijainti |
$_ |
Viimeisimmän virheen sijainti |
$_ |
Viimeisimmän merkkijonon lukujono gets |
$. |
Tulkin viimeksi lukeman rivin numero |
$& |
Merkkijono, johon regexp on viimeksi vastannut |
$~ |
Viimeisin täsmäävä merkkijono, alilausekkeiden joukkona |
$ n |
Viimeisen osuman n:s alilauseke (sama kuin $~ ) |
$= |
Tapauskohtainen-epäherkkyyslippu |
$/ |
Syötteen tietueen erotin |
$\ |
Tulostietue erotin |
|
Parhaillaan suoritettavan ruby-skriptitiedoston nimi |
$* |
The komentoriviargumentit, joilla komentosarjaa kutsuttiin |
$$ |
Ruby-tulkin prosessin tunnus |
$? |
Viimeksi suoritetun lapsiprosessin poistumistilanne |
Voidaan esimerkiksi suorittaa metodi gets ottaaksemme syötteen näppäimistöltä, ja sitten viitata $_-muuttujaan saadaksemme syötetyn arvon:
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
Vaihtoehtoisesti voisimme etsiä Ruby-tulkin prosessitunnuksen:
irb(main):007:0> $$=> 17403
Rubyn luokkamuuttujat
Luokkamuuttuja on muuttuja, joka on jaettu kaikkien luokan instanssien kesken. Tämä tarkoittaa, että vain yksi muuttujan arvo on olemassa kaikille tästä luokasta instantioiduille objekteille. Tämä tarkoittaa, että jos yksi objektin instanssi muuttaa muuttujan arvoa, uusi arvo muuttuu olennaisesti kaikille muille objektin instansseille.
Toinen tapa ajatella luokkamuuttujia on ajatella niitä globaaleina muuttujina yhden luokan kontekstissa.
Luokkamuuttujat ilmoitetaan liittämällä muuttujan nimen eteen kaksi @-merkkiä (@@). Luokkamuuttujat on alustettava luontihetkellä. Esimerkiksi:
@@total = 0
Rubyn instanssimuuttujat
Instanssimuuttujat ovat samanlaisia kuin luokkamuuttujat, paitsi että niiden arvot ovat paikallisia tietyille objektin instansseille. Jos esimerkiksi luokka sisältää instanssimuuttujan nimeltä @total, jos yksi objektin instanssi muuttaa @totalin nykyistä arvoa, muutos on paikallinen vain muutoksen tehneelle objektille. Muilla saman luokan objekteilla on omat paikalliset kopionsa muuttujasta, jotka ovat riippumattomia muissa objekteissa tehdyistä muutoksista.
Instanssimuuttujat ilmoitetaan Rubyssä liittämällä muuttujan nimeen yksi @-merkki:
@total = 10
Ruby Constant Scope
Rubyn konstantit ovat arvoja, jotka, kun niille on kerran annettu arvo, niitä ei saa muuttaa. Sanon pitäisi, koska Ruby eroaa useimmista ohjelmointikielistä siinä, että se sallii vakion arvon muuttamisen sen jälkeen, kun se on julistettu, vaikka tulkki protestoi hieman varoitusviestillä.
Luokan tai moduulin sisällä julistetut vakiot ovat käytettävissä missä tahansa kyseisen luokan tai moduulin kontekstissa. Luokan tai moduulin ulkopuolella julistetut vakiot saavat globaalin laajuuden.
Edellinen | Sisällysluettelo | Seuraava |
Rubyn muuttujien ymmärtäminen | Rubyn numeroluokat ja muunnokset |