Předchozí | Obsah | Další |
Poznání proměnných Ruby | Číselné třídy a převody v Ruby |
Teď, když jsme probrali základy proměnných v jazyce Ruby, je dalším úkolem vysvětlit obor proměnných jazyka Ruby.
Co je rozsah proměnné?“
Obsah definuje, kde v programu je proměnná přístupná. Ruby má čtyři typy oborů proměnných: lokální, globální, instanční a třídní. Kromě toho má Ruby jeden typ konstanty. Každý typ proměnné se deklaruje pomocí speciálního znaku na začátku názvu proměnné, jak je uvedeno v následující tabulce.
Název začíná | Obsah proměnné |
---|---|
$ |
Globální proměnná |
@ |
Proměnná instance |
nebo _ |
Lokální proměnná |
|
Konstanta |
@@ |
Třídní proměnná |
Kromě toho, Ruby má dvě pseudoproměnné, kterým nelze přiřadit hodnoty. Jsou to nil, která se přiřazuje neinicializovaným proměnným, a self, která odkazuje na právě prováděný objekt. Ve zbývající části této kapitoly se postupně podíváme na každý z těchto rozsahů proměnných.
Zjištění rozsahu proměnné Ruby
Obsah proměnné lze samozřejmě zjistit pohledem na její název. Někdy však potřebujete rozsah zjistit programově. Užitečnou technikou, jak zjistit rozsah proměnné, je použití metody defined?. defined? vrátí rozsah odkazované proměnné nebo nil, pokud proměnná není v aktuálním kontextu definována:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Lokální proměnné Ruby
Lokální proměnné jsou lokální pro konstrukci kódu, ve které jsou deklarovány. Například k lokální proměnné deklarované v metodě nebo uvnitř cyklu nelze přistupovat mimo tento cyklus nebo metodu. Názvy lokálních proměnných musí začínat buď podtržítkem, nebo malým písmenem. Například:
loopcounter = 10_LoopCounter = 20
Globální proměnné v jazyce Ruby
Globální proměnné v jazyce Ruby jsou přístupné odkudkoli z programu Ruby bez ohledu na to, kde jsou deklarovány. Názvy globálních proměnných jsou uvozeny znakem dolaru ($). Například:
$welcome = "Welcome to Ruby Essentials"
Používání globálních proměnných se důrazně nedoporučuje. Problém s globálními proměnnými spočívá v tom, že jsou nejen viditelné kdekoli v kódu programu, ale lze je také měnit odkudkoli z aplikace. To může ztížit sledování chyb.
Je však užitečné vědět, že jako vývojáři Ruby máte k dispozici řadu předdefinovaných globálních proměnných, pomocí kterých můžete získat informace o prostředí Ruby. Stručný přehled jednotlivých těchto proměnných je obsažen v následující tabulce.
Název proměnné | Hodnota proměnné |
---|---|
|
Umístění poslední chyby |
$_ |
Řetězec naposledy načtený gets |
$. |
Číslo řádku naposledy načtené interpretem |
$& |
Řetězec naposledy porovnávaný regexpem |
$~ |
Poslední shoda regexpu, jako pole podvýrazů |
$ n |
N-tý podvýraz v poslední shodě (stejně jako $~ ) |
$= |
Případ-necitlivosti |
$/ |
Oddělovač vstupního záznamu |
$\ |
Výstupní záznam oddělovač |
|
Název souboru právě prováděného ruby skriptu |
$* |
Název souboru právě prováděného ruby skriptu |
Název souboru právě prováděného ruby skriptu argumenty příkazového řádku použité k vyvolání skriptu | |
$$ |
ID procesu interpretu Ruby |
$? |
Stav ukončení posledního spuštěného podřízeného procesu |
Například můžeme spustit metodu gets pro příjem vstupu z klávesnice, a poté odkazem na proměnnou $_ získat zadanou hodnotu:
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
Alternativně bychom mohli zjistit ID procesu interpretu Ruby:
irb(main):007:0> $$=> 17403
Proměnné třídy Ruby
Proměnná třídy je proměnná, která je společná pro všechny instance třídy. To znamená, že pro všechny objekty instancované z této třídy existuje pouze jedna hodnota proměnné. To znamená, že pokud jedna instance objektu změní hodnotu proměnné, tato nová hodnota se v podstatě změní pro všechny ostatní instance objektů.
Jiný způsob, jak uvažovat o proměnných třídy, je jako o globálních proměnných v rámci jedné třídy.
Proměnné třídy se deklarují tak, že se název proměnné předřadí dvěma znaky @ (@@). Proměnné třídy musí být při vytváření inicializovány. Například:
@@total = 0
Proměnné instancí jazyka Ruby
Proměnné instancí jsou podobné proměnným třídy s tím rozdílem, že jejich hodnoty jsou lokální pro konkrétní instance objektu. Například pokud třída obsahuje instanční proměnnou s názvem @total, pokud jedna instance objektu změní aktuální hodnotu @total, změna je lokální pouze pro objekt, který změnu provedl. Ostatní objekty téže třídy mají své vlastní lokální kopie proměnné, které jsou nezávislé na změnách provedených v jiných objektech.
Proměnné instancí se v jazyce Ruby deklarují předřazením názvu proměnné jednomu znaku @:
@total = 10
Obsah konstanty Ruby
Konstanty Ruby jsou hodnoty, které by se po přiřazení hodnoty neměly měnit. Říkám měl by, protože Ruby se od většiny programovacích jazyků liší tím, že umožňuje měnit hodnotu konstanty i po její deklaraci, ačkoli interpret mírně protestuje varovným hlášením.
Konstanty deklarované v rámci třídy nebo modulu jsou dostupné kdekoli v kontextu této třídy nebo modulu. Konstantám deklarovaným mimo třídu nebo modul je přiřazen globální rozsah.
Předchozí | Obsah | Následující |
Poznání proměnných jazyka Ruby | Třídy čísel a převody v jazyce Ruby |
.